Unity 框架学习笔记 --(4)公共Mono模块

公共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的管理,更节约性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值