1. ホーム 
  2. 備忘録 
  3. Unity

MonoBehaviourについて

MonoBehaviourとは

Unity 内で使用するほとんどのオブジェクトは MonoBehaviour をベースにしたクラスを組み合わせて表現されている

MonoBehaviour を継承することでイベント関数の実行や、コンポーネントとしての付与、コルーチンやインスペクタから設定可能な変数など様々な機能が使用できる

しかし、逆にこれらが全く必要のないものに関しては MonoBehaviour を継承することでまったく無駄な機能を持ってしまうことになるため、注意が必要である

MonoBehaviour を継承したクラスはゲームオブジェクトにコンポーネントとしてアタッチするのが基本となり、new演算子を使ったインスタンス生成は使用できなくなる


イベント関数とは

MonoBehaviour には様々なイベント関数が用意されており、継承したクラス側で処理を記述することで、各イベントのタイミングで任意のプログラムを実行することができる

具体的には初回起動時の処理(Awake、Start)や、毎フレーム実行する処理(Update)、当たり判定検知時の処理(OnCollision~)などがある


各イベントのライフサイクルについては参考文献2を確認すること

処理順を気にせず実装していると、イベントが取得できなかったり次のフレームに実行されたりといった不具合の原因となる


コルーチンとは

MonoBehaviour を継承したクラスはコルーチンという機能を使って、数フレームに跨った処理を一つの関数内で記述することができる

最近はコルーチンよりもTask(UniTask)を使った実装のほうが多いと思われる

Taskはサブスレッドを用いた非同期処理も可能だが、コルーチンはあくまでメインスレッド上で継続的な処理の中断/再開ができる仕組みである


インスペクタ変数とは

インスペクタ変数の画像

クラス内で public変数 や [SerializeField]属性をつけた変数 を定義することで、インスペクタから変数の値を設定できるようになる

インスペクタはエディタ拡張を行うことでもっと自由に扱いやすく設定することができるようになるが、単純な値の設定だけであればこちらの方法で良い

値型の変数以外にも Serializable なクラスや、オブジェクト・リソースへの参照なども設定できる


    参考文献

  1. Unityドキュメント MonoBehaviour
  2. Unityドキュメント イベント関数の実行順序