今日のセミナーでチラっと話した「Unityでシーン再生中にオブジェクトを調整し、シーン終了時も調整内容を保持する方法」について書きます。
Unityでシーン再生中にオブジェクトを調整し、シーン再生終了時も調整内容を保持する pic.twitter.com/MAlYSR1jib
— 椿 (@tsubaki_t1) 2015, 10月 21
やり方
これ、やっていることは非常に単純で、シーン内のオブジェクト情報をPrefabとして上書き出力しているだけです。
まずは普通のシーンがあったとして、このシーン内の調整を行いたいオブジェクトをPrefabとして書きだします。
今回の場合はCameraを書き出します。
カメラの内容を更新し、あとは元々のPrefabをシーン内のオブジェクトで上書き更新します。
これでゲームを終了した後も変更が保持されます。
Prefabとして残したくない場合は、この手順の後メニューのGameObject>BerakPrefabInstanceでプレハブとインスタンスの接続を解除してから作成したプレハブを破棄します。
Prefabの機能は色々ありますが、本質は「シーン上にあるメタデータをファイルとして出力する」事です。
なので、オブジェクトを事前にPrefabとして配置しておき、実行時にPrefabを調整しアセットとして上書き保存してやれば、シーンの再生時にオブジェクトを編集しても編集結果を維持できる訳です。
これなら普通に「Prefabを直接操作すれば」と思う処もありますが、階層が深いオブジェクトの調整等は若干面倒くさいのと、画面を見ながら調整した方が楽っていう理由があります。
なお、例外として「プレハブのルートオブジェクトのTransform」は変更が反映されません。これは「PrefabのRootは常にユニークな値であることが想定されている」為だと思われます。