Unity基础小框架(四):公共mono模块

 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();
    }
}

猜你喜欢

转载自blog.csdn.net/XueZhiXia_/article/details/137057372