非アクティブオブジェクトをアクティブ化

Unityを弄っててオブジェクトのアクティブの切り替えでつまずいたのでその解決方法をメモ

オブジェクトを取得するには自分は
GameObject.Find(“ファイル階層”);
と入力しています
例えば
worldというフォルダの中に国名入ってたとして日本にアクセスしたいなら
GameObject.Find(“world/japan”);
こんなかんじになります。
しかしこれだと非アクティブなオブジェクトにはアクセス出来ないみたい。
どうしようかと悩んでたら
transform.Find(“ファイル名”)
でアクセスできるらしい

ここで罠なのが親オブジェクトからしかアクセス出来ないらしく
例えば
Mercury/hoge
Venus/hoge
Earth/world/japan

というフォルダがあって
VenusからEarthのworldファイルを非アクティブ又はアクティブ化したい場合

transform.Find(“Earth/world);

こうやって書くとアクティブされないしエラーも吐かれない。

何故か?

transfrom.find自体が階層検索に対応してないからである(多分)

transform.findは正確にはgameObject.transform.Find(“string name”);

であるので事前にどのアクセスする親オブジェクトにアクセスしなければならない
例のVenusからworldをアクティブするには
GameObject.Find(“Earth”).transform.Find(“world”).enabled=false or true:
で解決出来きる

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中