Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9309

Unity(C#)で書いちゃダメなコード

$
0
0

Unity(C#)で書いちゃダメなコード

この間Unityをやっているときによくわからんエラーが起こっていたのでまとめ(2020/3/1現在2つ)

Listをdefaultで初期化

まじでわからん。なぜ?って思うけどやればわかる

List<T>ListName = default;

List<int> ListName = default; //defaultで初期化するとエラー起きる

void Start()
{
    ListName.Add(1);
}

解決法

List<int> ListName = new List<int>; //List<T>と書いてあげれば解決する

void Start()
{
    ListName.Add(1);
}

・3/1追記
    defaultやnullだとListが存在しないってことになってしまいエラーが発生します。
    逆にList<T> = new List<T>();だと要素数が0のリストが生成されるのでエラーが起きないです。
    コメントで教えてくださったalbireoさんそしてMidoliyさんありがとうございました。

Particleを再生し続ける

bool bがtrueの時は再生falseなら停止って処理を書いたときにハマった。

if(b){
    par.Play();
}else{
    par.Stop();
}

bool b = false;
ParticleSystem par = null;

void Update()
{
    if(b){
      par.Play();
    }else{
      par.Stop();
    }
}

どうやら連続でParticleを再生し続けるとバグるらしい。
ここに書いてあった

解決法

値が前のフレームと違ったときにだけ実行させればいいので

    public bool b = false;
    public ParticleSystem par = null;

    private bool before;
    private bool after;
    void Update()
    {
        after = b;
        if (before != after)
        {
            State(b);
        }
        before = b;
    }

    void State(bool state)
    {
        if (state)
        {
            par.Play();
        }
        else
        {
            par.Stop();
        }
    }

今現在はここまでです。随時追加していくつもりです!
では、良いUnityライフを!


Viewing all articles
Browse latest Browse all 9309