2010年1月14日木曜日

【Unity】その3:コンポーネント

 チュートリアル形式で書くと自分の理解の助けになるので、しばらくこの形式で書いていこうと思います。尚、別記がない限りUnity起動時デフォルトでロードされるTropical Paradise projectを使っています。

 今回はコンポーネント(Component)を勉強します。プレハブ、あるいはゲームオブジェクトにはその本体に機能を追加することができます。これがコンポーネントです。
 コンポーネントには様々なものがあります。たとえばライトのコンポーネントを追加すると追加されたオブジェクトは光りだします。スクリプトもコンポーネントの一種です。スクリプトを追加するとオブジェクトはスクリプトの記述に従いふるまいます。もっとも基本的なコンポーネントはトランスフォーム(Transform)です。これはオブジェクトの位置、角度、大きさを決定します。すべてのオブジェクトは必ずトランスフォーム・コンポーネントを持っています。
 Unityではプレーヤーの視点を決定するカメラもコンポーネントのひとつです。従って特別にカメラというものがあるわけではなく、カメラ・コンポーネントを実装しているオブジェクトがカメラということになります。

 オブジェクトのコンポーネントはInspectorビューで確認・編集・削除ができます。下のFirst Person Controller Prefab(Projectビュー/Hierarchy内にある)はゲーム内でプレーヤーの本体となるプレハブです。コンポーネントとして基本のトランスフォームの他にプレーヤーの移動を制御するスクリプトFPSWalker、プレーヤーの背丈や登れる段差を設定するCharacter Controller、マウスの動きに合わせて向きを制御するMouse Lookがあります。これらのコンポーネントがないとFirst Person Controller Prefabはただの名前だけの存在です。


 コンポーネントを追加するにはProjectビューのアセット(プレハブ)を選んでComponentから任意の追加したいコンポーネントを選びます。Hierarchyのリストからゲームオブジェクトを選択しても追加することができますが、インスタンスの場合親のプレハブとのリンクが切れると警告されます。インスタンスの変更をプレハブに適用するにはGameObject->Apply Change to Prefabを選びます。

 もう少し詳しくFirst Person Controller Prefabを見てみましょう。First Person Controller Prefabはカプセル形のメッシュGraphicsとカメラ・コンポーネントを実装したMain Cameraからなっています。これがプレーヤーの正体です。これがゲーム時に移動しているのです。



 ProjectビューのFirst Person Controller PrefabをSceneビューの任意の場所にドラックすることでその場所からゲームを開始できます(その際Hierarchyで既存の古いFirst Person Controller Prefabを消しておきます)。

 GraphicsとMain Cameraはそれぞれ独立したアセットですがFirst Person Controller Prefabを親とした一つのグループに属しているので、親が動くとそれに同期してついて行きます。これをペアレンティングといい、例えば車体を親として4つのタイヤを子にすることによりゲーム内では一つの車として振る舞います。ペアレンティングをするには親にしたいアセットに子にしたいアセットをドラックします。

 GraphicsはMesh Rendererのコンポーネントを実装しているので見た目にもカプセル形の立体が見えます。一方Main Cameraはそのコンポーネントがないので「透明」で見えません。Main Cameraを選択してInspectorビューで見るとFirst Person Controller Prefabにも実装されていたMouse Lookがここにもあります。これはFirst Person Controller PrefabのMouse Lookスクリプトがマウスの動きで方位を決めるのに対しMain Cameraのそれは上下角を決めるためにあるからです。この2つのスクリプトでマウスを使って現実世界のような視点でプレーすることができるのです。
 ちなみにゲーム内で動いて見て回るだけならプレーヤー移動のスクリプトを内蔵したFirst Person Controller Prefabとカメラを実装したMain Cameraだけがあれば事足ります(Graphicsはプレーヤーの当たり判定用?)。

 といわけで今回はコンポーネントの話でした。リファレンスはここです。

0 件のコメント: