はらけんログ

unity触ったりバイクに乗ったり

【Unity】StartとかUpdateについて

unityに慣れてしまっていたので記憶から消えていた疑問なんですが

「UnityってなんでStart()とかUpdate()とかだけ勝手に実行されんの?」

「UnityのStratとかUpdateって、どのスクリプトのUpdate(Start)がどの順番で実行されてんの?」

うーん...わからん

Unityが作りやすいように魔法の呪文を用意してくれていて、実行順が重要な作り方でない限り、毎フレーム必要な処理はUpdateに、起動時に必要な処理はStartに書いておけばおk!

と、いう感じで使っている人多いですよね。でも、モヤモヤが無くならない人も多いハズ。

ってことで、調べたらモヤモヤの正体がわかるとてもわかり易い記事がありました。

blogs.unity3d.com

unity-michi.com

 

要は「MonoBehaviourが設定した魔法の呪文メソッドが、各魔法の呪文リストにランダムな順番でaddされて、決まった順番で魔法の呪文リストが実行される」からモヤモヤするみたいっすね。(日本語ムズイ

docs.unity3d.com

 

って、ことで上記記事からも分かる通り、むやみにスクリプトを増やしまくってUpadeなりを実行させるとかなり負荷がかかるみたい。

 

個人的には、毎フレーム実行したい関数はUpdateAction()みたいな名前にして、それらクラスを参照したSceneManagerクラスのUpdate()でUpdateAction()をすべて呼び出したら実行順も決めやすいし、わかりやすいし、良いような気がする。

 

public class SceneManager : MonoBehaviour {

 

     DataManager dataManager; 

     TimerManager timerManager;   

     DebugManager debugManager;

 

      void Awake()    { 

          dataManager.Awake_Action(); 

          timerManager.Awake_Action(); 

          debugManager.Awake_Action(); 

    } 

    void Start () {     

          dataManager.Start_Action();       

          timerManager.Start_Action();

          debugManager.Start_Action();

    }

    void Update () {

          dataManager.Update_Action();       

          timerManager.Update_Action();

          debugManager.Update_Action();

    }

}