【解決済み】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に代入する。