当前位置: 首页 > news >正文

程序框架-公共MONO模块

作用:让没有继承MONO的类可以开启协程,可以update更新,可以统一管理update

  • MonoController脚本继承MonoBehaviour使得脚本过场不移除,并通过UnityAction可以添加多个函数(多播委托),实现Update更新以及统一管理。
/// <summary>
/// Mono的管理者
/// 1.声明周期函数
/// 2.事件 
/// 3.协程
/// </summary>
public class MonoController : MonoBehaviour {private event UnityAction updateEvent;// Use this for initializationvoid Start () {DontDestroyOnLoad(this.gameObject);}// Update is called once per framevoid Update () {if (updateEvent != null)updateEvent();}/// <summary>/// 给外部提供的 添加帧更新事件的函数/// </summary>/// <param name="fun"></param>public void AddUpdateListener(UnityAction fun){updateEvent += fun;}/// <summary>/// 提供给外部 用于移除帧更新事件函数/// </summary>/// <param name="fun"></param>public void RemoveUpdateListener(UnityAction fun){updateEvent -= fun;}
}
  • MonoMgr通过单例模式给外部提供添加帧更新事件、添加协程的管理。

/// <summary>
/// 1.可以提供给外部添加帧更新事件的方法
/// 2.可以提供给外部添加 协程的方法
/// </summary>
public class MonoMgr : Singleton<MonoMgr>
{private MonoController controller;public MonoMgr(){//保证了MonoController对象的唯一性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 class myTest
{public myTest(){MonoMgr.GetInstance().StartCoroutine(Start());}public void Update(){Debug.Log("更新了!");}IEnumerator Start(){yield return new WaitForSeconds(1f);Debug.Log("协程执行了!");}}
public class MonoTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){myTest test = new myTest();MonoMgr.GetInstance().AddUpdateListener(test.Update);}
}
http://www.lryc.cn/news/109509.html

相关文章:

  • 采用鲁棒随机森林实现的流异常检测:Python应用的一种新型机器学习方法
  • 缓存友好在实际编程中的重要性
  • uni-ajax网络请求库使用
  • MYSQL进阶-事务
  • python 常见数据类型和方法
  • a-date-picker报错TypeError: date4.locale is not a function
  • LNMP安装
  • matplotlib绘图风格
  • 【初级教程】Appium 启动应用 log 日志分析
  • FANUC机器人SRVO-300机械手断裂故障报警原因分析及处理办法
  • MobPush iOS SDK iOS实时活动
  • c++开发模式,组合模式
  • 【GITHUB】FlipIt – Windows的开源翻页时钟
  • 基于 Flink Paimon 实现 Streaming Warehouse 数据一致性管理
  • 云游戏App简记
  • ChatGPT已打破图灵测试,新的测试方法在路上
  • Flask学习笔记_异步CMS(五)
  • 争夺年度智能汽车「中间件」方案提供商TOP10,谁率先入围
  • 【Spring Cloud一】微服务基本知识
  • swift - 如何在数组大小更改后刷新 ForEach 显示元素的数量(SwiftUI、Xcode 11 Beta 5)
  • 编程导航算法村第七关 |二叉树的遍历
  • 【docker】docker-compose安装带ui页面的kafka集群
  • java实现多级菜单
  • HTML中元素和标签有什么区别?
  • android 如何分析应用的内存(十三)——perfetto
  • Chapter20 音乐
  • 详解Nodejs中的模块化
  • debug思路 - maven构建报错
  • DSP学习笔记
  • Java中的Apache Commons Math是什么?