読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

SetActiveでfalseした物を再度trueする

Unityでコード書いてて必ずはまることですが、SetActiveでfalseするとFindできなくなるので、再度trueできなくなります。
ゼビウスではエリアの切り替えを、全体ではfalseにして、それぞれ使いたい面だけtrueにしてます(1面実行中に2面の地上敵が出てこないように)

そういう場合、自身はfindできませんが、親のtransformからなら検索できます。
例えば、

Cabvas
 MenuPanel

という親子関係があった場合、

GameObject.Find("MenuPanel").SetActive(false);

としてしまうと、

GameObject.Find("MenuPanel").SetActive(true);

これは失敗しますが、次のように親から辿ればtrueにできます。注意する点はtransformからFindしたものもtransformなので、activeを制御するためには、gameObjectとして取り出す必要があります。

GameObject.Find("Canvas").transform.Find("MenuPanel").gameObject.SetActive(true);

uGUIで、パネルを使って、ウインドウ切り替えする場合も重宝です。前はalphaを0%にして消してましたが、focusは残るので、被ってるとボタンが押せなくなります。

広告を非表示にする