i-school - 間違えやすい点

間違えやすい点

 これは同時に、わかりにくい点であるとも言い換えられます。

スクリプトにおけるGameObjectとgameObjectの違い(Transformとtransformの違い)


 最初の文字が大文字のGameObjectは、intやstringなどと同じで「GameObject型」という型の種類になります。
 最初の文字が小文字のgameObjectは、このスクリプトがアタッチされているゲームオブジェクトが代入されている「変数」になります。
 
 特にはじめのうちは、この使い方がよくわからないと思いますが、大文字のGameObjectは型なので、基本的には変数と合わせて宣言しないと使えないと覚えてください。
 小文字の gameObject は変数ですので、中の値にはスクリプトがアタッチしているゲームオブジェクトが代入されていると覚えてください。

 なお、Transformとtransformも同様です。

 最初の文字が大文字のTransformは、intやstringなどと同じで「Transform型」という型の種類になります。
 最初の文字が小文字のtransformは、このスクリプトがアタッチされているゲームオブジェクトの持つ、Transformコンポーネントの値が代入されている「変数」になります。

プレファブのアサイン情報について

 public 修飾子で宣言した型の変数には、ヒエラルキー上にあるゲームオブジェクトの情報(クラスやコンポーネント)をアサインしておくことが出来ます。
ただしこれは、ゲーム実行時に、アサイン元のゲームオブジェクトがヒエラルキー上に存在していることと
アサイン先であるゲームオブジェクトとが、ヒエラルキー上に同時に存在している必要があります。

アサインできる場合


 この例の場合ですと、インスペクターの表示されているGameManager(Script)はMapDataのアサインを取得出来ています。
何故ならばMapDataの情報を持つゲームオブジェクトがヒエラルキー上にあり、かつ、このGameManagerのゲームオブジェクトもヒエラルキー上に存在しているからです。

アサインできない場合


 この例の場合では、PlayerというプレファブにGameManagerのアサイン情報を取得したいのですが、残念ながらアサインは出来ません。
何故ならば、Playerというゲームオブジェクトはヒエラルキー上にない設計図の状態であり、アサインしたい情報であるGameManagerは
ヒエラルキー上に存在しているためです。


 そのため、プレファブ化してヒエラルキー上に存在していないゲームオブジェクトには、ヒエラルキー上にあるゲームオブジェクトの情報を事前にアサインすることはできません。

 よってプレファブのアサイン情報は、プレファブが生成された後にアサインを行う必要があります。

 例外として、プレファブ自身やプレファブの子オブジェクトの持つ情報(クラスやコンポーネント)については、事前のアサインが可能です。

アサインについて

 ゲームオブジェクトに事前にアサインできる情報とは、いずれかのゲームオブジェクトにアタッチされてるコンポーネント、あるいはクラス、あるいはゲームオブジェクトそのものだけです。
 スクリプトの情報が欲しいからといって、スクリプトのファイル自体をアサイン情報にアサインすることはできません。
必ずゲームオブジェクトにアタッチされているスクリプトをアサインする必要があります。

 スクリプトをゲームオブジェクトにアタッチする動作と、アサインできる情報をアサインする動作はどちらもドラッグアンドドロップで操作できますが
異なる処理であることを忘れないでください。