2013年6月19日水曜日

GameObject と gameObject

色んな説明の文章を読んでて、適当に流していたんだけれど、ずっとちょっとひっかかってた・・・。
GameObject と gameObject の違いって何??
スクリプト中で宣言した、全てのパブリック変数は、ゲームオブジェクトのインスペクタ上で編集可能、又は、リンク可能となります。スクリプトを記述する際、ゲームオブジェクトの全てのメンバにアクセスできます。ゲームオブジェクトのクラスメンバリストはここで確認できます。 コンポーネントがゲームオブジェクトに付加されていた場合、スクリプトからメンバ名を指定する事で、直接コンポーネントにアクセスできます。例えば、transformとタイプする事はgameObject.transformとタイプする事と同じです。 特にゲームオブジェクトへの参照を指定しなくても、コンパイラによってgameObjectを指定していると推測されます。
thisとタイプする事で、記述中のスクリプトコンポーネントにアクセスできます。this.gameObjectとタイプすると、そのスクリプトが付加されたゲームオブジェクトを参照します。単に、gameObjectとタイプしても、同様に参照できます。論理的にはthis.transformとtransformは同じ意味です。もし、ゲームオブジェクトのメンバに含まれないコンポーネントにアクセスする場合は、次のページで説明するgameObject.GetComponent()を使用しなければなりません。
参照:http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/Manual/GameObjects.html

つまりどういうことかっていうと。
"Test"というオブジェクトにくっつけたスクリプトに以下のように記述します。
print(GameObject);
print(gameObject.transform);
print(transform);

★ちなみにGameObject.transformという書き方はエラーが出て実行できませんでした。
で、実行結果はというと・・・
UnityEngine.GameObject
Test (UnityEngine.Transform)
Test (UnityEngine.Transform)
GameObject
何か、もんやりと誰とは無しにGameObject・・・とデータの型をつぶやいている感じ。

gameObject
そのスクリプトが属しているオブジェクトに変換される

transform
これだけでも、そのスクリプトが属しているオブジェクトのtransformに変換される(便利機能ってとこ?)

-------------------------------------------------------------------------
ちなみに・・・以下のprint文の実行結果はというと。
//intはGameObject同様に型の結果だけが出ている感じ
print(int); ----> System.Int32

//これは実行エラー。んじゃあ、Transformって一体どんな時に使うんだ??
print(gameObject.Transform);

--------------------------------------------------------------------------
というわけで、この項目で結局わからんのでほっといてる事。
・GameObjectって型宣言以外でどう使うの?
PlayerScript.js内での記述の選択肢としては、3つあります。
(1) GameObject.Find("North").GetComponent(SomeScript);
(2) gameObject.Find("North").GetComponent(SomeScript);
(3) transform.Find("North").GetComponent(SomeScript);
結果、
(1)(2)ゲーム空間全体を検索してしまうようで、NorthBを指定したはずがNorthAが選択されてました。
(3)PlayerA、PlayerBの各々の子である、NorthA、NorthBを指定できました。
参照:http://blog.be-style.jpn.com/article/57118009.html 
このあたりも気になるところ

・Transformとtransformの違い・・・・

道のりは長い・・・




0 コメント:

コメントを投稿