unity の Update 関数を管理する方法をメモしています。
方法は以下のとおりです。
1、インターフェースの用意
まずは Update 関数を管理するためのインターフェースを用意します。
今回は IUpdateManager という名前でつくります。
コード例
public interface IUpdateManager
{
void HandleUpdate();
}
2、Update() をもったクラスを用意し、コード例のように記述
実際に Update 関数を動かすクラスを用意し、中に List をつくります。
例では UpdateManager というクラス名にしています。
Update() 内の処理も忘れずに記述してください。
コード例
using System.Collections.Generic;
using UnityEngine;
public class UpdateManager : MonoBehaviour
{
public List<IUpdateManager> updateList = new List<IUpdateManager>();
public void Update()
{
foreach (var update in updateList)
{
update.HandleUpdate();
}
}
}
解説
updateList というリストに、 Add されたクラスがもつ HandleUpdate() を Update() 内で処理しています。
3、2のクラスを 空オブジェクトにアタッチする
unity のエディタ上で空のオブジェクト(例では UpdateManager)をつくり、UpdateManager をアタッチします。
例
4、Update するクラスを以下のように記述
Update 関数を管理したいクラスに、 1でつくったインターフェースを継承します。
※自動的に用意される Update() を HandleUpdate() に書きかえています。
コード例
using UnityEngine;
public class CharacterController : MonoBehaviour, IUpdateManager
{
[SerializeField] private UpdateManager _updateManager;
void Start()
{
_updateManager.updateList.Add(this);
}
public void HandleUpdate()
{
// 処理の内容
}
}
解説
UpdateManager クラスにある updateList に登録することで、Update され続けるようになります。unity のエディター上で UpdateManager をアタッチすることを忘れないようにしてください。
メリット
Update を管理するメリットは以下のとおり
- Update 関数を場面ごとに使い分けることができる。
- Update 関数をむやみに使わないことでパフォーマンスが改善する
→Update 関数は処理が重くなる原因になるため
以上。