MonoController作为实际调用Mono中相关方法的脚本,提供一系列可以添加监听事件的方法
比如向Update中添加或移除事件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class MonoController : MonoBehaviour
{
private event UnityAction updateEvent;
void Update()
{
if (updateEvent != null)
{
updateEvent();
}
}
public void AddUpdateListener(UnityAction function)
{
updateEvent += function;
}
public void RemoveUpdateListener(UnityAction function)
{
updateEvent -= function;
}
}
MonoManager继承自一个单例模板,并且没有继承Mono,通过向MonoController中添加相关事件,来实现不继承mono但可以使用相关函数的功能。相当于是进一步的封装 ,提供了Update相关的接口 和 协程相关的接口。其它可以按照MonoBehaviour中的相关方法实现,写法一样
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Xml.Serialization;
using UnityEngine;
using UnityEngine.Events;
public class MonoManager : BaseManager<MonoManager>
{
private MonoController controller;
public MonoManager()
{
GameObject obj = new GameObject("MonoController");
controller = obj.AddComponent<MonoController>();
}
public void AddUpdateListener(UnityAction funciton)
{
controller.AddUpdateListener(funciton);
}
public void RemoveUpadteListener(UnityAction function)
{
controller.RemoveUpdateListener(function);
}
public Coroutine StartCoroutine(string methodName)
{
return controller.StartCoroutine(methodName);
}
public Coroutine StartCoroutine(string methodName, [DefaultValue("null")] object value)
{
return controller.StartCoroutine(methodName, value);
}
public Coroutine StartCoroutine(IEnumerator routine)
{
return controller.StartCoroutine(routine);
}
public void StopCoroutine(IEnumerator routine)
{
controller.StopCoroutine(routine);
}
public void StopCoroutine(Coroutine routine)
{
controller.StopCoroutine(routine);
}
public void StopCoroutine(string methodName)
{
controller.StopCoroutine(methodName);
}
public void StopAllCoroutines()
{
controller.StopAllCoroutines();
}
}