Unityのスクリプト実行順【C#基礎】

前回は文字を出力して、オブジェクトを移動させるところまでいきました。今回はUnityでのスクリプトの実行順について解説したいと思います。

この記事は本のように順を追って解説しています。この記事は途中のページになります。
この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。

<Youtubeでも解説始めました>

この記事の内容をYoutubeでもまとめて見ました。文字だけではわかりにくい場合はこちらの方もぜひご覧ください。

ゲームの作り方!#6【Unity入門講座】 スクリプト実行順

<プログラムの流れ>

メソッドの中の処理の順番

プログラムの世界では処理の順番というものがあり、基本的に上から下へ流れていきます。
例えば↓のように書くと

script_number

↓このように表示されます

log order

上から順番に処理されていることがわかります。

ただ、この順番というのはメソッドの中だけの話なのでStartとUpdateを反対にしてもStartから処理されます

メソッドはどこかから呼び出されたら処理されます。Unity側がStartの方を先に呼び出しているわけです。そのためメソッドを書いた順序は処理順に関係ありません。

スクリプトが複数ある時のStartとUpdate

ところでスクリプトが2つあるとどうなるのでしょうか。ちょっとやってみましょう。

order script log

↑1個のゲームオブジェクトに新しくスクリプトを作って更にアタッチしてみました。
片方を0として、もう片方を1とします(適当です)
この状態で再生すると↓のようになります。

log start update

1のStart→0のStart→1のUpdate→0のUpdate→1のUpdate→・・・・
ってなっています。
Unityはファイル毎にStart→Updateと呼んでいるわけではなく、全部のスクリプトのStartを呼んで、その後全部のスクリプトのUpdateを呼んでいます。

ちなみに1と0が逆になっているように見えますが、どのスクリプトの関数から呼び出すかはランダムです。ランダムといっても常に変動するわけではなく端末ごとに変わります。自分のPCでは1→0でしたが、他の人のPCでやると0→1になる可能性があります。

このようにプログラムには処理をする順番があるということを覚えておいてください。

他のプログラムが動いている事を前提にプログラムを組んでしまうと、自分の環境では動くけど、他の人の環境では動かないといった自体になります。スクリプトの実行順に依存しないようなプログラムの設計をしましょう

でないとデバッグの際に痛い目を見てしまいます。

Point

・プログラムは関数の中では上から下に向かって処理していくよ!
・関数は何かから呼ばれる事で処理されるよ!
・Unityが定義した特別な関数は、Unity側が呼び出す順番を決めているよ!
・この特別な関数は同じ種類の場合どれが先に呼ばれるのかは端末によるよ!

<スクリプトの有効化・無効化>

MonoBehaviourを継承している場合、スクリプトには有効な状態と無効な状態があります。

有効な状態だとスクリプトがUnity側から呼ばれて、無効な状態だとUnity側から呼ばれません。

有効かどうかというのはインスペクターウィンドウでチェックがついているかどうかになります。

object active inactive

ゲームオブジェクト側の赤丸はゲームオブジェクト自体が有効かどうかです。

スクリプト側の赤丸はコンポーネントが有効かどうかです。スクリプトをゲームオブジェクトにアタッチするとコンポーネントになります。

チェックがついていると有効で、ついてないと無効です。この有効な状態をアクティブ、無効の状態を非アクティブと言います。

無効な状態にしているとその機能は動きません。

動きませんが、インスタンス化はされています。無効ではあるものの実体化はしているのでご注意ください。

ちなみに、チェックする場所がないコンポーネントもいます。これはそれ単体では動かず、何かから呼ばれないと動かないものです。有効か無効かではなく、呼ばれるか呼ばれないかですので、自分がプログラムで意図的に呼ばないと動かないものになります。

スクリプトが無効になっている場合はStartとUpdateは呼ばれません

ゲームオブジェクトが無効になっている場合、スクリプトが有効になっていても呼ばれません

console

ちなみに、無効になっている状態で再生ボタンを押し

unity play

途中から有効化すると、有効にした瞬間からStartが呼ばれます

再生状態でチェックボックスをクリックすれば再生中でも有効化無効化できます。

order script update

何回も有効化無効化を繰り返してもStartは1回しか呼ばれません

このことからStartで初期化の処理を書くことも多いです。

Point

・スクリプトかゲームオブジェクトが無効になっているとStartとUpdateは呼ばれないよ!

・無効状態になっていてもインスタンス化はされているよ!

・途中から有効にした場合は有効にした瞬間からスクリプトが動くよ!

・Startは1回しか呼ばれないよ!

<わからない事、質問等があれば>

このサイトの説明ではよくわからなかったとか、もっと知りたい事などがあれば

自分の Youtubeの動画にコメントで質問していただければ動画でお答えしようと思います。

文章同士のやり取りだと伝わりづらいし、ラリーに時間がかかりそうなので動画で回答します。

↓の動画が回答の一例になります。どの動画でもいいのでご遠慮なくコメントしてください

できたらチャンネル登録よろしくお願いします!



さて、まだまださわり部分しかしてませんが、こういったことを覚えておかないと後で痛い目にあったりするのでちゃんと解説していきたいと思います。



タイトルとURLをコピーしました