識ログ

超絶プログラミング初心者のUnity開発備忘録

【解決済み】Layerとかをスクリプトで変更しても反映されない?【Unity】

【問題点】

実際に表示されている画像のLayerやSortingLayerが変更されない。

 

【問題が発生した手順】

①obj_director.csでオブジェクトを生成。

 

public GameObject obj;

Instantiate(obj);

 

②obj_director.csを空のインスタンスにアタッチ

 

③そのインスペクタにプレハブをD&D(ここまで普通のアウトレット接続)

 

④obj_director.csでLayer変更、あるいはSortingLayerを変更

 

obj.layer = LayerMask.NameToLayer("aaa");

あるいは

obj.GetComponent<SpriteRenderer>().sortingLayerName = "bbb";

 

⑤実際に動かして、ヒエラルキーを確認するとLayer、SortingLayerは変わってない。

 

【原因】

以上の手順を踏んでしまうと、変更されるのはプレハブのLayer、SortingLayerであって、実際に表示されているインスタンスは変更されない。

 

【解決策】

Instantiateするとき、

 

GameObject inst = Instantiate(obj);

と新しいGameObjectを作る。

 

このinstこそがヒエラルキに表示されているインスタンスなので

inst.layer = LayerMask.NameToLayer("aaa");

あるいは

inst.GetComponent<SpriteRenderer>().sortingLayerName = "bbb";

 

とすればOK。

 

【まとめ】

プレハブでインスタンスを大量に生成するときは、必ずGameObjectに代入する。