Tips

【Unity】練習問題 4

【Unity】練習問題 4

Unity練習問題 問4

UnityのエディターやC#スクリプトのオリジナル問題を紹介していきます。
第4問もTransformコンポーネントについての問題です。

問題


下図の構成シーンにおいて、Cube3にPractice_04スクリプトを適用した。
シーンの再生結果として正しいものはどれか。1つ選択しなさい。

 ヒエラルキー
WS000329

インスペクター
WS000325 WS000326 WS000327

ゲームビュー
WS000328

Practice_04.cs

using UnityEngine;
using System.Collections;

public class Practice_04 : MonoBehaviour {

	Transform tfm1;
	Transform tfm2;

	void Start() {
		tfm1 = transform.parent.parent.GetComponentInChildren<Transform>();
		tfm2 = transform.GetComponentInParent<Transform>();
	}

	void Update() {
		tfm1.Rotate(0, 0, 1);
		tfm2.Rotate(0, 1, 0);
	}
}
  1. Cube1がZ軸を中心に回転し、Cube2はY軸を中心に回転する。
  2. Cube1がZ軸を中心に回転し、Cube3はY軸を中心に回転する。
  3. Cube2がZ軸を中心に回転し、Cube3はY軸を中心に回転する。
  4. Cube2がZ軸とY軸を中心にそれぞれ回転する。
  5. Cube2がZ軸とY軸を中心にそれぞれ回転し、Cube1はY軸を中心に、Cube3はZ軸を中心に回転する。
  6. 何も起こらない。

解答


解答を見る

2(Cube1がZ軸を中心に回転し、Cube3はY軸を中心に回転する。)

unity_practice_4

解説


解説を見る

まず初めに、
transformは、スクリプトが適用されているオブジェクト自身のTransformコンポーネントを指します。
transform.parentは、自身から見た一つ上の親要素を指します。今回の場合はCube2を指します。
transform.parent.parentとすると、さらに1つ上の親要素ということなるため、Cube1を指します。

次に、
GetComponentInChildren<>()は、自身とその子要素の中からコンポーネントを深さ優先検索で取得します。
今回の場合はCube1→Cube2→Cube3の順にTransformコンポーネントが見つかるまで検索が行われますが、Cube1がTransformコンポーネントを持っているため検索はそこで終了します。したがって、Transform型の変数 tfm1は、Cube1のTransformコンポーネントを参照することになります。

また、
GetComponentInParent<>()は、自信とその親要素の中から、コンポーネントを深さ優先検索で取得します。
今回の場合はCube3→Cube2→Cube1の順にTransformコンポーネントが見つかるまで検索が行われますが、Cube3がTransformコンポーネントを持っているため検索はそこで終了します。したがって、Transform型の変数 tfm2は、Cube3のTransformコンポーネントを参照することになります。

最後に、
Transform.Rotate(x, y, z)は、オブジェクトをローカル座標系で回転させる関数です。
tfm1.Rotate(0, 0, 1)で、Cube1が自身のZ軸を中心に毎フレーム1度ずつ回転します。子要素であるCube2とCube3も一緒に回ります。
tfm2.Rotate(0, 1, 0)で、Cube3が自身のY軸を中心に毎フレーム1度ずつ回転します。

したがって、正解は2番です。

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

[Unity_317×90]

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

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

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

Recent News

Recent Tips

Tag Search