コンポーネントの実装
ここからはC#のスクリプトを編集してコンポーネントを作成していきます。
先ずMonoBehaiviourを継承したオブジェクトの基本機能を説明していきます。
公式のドキュメントに載っている内容ですがよく使用する内容として下記のような機能が存在します。
Awake
Awakeは全てのGameObjectのインスタンス作成後に呼び出される最初のメソッドです。
インスタンスは作成されているので他のオブジェクトの参照も安全に行えます。
ゲーム開始前に呼び出されるので主に初期化などに使用します。
又、スクリプトが無効の状態でも呼び出されます。
注意事項としては、Awakeが呼び出される順番がランダムなのでAwake内で他のオブジェクトのAwakeで初期化する値を参照しないようにしましょう。
void Awake(){}
Start
void Start()は初回のUpdate直前に一度だけ呼び出されるメソッドです。
Awakeで初期化されたものも安全に使用できるのでAwakeで重要なものを初期化してStartでそれらを参照するといった使い方ができます。
Awakeと違い、スクリプトが無効の状態では呼び出しが行われません。
void Start(){}
Update
Updateは毎フレーム呼び出されるメソッドです。
ゲーム内の挙動や状況のチェックなど数多くの箇所で使用されます。
Start同様にスクリプトが無効の状態では呼び出しが行われません。
Time.deltaTimeを使用することで初回のUpdateからの経過時間を取得できます。
void Update(){}
LastUpdate
LastUpdateはUpdate後に毎フレーム呼び出されるメソッドです。
全てのオブジェクトのUpdate後に実行したい処理を記述します。
呼び出しタイミング以外はUpdateと同様の内容です。
void LastUpdate(){}
OnEnable
OnEnableはオブジェクトがアクティブになったタイミングで呼び出されるメソッドです。
有効無効を切り替える機能がある場合に使用します。
void OnEnable(){}
OnDisable
OnDisableはオブジェクトが非アクティブになったタイミングで呼び出されるメソッドです。
有効無効を切り替える機能がある場合に使用します。
void OnDisable(){}
OnDestroy
OnDestroyはオブジェクトが破棄されたタイミングで呼び出されるメソッドです。
一度でもアクティブになったことがある場合に呼び出されます。
void OnDestroy(){}
良く使用されるメソッドはこの辺りです。
MonoBehaiviourでこれらは定義した場合にのみ動作します。
不要な場合は省いても問題ありません。
外部パラメータの作り方
コンポーネントはInspector上でパラメータを調整できるようにすることができます。
例えばUIのImageコンポーネントではテクスチャーなどをパラメータとして設定できるようになっています。
こういったパラメータ化は自作のコンポーネントでも簡単に使用することができます。
パラメータの出し方
パラメータをInspector上に出すには2つの方法があります。
- publicで変数を定義する
- 変数にSerializeFieldを指定する
1つ目の方法はそのまま変数にpublicを指定するだけです。
public int Param1;
2つ目はSerializeFieldを指定する方法です。
[SerializeField] private int Param2;
このどちらの方法でも変数がInspector上に表示されます。
変数を外部に公開したくない場合はSerializeFieldを指定する方法を使います。
※恐らくこ ちらの方がよく使用します
Unityではこのようにパラメータを外部で設定できるようにしてゲームを組み立てていきます。
パラメータは誰でも変更できるので下記のような流れにしていくことが理想的だと思います。
- プログラマがコンポーネントで実装する
- デザイナーが画面のレイアウトなどを整える
- プランナーが流れを設定していく
プログラマーはコンポーネントの実装からデザインや流れの実装をサポートしていく形になります。
昨今のゲームエンジンではプログラマーがゲームの挙動を全て実装するという従来の流れが変わってきています。
今後も開発環境は変化していくと思いますので状況に応じた開発スタイルに対応できるように知識を蓄えていきましょう!