この記事でのバージョン
Unity 2021.3.11f1
はじめに
UnityではExecuteAlways(ExecuteInEditMode)を使う事で
エディタが再生していない時でもAwakeやUpdate等のメソッドが実行出来ます。
ただし、Update等の更新処理はSceneに変化があった時(クリックしたとか)に実行されません。
[ExecuteInEditMode]//Awake等がUnityエディタを再生していなくても実行されるように public class Sample : MonoBehaviour { //================================================================================= //初期化 //================================================================================= private void Awake() { Debug.Log($"Awake"); } private void Start() { Debug.Log($"Start"); } //================================================================================= //更新 //================================================================================= private void Update() { Debug.Log($"Update"); } }
今回はそんな更新処理を何もせずとも実行させ続ける方法の紹介です!
Updateを実行し続ける方法
さっそく方法の紹介ですが、今回はOnRenderObjectという
Sceneがレンダリングした後に呼び出されメソッドを使います。
このOnRenderObjectでEditorApplication.QueuePlayerLoopUpdateという
更新処理を強制的に行うメソッドを実行する事でUpdateを実行し続ける感じです。
なお、Sceneの更新もしたい場合は同時にSceneView.RepaintAllを実行します。
具体的には以下のような感じに。
using UnityEditor;//EditorApplicationやSceneViewを使うのに必要
[ExecuteInEditMode]//Awake等がUnityエディタを再生していなくても実行されるように public class Sample : MonoBehaviour { //================================================================================= //初期化 //================================================================================= private void Awake() { Debug.Log($"Awake"); } private void Start() { Debug.Log($"Start"); } //================================================================================= //更新 //================================================================================= //Sceneがレンダリングした後に呼び出される private void OnRenderObject() { //Update等の更新処理を実行させる EditorApplication.QueuePlayerLoopUpdate(); //Sceneの描画更新 SceneView.RepaintAll(); } private void Update() { Debug.Log($"Update"); } }
参考