なんとなくコンポーネント指向

Unityは、コンポーネント指向という考え方のフレームワークとなっています。
インストールしてみたはいいものの、通常のプログラムとは勝手が異なるため
最初は使い方がイマイチわからないかもしれません。

今回は、非ゲームのプログラマー向けに、なんとなくコンポーネント指向を解説します。

unity_start

Unityを起動すると、このような画面が表示されます。
※この画面は、ある程度作成したプロジェクトを表示しています

この中で、HierarchyとProjectタブに注目してください。
Projectタブ内に表示されているものは、実際にそのプロジェクトが保存されているフォルダ内に存在する
ファイルの一覧が表示されています。
一方、Hierarchyタブ内には、実際にゲーム画面に存在しているオブジェクトが表示されています。

プログラマ的には、Hierarchyにある情報は、インスタンス化されたオブジェクト、と考えることができます。
Prefabという機能もあり、単純にそう言い切ることはできないのですが、それは後の記事で解説します。

Hierarchyに存在するオブジェクトは、すべてGameObjectというクラスを継承しています。
Unityが自動でこれらのGameObjectすべてをループし、毎フレームに特定のメソッドを実行しています。
プログラム的にイメージすると、下記のようになります。

また、さらにGameObjectには、様々なコンポーネントを設定することができます。
上記の画像は、Projectタブ内のPrefabフォルダに存在するToriBallという情報を選択していますが、
そのToriBallの情報が、右側のInspectorタブに表示されています。

このInspectorには、ToriBallに設定されたコンポーネントと、そのコンポーネントの設定値が表示されています。
Transform、Sphere、Sphere Collider、Mesh Render、RigidBody、Audio Source、Ball Collision
などが並んでいますが、それぞれが一つのコンポーネントとなります。

この中で、Ball Collision以外はUnityに元から用意されたコンポーネントとなります。
Ball Collisionは、ボールのあたり判定などを制御する、自作したC#のスクリプトになります。
コンポーネント用のC#スクリプトは、MonoBehaviourを継承して実装します。
その自作したC#スクリプトにUdate()メソッドを実装すると、
毎フレームにUpdate()メソッドが実行されます。
これをプログラム的にイメージすると、下記のようになります。

キャラクターを操作したい場合には、そのキャラクターのGameObjectへ、
操作用のC#スクリプトをコンポーネントとして登録し、
そのC#スクリプトのUpdate()メソッドに、キーを押した場合の動きをプログラミングすることで
キャラクターを操作するようにできます。
GameObjectへC#スクリプトを登録するには、登録したいGameObjectを選択して
Inspectorに情報を表示させた後、Inspectorに対してC#スクリプトをドラッグ&ドロップ、
またはInspector上のAdd Componentボタンをクリックして登録します。

書いていてまとまりのない文章となってしまったので、とりあえずここまで記載します。
本記事はまだ加筆修正を行います。