众所周知,继承了Monobehavior之后,我们就可以使用Unity给我们提供的一些生命周期函数。那假设类没有继承Monobehavior,但是我们又希望使用到Mono的东西,比如帧更新方法Update、协程等,这该怎么做呢?
使用 MonoMgr 解决这个问题。
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class MonoMgr: MonoSingletonBase<MonoMgr>
{
private event UnityAction event_updateFun;
private void Update()
{
if(event_updateFun != null)
{
event_updateFun();
}
}
public void AddUpdateFunListener(UnityAction fun_update)
{
event_updateFun += fun_update;
}
public void RemoveUpdateFunListener(UnityAction fun_update)
{
event_updateFun -= fun_update;
}
}
- 测试代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestMono
{
public TestMono()
{
MonoMgr.GetInstance().AddUpdateFunListener(this.Update);
}
IEnumerator Test123()
{
Debug.Log("协同程序 开始执行");
yield return new WaitForSeconds(3);
Debug.Log("协同程序 等待了3秒");
}
private void Update()
{
Debug.Log("更新测试");
}
}
public class MonoMgrTest : MonoBehaviour
{
void Start()
{
TestMono t = new TestMono();
MonoMgr.GetInstance().StartCoroutine(Test123());
}
}