MonoBehaviour
公式サイト:
UnityEngine.MonoBehaviour | Unity スクリプトリファレンス [公式]
概要
参考:
Unity でよくみる MonoBehavior とは? – Qiita
イベント関数の実行順序
ドキュメント:
イベント関数の実行順序 | Unity マニュアル [公式]
参考:
コンポーネントのイベント実行順についての Tips | テラシュールブログ
実行順序 (Script Execution Order)
- 「編集 > プロジェクト設定」 (Edit > Project Settings) を開き、「スクリプト実行順序」 (Script Execution Order) に項目を追加する。
- 「Script Execution Order」はメタデータに保存される。メタファイル (.meta) を開いて直接値を書き換えることができる。
- または、クラスに
DefaultExecutionOrder
属性を付与する。
コード例
実行順を早める。
[DefaultExecutionOrder(-100)]
public class HighPriorityExample : MonoBehaviour
{
// code here
}
Code language: C# (cs)
実行順を後回しにする。
[DefaultExecutionOrder(100)]
public class LowPriorityExample : MonoBehaviour
{
// code here
}
Code language: C# (cs)
参考:
DefaultExecutionOrder – コンポーネントの実行順をスクリプトから指定できる | コガネブログ
DefaultExecutionOrder でスクリプトの実行順番をスクリプトから書く | はなちるのマイノート
コンポーネントのイベント実行順についての Tips | テラシュールブログ
Awake / Start 同士のイベントの実行順序を変更する | MR が楽しい
Script Execution Order | Unity マニュアル [公式]
Undocumented (but public) DefaultExecutionOrder attribute – Unity Forum
Awake / Start
- Awake:スクリプトのインスタンスがロードされた時に呼び出される。
- Start:有効化された後、最初の Update の直前に呼び出される。
呼び出し順
1つのオブジェクト内での初期化に伴うイベント呼び出し順序は次の通りとなる。
- Awake
- OnEnable
- Start
- 初回の Update
- 以降、通常の Update などフレーム毎のループ処理
参考:
Unity の Awake と Start と OnEnable の違いを検証 | ゲームの作り方!
Awake と Start と OnEnable の呼ばれる順番 – Qiita
Awake / Start / OnEnable の順番 | ゆーじの技術ブログ
OnEnable / OnDisable
- OnEnable:オブジェクトが有効化される度に呼び出される。
- OnDisable:オブジェクトが無効化される度に呼び出される。
参考:
Unity の OnEnable / OnDisable / OnDestroy メソッドについて | かめくめ
OnEnable の挙動についてのメモ | Unity でインディゲームを作る!
OnEnable / OnDisable って親が非アクティブになったときはどうなるの? | はなちるのマイノート
ScriptableObject のコールバックが呼ばれるタイミングについて | テラシュールブログ
Awake と Start と OnEnable の違いを検証 | ゲームの作り方!
MonoBehaviour.OnEnable() | Unity スクリプトリファレンス [公式]
MonoBehaviour.OnDisable() | Unity スクリプトリファレンス [公式]
OnDestroy
- OnDestroy:オブジェクトが破壊される際に呼び出される。一般的には、シーンを閉じる、あるいは、ゲームが終了する際に発生する。
参考:
オブジェクトが消えた瞬間を察知してイベントを受け取る | あのゲームの作り方@わたぶろぐ
オブジェクトの破壊時にイベント継承クラス。 iTween 対応も | yasuaki のめげないゲーム開発
MonoBehaviour.OnDestroy() | Unity Scripting API [Official]
OnDisable() getting called from Destroy() – Unity Answers
GameObject is destroyed by which script – Stack Overflow
Destroy 処理
親子関係における OnDestroy の順序
- コードから破壊した場合:親から破壊される。(親 → 子 → 孫)
- ヒエラルキーから削除した場合:孫から破壊される。(孫 → 子 → 親)
※一連の OnDisable が呼び出された後、OnDestroy が処理される。
OnDestroy における親子関係の解除
親の OnDestroy で親子関係を解除する。(DetachChildren)
- OnDisable 呼び出し:親から順に呼び出される。(親 → 子 → 孫)
- OnDestroy 呼び出し:親子関係は解除されているので、親のみ呼び出される。(子より下は破壊されない。)
※子の OnDestroy 時には親は削除されているので、子の OnDestroy では親子関係は操作できない。
参考:
Destroy 処理中の OnDisable と OnDestroy の呼び出され方と、その最中に GameObject の親子関係を解除したときの挙動 – Qiita
継承 (virtual)
参考:
Unity の継承周りの苦痛をどうにかしたい – Qiita
OnValidate
ドキュメント:
MonoBehaviour.OnValidate | Unity スクリプトリファレンス [公式]
参考:
Inspector から値を変更したときにコールバック処理を実行する簡単な方法 – Qiita
MonoBehaviour.OnValidate() と MonoBehaviour.Reset でコンポーネントのプロパティの設定を楽にする | はなちるのマイノート
UnityEvent
ドキュメント:
Events.UnityEvent | Unity スクリプトリファレンス [公式]
Default Execution Order が効かない
再生前に配置されていたゲームオブジェクトに関しては Default Execution Order によって実行順が決まるが、再生開始後に生成したゲームオブジェクトに関しては、生成した順にコールバックが呼ばれる。
参考:
Execution Order が効かないケース | テラシュールブログ
まとめ
Awake と Start と OnEnable の違いと順番を徹底解説! | Aki プログログ
チュートリアル
Call a Function from Script Using Button On Click Event (DA LAB)