イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Unity Start()の挙動とDontDestroyなオブジェクトのシーンごとの初期化

++Start()はDontDestroyOnLoadしていてもシーン移動時に毎回実行されるが、シーンのロード前に実行されてしまっているっぽい。なので、Start()でシーンによって処理を分岐すると正常に機能しない。

 

なので、シーン移動のコールバックに処理を書くべき

http://nn-hokuson.hatenablog.com/entry/2017/05/29/204702

 

OnSceneLoaded直後にそのシーンのオブジェクトをGameObject.Findしようとすると、発見できない場合がある。Invoke等で遅延させれば取得出来る

    void OnSceneLoaded(Scene scene, LoadSceneMode mode){
      if(scene.name=="VsPlayerBattle") Invoke("DelayGet",2);
    }
    //なぜかOnSceneLoaded直後に実行するとGameStartReadyを発見できない
    void DelayGet(){
      var obj = GameObject.Find("GameStartReady");
      if(obj==null){
        Invoke("DelayGet",2);
      }else{
        GSR = obj.GetComponent();
      }
    }