LoginSignup
0
0

More than 5 years have passed since last update.

Unityで良くあるミス(自戒)(泣)

Last updated at Posted at 2017-09-12

デバッグなどで雑にpublicな配列を作ってしまうケース

hoge.cs

public int[] hogehogeArr = new int[] {15,20,30,40,42,80,120,200,800,1200,2000,8000,24000,843201,1143201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

こういうのをほったらかして、色々配列を操作していると、
hogehogeArr[i]とかで参照する際、あるはずの値がとなれくて、エラーになる。

public で配列にしていると、インスペクタ上で値が保存されて、
配列数までおかしくなるので注意(泣)。

ちゃんと private int[]にしよ。。

あと、インスペクタに表示しないように下記も入れて置くといいです。汗

hoge.cs
[HideInInspecter]
public int[] hogehogeArr = //〜省略

@Rwf-9DH3 さんご指摘ありがとうございます!m( _ _ )m

今日だけで2回ハマった汗

Findで子を削除する場合

hoge.cs

if (obj.transform.Find("ScissorsObj")) //対象があるか存在確認
{
    GameObject hasamiMarkObj = obj.transform.Find("ScissorsObj").gameObject;
    if (hasamiMarkObj)
    {
        Destroy(hasamiMarkObj);
    }
}


ポイントはif (obj.transform.Find("ScissorsObj"))
でチェックする必要がある。

あと、Instantiateとかで生成したオブジェクトは、デフォルトで名前の後ろに(Clone)と付いているので、
生成後リネームするの忘れないように。。

マテリアルの色をスクリプトで変更してもどせなくなってしまう。。

hoge.cs

if(instanceLeaf.GetComponent<Renderer>().sharedMaterial.HasProperty("_Color")){
    // 注意、エディタ上の色情報も変換されるのでもとに戻せない
    instanceLeaf.GetComponent<Renderer>().sharedMaterial.color = new Color(1f,1f,1f);
}

事前に元の色をとっておく。。

hoge.cs
originalColor = GetComponent<Renderer>().sharedMaterial.color;
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0