加载中...

unity---公共模块MonoController

公共模块

如果有很多类使用Update()函数,会导致性能浪费
如果函数统一在一个Update()中执行

代码

image
image

上述,需要将脚本挂载到物体上,
故新建了一个管理类MonoMgr
image
image

Mgr另外的作用

可以提供给外部添加协程的方法
image
image
image

代码汇总

MonoController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class MonoController : MonoBehaviour
{
    // Start is called before the first frame update
    private event UnityAction updateEvent;
    void Start()
    {
        DontDestroyOnLoad(this.gameObject);
    }

    // Update is called once per frame
    void Update()
    {
        if(updateEvent!=null){
            updateEvent();
        }
    }
    public void AddUpdateListener(UnityAction fun){
        updateEvent  += fun;
    }
    public void RemoveUpdateListener(UnityAction fun){
        updateEvent -= fun;
    }
}

MonoMgr

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class MonoMgr : Singleton<MonoMgr>
{
    // Start is called before the first frame update
    private MonoController controller;
    public MonoMgr()
    {
        GameObject obj = new GameObject("MonoController");
        controller = obj.AddComponent<MonoController>();
    }

    // Update is called once per frame
    public void AddUpdateListener(UnityAction fun){
        controller.AddUpdateListener(fun);
    }
    public void RemoveUpdateListener(UnityAction fun){
        controller.RemoveUpdateListener(fun);
    }
	   public void AddUpdateListener(UnityAction fun){
        controller.AddUpdateListener(fun);
    }
    public void RemoveUpdateListener(UnityAction fun){
        controller.RemoveUpdateListener(fun);
    }
    public Coroutine StartCoroutine(IEnumerator routine){
        return controller.StartCoroutine(routine);
    }
    public Coroutine StartCoroutine(string methodName){
        return controller.StartCoroutine(methodName);
    }
    public void StopCoroutine(IEnumerator routine){
        controller.StopCoroutine(routine);
    }

}

用法示范

  1. 新建一个继承至MonoBehaviour的类
    image
  2. 在新建一个需要执行的类
    image
  3. 将第一个类挂载到物体上,即可。
    image
posted @ 2022-04-19 21:15  lxp_blog  阅读(161)  评论(0)    收藏  举报