0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity - 知っておいてよかった!~Update関数を順番に実行する方法~

Last updated at Posted at 2025-03-29

ゲーム開発で必ず起こること

ある日、プログラムを書いているとこんなことが起こりました。

「よっしゃ。オブジェクトについてくるスクリプトが書けたぞ!」
で、実行します。
「我ㄉㄊ阿!バグってるぅ~」
オブジェクトは、完全にオブジェクトにぴったりついている訳ではなく、ちょっとずれていることがありました。

こんなプログラムの苦悩、そしてバグは、皆さん一度は経験したことありますよ ((圧
今回のバグでは、スクリプトのUpdate関数が本来プログラマーの想定している順序と違った順序で実行されていて、バグが発生しているというものです。
これを解決する方法はあるのでしょうか?

今回は、Update関数を、指定した順番通りに実行する方法を解説します。


本題~Update関数を指定した順番通りに実行する~

まず、Project Settingsを開きます。
開き方は、Edit > Project Settingsです。
スクリーンショット (1).png
そして、Project Settings内のScript Execution Orderを開きます。
スクリーンショット 2025-03-29 114201.png
このScript Execution Orderの中には、画面をリアルにする処理や、UIを更新する処理があらかじめ設定されています。
ここから、順番に実行したいスクリプトを追加していきます。
処理のリストの下にあるボタン+ ▼をクリックして、順番に実行したいスクリプトを、できれば想定している順番に入れていきます。
スクリーンショット 2025-03-29 115802.png
私の場合は、SplineSystem.cs>RearWheel.cs>TrainTransform.csの順番に実行したいので、このような組み合わせにしています。
設定できたら、忘れずにApplyを押しましょう


数字の意味は?

そういえば、先ほどの画像で、100200のように数字が指定されていましたよね。
これって何なのでしょうか?
公式からの説明を参考にしてみます。

こんなことが書かれていました。

割り当てられた番号は、相対的な順序を表しています。Unity はリストを上から下の順に (大きな負の順序番号のスクリプトから大きな正の順序番号のスクリプトに向かって) 実行します。

つまり、数字が小さく設定されてる処理から大きくなっている処理の順に、処理を実行していることになります。
ただ、こんなことも書かれていました。

順序番号は任意であり、物理的な量を表すものではありません。

ということは、実行したい順に番号指定した場合、0>100でも、1>2でも処理の実行手順は変わらないことになります。

リスト内の処理をドラックして順序を変更することもできます。


まとめ

今回は、スクリプトのUpdate関数を指定した順番通りに実行する方法を解説しました。
Script Execution Orderから、実行したい順番にスクリプトを入れてあげると実行できます。
また、この記事に関するヒントを与えてくださったMeredothさんに感謝いたします。


参考サイト①:Can Unity Scripts run the Update mesos in order? - Unity Engine - Unity Discussions
参考サイト②:Script Execution Order - Unityマニュアル
メゾットの英訳はMesosではなくMethodです。タイトルは誤字がありますのでご注意ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?