公共Mono模块
目的:过场景不移除,让没有继承MonoBehaviour的类也可以开启协程,可以Update更新,统一管理Update
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 声明周期函数
/// 事件
/// 委托
/// 协程
/// </summary>
public class MonoController : MonoBehaviour
{
private event UnityAction upadteEvent;
// Start is called before the first frame update
void Start()
{
DontDestroyOnLoad(this.gameObject);
}
// Update is called once per frame
void Update()
{
if (upadteEvent != null)
upadteEvent();
}
/// <summary>
/// 给外部提供 添加帧更新事件的函数
/// </summary>
/// <param name="fun"></param>
public void AddUpdateListener(UnityAction fun)
{
upadteEvent += fun;
}
/// <summary>
/// 给外部提供 移除帧更新事件的函数
/// </summary>
/// <param name="fun"></param>
public void RemoveUpdateListener(UnityAction fun)
{
upadteEvent -= fun;
}
}
测试update生命周期
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 可以提供给外部添加帧更新事件的方法
/// </summary>
public class MonoManager : BaseManager<MonoManager>
{
private MonoController controller;
public MonoManager()
{
GameObject obj = new GameObject("MonoController");
controller = obj.AddComponent<MonoController>();
}
/// <summary>
/// 给外部提供 添加帧更新事件的函数
/// </summary>
/// <param name="fun"></param>
public void AddUpdateListener(UnityAction fun)
{
controller.AddUpdateListener(fun);
}
/// <summary>
/// 给外部提供 移除帧更新事件的函数
/// </summary>
/// <param name="fun"></param>
public void RemoveUpdateListener(UnityAction fun)
{
controller.RemoveUpdateListener(fun);
}
public Coroutine StartCoroutine(IEnumerator routine)
{
return controller.StartCoroutine(routine);
}
public Coroutine StartCoroutine(string methodName, [DefaultValue("null")] object value)
{
return controller.StartCoroutine(methodName, value);
}
public Coroutine StartCoroutine(string methodName)
{
return controller.StartCoroutine(methodName);
}
public void StopCoroutine(Coroutine routine)
{
controller.StopCoroutine(routine);
}
public void StopCoroutine(string methodName)
{
controller.StopCoroutine(methodName);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test01
{
public void Update()
{
Debug.Log("Test01");
}
}
public class Test : MonoBehaviour
{
private void Start()
{
Test01 test = new Test01();
MonoManager.GetInstance().AddUpdateListener(test.Update);
}
}
测试协程
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test01
{
public void Update()
{
Debug.Log("Test01");
}
public Test01()
{
MonoManager.GetInstance().StartCoroutine(Test02());
}
IEnumerator Test02()
{
yield return new WaitForSeconds(1f);
Debug.Log("测试");
}
}
public class Test : MonoBehaviour
{
private void Start()
{
Test01 test = new Test01();
MonoManager.GetInstance().AddUpdateListener(test.Update);
}
}
统一进行Update的管理,更节约性能