unity

【unity】Update 関数を管理する方法

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 関数は処理が重くなる原因になるため

以上。