MonoBehaviour

公式サイト:

UnityEngine.MonoBehaviour | Unity スクリプトリファレンス [公式]

概要

参考:

Unity でよくみる MonoBehavior とは? – Qiita

イベント関数の実行順序

ドキュメント:

イベント関数の実行順序 | Unity マニュアル [公式]

参考:

イベントの実行順 – Qiita

コンポーネントのイベント実行順についての 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)

参考:

スクリプトの実行順番をコントロールする方法 – Qiita

DefaultExecutionOrder – コンポーネントの実行順をスクリプトから指定できる | コガネブログ

DefaultExecutionOrder でスクリプトの実行順番をスクリプトから書く | はなちるのマイノート

コンポーネントのイベント実行順についての Tips | テラシュールブログ

スクリプトの実行順序をスクリプトから指定する | PG日誌

スクリプトの実行順序を制御する | ねこじゃらシティ

Awake / Start 同士のイベントの実行順序を変更する | MR が楽しい

Script Execution Order | Unity マニュアル [公式]

Undocumented (but public) DefaultExecutionOrder attribute – Unity Forum

Awake / Start

  • Awakeスクリプトのインスタンスがロードされた時に呼び出される。
  • Start有効化された後、最初の Update の直前に呼び出される。
呼び出し順

1つのオブジェクト内での初期化に伴うイベント呼び出し順序は次の通りとなる。

  1. Awake
  2. OnEnable
  3. Start
  4. 初回の Update
  5. 以降、通常の Update などフレーム毎のループ処理

参考:

Unity の Awake と Start と OnEnable の違いを検証 | ゲームの作り方!

Awake と Start と OnEnable の呼ばれる順番 – Qiita

Awake / Start / OnEnable の順番 | ゆーじの技術ブログ

OnEnable / OnDisable

  • OnEnableオブジェクトが有効化される度に呼び出される。
  • OnDisableオブジェクトが無効化される度に呼び出される。

参考:

Unity の OnEnable / OnDisable / OnDestroy メソッドについて | かめくめ

OnEnable の挙動についてのメモ | Unity でインディゲームを作る!

OnEnable – 初期化に超便利な関数 | マカロン

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)

  1. OnDisable 呼び出し親から順に呼び出される。(親 → 子 → 孫)
  2. OnDestroy 呼び出し親子関係は解除されているので、親のみ呼び出される。(子より下は破壊されない。)

※子の OnDestroy 時には親は削除されているので、子の OnDestroy では親子関係は操作できない。

参考:

Destroy 処理中の OnDisable と OnDestroy の呼び出され方と、その最中に GameObject の親子関係を解除したときの挙動 – Qiita

継承 (virtual)

参考:

Unity の継承周りの苦痛をどうにかしたい – Qiita

OnValidate

参考:

Inspector から値を変更したときにコールバック処理を実行する簡単な方法 – Qiita

MonoBehaviour.OnValidate() と MonoBehaviour.Reset() でコンポーネントのプロパティの設定を楽にする | はなちるのマイノート

MonoBehaviour.OnValidate() | Unity スクリプトリファレンス [公式]

Default Execution Order が効かない

再生前に配置されていたゲームオブジェクトに関しては Default Execution Order によって実行順が決まるが、再生開始後に生成したゲームオブジェクトに関しては、生成した順にコールバックが呼ばれる。

参考:

Execution Order が効かないケース | テラシュールブログ

まとめ

Awake と Start と OnEnable の違いと順番を徹底解説! | Aki プログログ

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA