質問: TransformクラスとGameObjectクラスの違いってなんでしょうか? Transformクラスはオブジェクトの大きさ、位置、方向を操作するためのオブジェクトだというのはわかるのですが。。。 例えば以下のような動的にゲームオブジェクトmyCubeを生成するスクリプトがあります。 ``` using UnityEngine; using System.Collections; public class AddCubeScript : MonoBehaviour { public Transform myCube; // ここ void Update () { if (Input.GetKey(KeyCode.Space)) { Debug.Log ("space"); Instantiate (myCube, transform.position, transform.rotation); } } } ``` このスクリプトでTransformクラスをGameObjectクラスに変えても問題ないようで、どう違うのかがよくわからないです。 GameObjectクラスがTransformクラスのスーパークラスだから(正確にはMonoBehaviourだから?)問題ないということでしょうか?Unityと言うよりは継承がよくわかっていないかもしれないです。 よろしくお願いいたします。
回答: 下記ページの説明が分かりやすいと思います。 ゲームオブジェクト(GameObjects) > > ゲーム中の全てのオブジェクトはゲームオブジェクトです。 しかし、ゲームオブジェクト自身は何もしません。それが、キャラクタや環境、特殊効果として働くには特別な属性が必要です。 > > ... > > ゲームオブジェクトがコンテナ(容れ物)であるという事です。それは、空っぽの箱です。ライトが設定された島や物理的に走行する車など異なる部品をいれておく事が出来ます。ゲームオブジェクトを真に理解するには、それらの部品を理解しなければなりません:部品はコンポーネント(Components)と呼ばれます。 > > ... > > 移動コンポーネントは最も重要なコンポーネントの1つです。ゲームワールド(シーンビュー)における、ゲームオブジェクトの位置、回転、縮尺を決めます。 > > ... > > スクリプト(script)を作りゲームオブジェクトに追加すると、コンポーネントと同様にスクリプトがインスペクタに表示されます。スクリプトは保存されるとコンポーネントになります。 > > ... > > スクリプト中で宣言した、全てのパブリック変数は、ゲームオブジェクトのインスペクタ上で編集可能、又は、リンク可能となります。スクリプトを記述する際、ゲームオブジェクトの全てのメンバにアクセスできます。 > > > つまり、**GameObjects**オブジェクトは入れ物で**Transform**コンポーネントはGameObjectsの位置、回転、縮尺を決める部品ですが、**Instantiate**関数でオブジェクトをクローンする際に位置と回転を明示的に指定しているので、結果が同じになるのだと思います。