スクリプトの実行
オブジェクトの振る舞い
スクリプトをシーン上のオブジェクにアタッチしている状態でゲームを実行すると、スクリプトがオブジェクトに読み込まれ実行されます。スクリプトは、オブジェクトの振る舞い(動作)を記述する「台本」の役割を担います。
スクリプトを作成すると、最初からスクリプトの起動に最低限必要なコードが記述されています。およそ、スクリプトは次のような内容です。
using UnityEngine; using System.Collections; public class スクリプト名: MonoBehaviour { void Start () { //オブジェクト起動時に実行されるコードを書く } void Update () { //フレーム毎に連続で実行されるコードを書く } }
スクリプトを書き換えたり、オブジェクトにスクリプトを設定したりする前に、重要なことがあります。それは、スクリプトの名前(ソースファイルの名前)と C# コード内のクラス名を一致させなければならない点です。スクリプト名に一致するクラスを持たない場合、Unity は警告を報告します。
Unity はオブジェクトに設定(associate)されているスクリプトの名前に一致するクラスを読み込むため、必ずスクリプトの名前に一致するクラスが必要になります。スクリプトとクラス名が一致していない場合、スクリプトは実行されません。スクリプト名に一致するクラスが定義されていれば、他のインターフェイスやクラスなどがスクリプトに含まれているのは問題ありません。
このため、C# で記述するスクリプトのクラス名は Unity プロジェクト全体で一意である必要があります。スクリプトとして設定するクラスにも任意の名前空間に所属させられるので、異なる名前空間の中であれば、同じ名前のクラスをスクリプトとして設定できます。
スクリプトとして起動するクラスは、必ず UnityEngine.MonoBehaviour クラスを継承しなければなりません。このクラスを継承していないスクリプトを設定しても、エンジンから呼び出されないので正常に機能しません。
MonoBehaviour クラスはオブジェクトの振る舞い(ビヘイビア)を表しています。スクリプトはこのクラスを継承して、オブジェクトの振る舞いを記述します。
UnityEngine.Object UnityEngine.Component UnityEngine.Behaviour UnityEngine.MonoBehaviour
public class MonoBehaviour : Behaviour
Unity 環境上では、オブジェクトに設定されたスクリプトは自動的にビルドされ、内部でインスタンス化されます。オブジェクトに読み込まれたスクリプトは、オブジェクトの状態に応じて定められたメソッドが呼び出されます。この考え方は、一般的な GUI プログラミングのイベント駆動に近いものと考えてかまいません。
オブジェクトがスクリプトを起動すると、最初に Start() メソッドが 1 度だけ呼び出されます。このメソッドは、パラメータを受け取らず結果も返しません。
void Start()
ゲームを開始すると、オブジェクトに設定されているスクリプトの Start() メソッドが実際に実行されているかどうかを確認してみましょう。そのためには、何らかの動作を書いて結果を確認する必要があります。
この場では Unity の「Console」ウィンドウにメッセージを表示する print() メソッドを使うことにします。このメソッドは MonoBehaviour クラスで定義されている static なメソッドです。
public static void print (object message)
message パラメータにはテキストとして「Console」タブに出力する任意のオブジェクトを指定します。このオブジェクトの ToString() メソッドが返す文字列表現が実際に出力されるテキストとなります。
using UnityEngine; public class Test : MonoBehaviour { void Start() { print("Stand by ready"); } }
コード1はスクリプトが実行されているかどうかを確認するだけの簡素なコードです。これを適当なオブジェクトにアタッチしてゲームを開始すると、「Console」ウィンドウに上の実行結果のようなテキストが出力されます。