Disable/Enable時のCoroutineを制御する
Disable/Enable時のUniTaskを制御する
Coroutine/UniTaskでのDisable/Enable時の挙動を見てきました。
ではAwaitableではどうでしょうか?
AwaitableはUnity2023 から実装された機能です。
Unity Documentation
試してみたところ、Coroutine同様、Disableしても動き続けてしまうようです。
なのでCoroutine同様、Disable時は次の処理を待つようにしてみました。
using UnityEngine;
namespace Elix
{
public class AwaitableCheck : MonoBehaviour
{
[SerializeField] TMPro.TextMeshProUGUI m_text = null;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
//Debug.Log("Start");
Awaitable awaitable = DoTaskAsync();
}
// Update is called once per frame
void Update()
{
//Debug.Log("Update");
}
async Awaitable DoTaskAsync()
{
int count = 0;
while (true)
{
m_text.text = $"{count}";
count++;
await Awaitable.WaitForSecondsAsync(1f);
while(!gameObject.activeInHierarchy)
{
await Awaitable.NextFrameAsync();
}
//Debug.Log("DoTaskAsync");
}
}
}
}
Coroutineよりは挙動が素直で扱いやすそうです。