Tips

【Unity】練習問題 6

【Unity】練習問題 6

Unity練習問題 6


UnityのエディターやC#スクリプトのオリジナル練習問題を出題していきます。
第6問はGameObject.Findメソッドに関する問題です。

※使用しているUnityのバージョンは5.5.2f1です。

問題


上図のヒエラルキーから構成されるシーン内にて、下記のスクリプトを動作させた。
この状態での動作としてもっとも正しいものを1つ選択しなさい。※全てのGameObjectは生成後の初期状態である。

using UnityEngine;

public class Practice_06 : MonoBehaviour {

	void Start () {
		GameObject.Find("Cube").GetComponent<MeshRenderer>().enabled = false;
	}
}
  1. ルートにあるCubeが描画されなくなる。
  2. Planeの子要素のCubeが描画されなくなる。
  3. 全てのCubeが描画されなくなる。
  4. どちらか一方のCubeが描画されなくなる。
  5. 何も変わらない。

解答


解答を見る

4

解説


解説を見る

GameObject.Find()は、引数に渡した文字列でシーン中のGameObjectを検索するメソッドですが、指定したGameObjectの名前が複数存在する場合、取得される対象がいずれか一つだけ(基本的には後から生成されたほうが取得される)となります。したがって正解は4番です。

GameObjectの名前がユニークであれば問題ありませんが、本題のように対象が複数になる場合は、明示的にヒエラルキーのルートからのパスを指定するなど、使い方を工夫する必要があります。

【例】

Planeの子要素のCubeを指定したい場合、GameObject.Find(“Plane/Cube”);
ルートにいるCubeの場合は、GameObject.Find(“/Cube”);
※「/」がヒエラルキーの階層構造の最上を指します。

【補足】

全てのCubeを取得したい場合、GameObject.Find()では無理なので、一般的には下記のメソッドを使用します。

GameObject.FindGameObjectsWithTag(“タグ名”);

タグを使った検索は処理速度が非常に速いため、単一のオブジェクトを頻繁に検索する場合にもおすすめです。
単一タグを検索する場合は、下記のメソッドを使用します。※sがない

GameObject.FindGameObjectWithTag(“タグ名”);

タグを使った複数GameObjectの取得については、詳しくは こちら をご覧ください。

<<  < 次の問題  前の問題 > >>

[Unity_317×90]

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search