前回、デフォルトで用意されるソースコードに少しだけ手を加えて、Cube(スクリプトを組み込んだゲームオブジェクト)を回転するプログラムを作りました。ゲームオブジェクトを操作するには、まず「ゲームオブジェクトは、C#の世界でどう扱われているのか?」を理解しないといけません。
C#は、すべてを「
クラス」として定義し利用します。ゲームオブジェクトも、当然クラスとして定義されています。それが「
GameObject」というクラスです。このクラスの中に、ゲームオブジェクトのさまざまな設定情報や、ゲームオブジェクトを操作するための機能などがまとめられています。
GameObjectを扱うとき、まず最初に覚えるべきは「
trasform」というプロパティでしょう。これは、位置や向き、大きさなどの情報を扱う「
Transform」というクラスのインスタンスが設定されているプロパティです。
この
Transformクラスは、ゲームオブジェクトのインスペクターにある「
Transform」の項目の内容に相当する機能が用意されています。つまり、この
Transformにある機能の使い方を覚えれば、基本的なゲームオブジェクトの操作はできるようになる、というわけですね。
■GameObject = MonoBehaviour?
前回、ちょっとだけ書いたスクリプトでは、こんな具合にしてCubeを回転させていました。
this.transform.Rotate(num, num, num);
スクリプトが組み込まれているゲームオブジェクトの
transformプロパティ(に保管されている
Transformインスタンス)の
Rotateというメソッドを呼び出して回転していたのですね。
Rotateについてはこの後で触れるとして、ここで注目して欲しいのは「
this」です。
thisっていうのは、このクラスのインスタンス自身を示すものでした。でも、待って下さい。このクラスは、
GameObjectではなく、
MonoBehaviourというクラスを継承して作られています。これはどういうことでしょう?
GameObjectと
MonoBehaviourは、継承関係もありません。実は、全然別のクラスなんです。では、なぜ
MonoBehaviourを継承したクラスが
GameObjectのように使えるのか。それは、
MonoBehaviourクラスでは、このスクリプト・コンポーネントを組み込んでいる
GameObjectインスタンスのプロパティ類がすべて用意されているからです。つまり、
MonoBehaviourは
GameObjectと別のクラスだけれど、
GameObjectとして扱えるように同じものが用意されている、というわけです。
ですので、この
MonoBehaviourを継承したクラスは、「ほぼ
GameObject」と考えて利用できるようになっているんです。