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

自己做网站能赚钱乐清网站建设乐清

自己做网站能赚钱,乐清网站建设乐清,重庆网站搭建方案,刘涛做的儿童购物网站作用:访问其它脚本时,不直接访问,而是通过发送一条“命令”,让监听了这条“命令”的脚本自动执行对应的逻辑。 原理: 1、让脚本向事件中心添加事件,监听对应的“命令”。 2、发送“命令”,事件…

作用:访问其它脚本时,不直接访问,而是通过发送一条“命令”,让监听了这条“命令”的脚本自动执行对应的逻辑。

原理:
1、让脚本向事件中心添加事件,监听对应的“命令”。
2、发送“命令”,事件中心就会通知监听了这条“命令”的脚本,让它们自动执行对应的逻辑。

 

事件中心管理器:添加事件、发送命令

员工类   将方法注册进事件中心管理器

public class Cube : MonoBehaviour
{private void Awake(){EventCenterManager.Instance.AddListener("开工", Write);}public void Write(){transform.position += Vector3.right;Debug.Log("我是策划,我在写策划案");}
}

事件管理中心类

public class EventCenterManager : SingletonPatternBase<EventCenterManager>
{//键表示命令的名字//值表示命令具体要执行的逻辑Dictionary<string, UnityAction> eventsDictionary = new Dictionary<string, UnityAction>();public void AddListener(string key,UnityAction call){if (eventsDictionary.ContainsKey(key)){eventsDictionary[key] += call;}elseeventsDictionary.Add(key, call);}/// <summary>/// 取消监听的命令/// </summary>public void RemoveListener(string key,UnityAction call){if (eventsDictionary.ContainsKey(key)){eventsDictionary[key] -= call;}}//发送命令public void DisPatch(string key){if (eventsDictionary.ContainsKey(key)){eventsDictionary[key]?.Invoke();}}

想要调用方法就直接DIsPatch  命令名  调用

Stopwatch类测试性能

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.Events;/// <summary>
/// Stopwatch类的工具类,用于计算运行一段代码所用的时间
/// </summary>
public class StopwatchUtility
{/// <summary>/// 获取执行一段代码所需要的时间/// </summary>/// <param name="call"></param>/// <returns></returns>public static TimeSpan GetTime(UnityAction call){//声明一个计数器Stopwatch timer = Stopwatch.StartNew();//开启计时器timer.Start();//要测试什么代码就将代码放在这里call?.Invoke();//停止计时器timer.Stop();//返回时间信息return timer.Elapsed;}public void PrintTime(UnityAction call){UnityEngine.Debug.Log(GetTime(call));}
}

里氏替换原则的用法

自己写两个类来包裹两个不同的UnityAction,然后让他们继承自同一接口,就可以实现里氏替换原则

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;public class EventCenterManager : SingletonPatternBase<EventCenterManager>
{//键表示命令的名字//值表示命令具体要执行的逻辑Dictionary<string, IEventInfo> eventsDictionary = new Dictionary<string, IEventInfo>();public void AddListener(object command,UnityAction call){string key = command.GetType().Name + "_" + command.ToString();if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo).action += call;}elseeventsDictionary.Add(key,new EventInfo(call));}//传递带参数的委托public void AddListener<T>(object command,UnityAction<T> call){string key = command.GetType().Name + "_" + command.ToString() + "_" + typeof(T).Name;if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo<T>).action += call;}elseeventsDictionary.Add(key, new EventInfo<T>(call));}/// <summary>/// 取消监听的命令/// </summary>public void RemoveListener(object command,UnityAction call){string key = command.GetType().Name + "_" + command.ToString();if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo).action -= call;}}//取消带有参数的监听事件public void RemoveListener<T>(object command,UnityAction<T> call){string key = command.GetType().Name + "_" + command.ToString() + "_" + typeof(T).Name;if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo<T>).action -= call;}}//移除一条命令所对应的全部委托public void RemoveListeners(object command){string key = command.GetType().Name + "_" + command.ToString();if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo).action = null;}}//带有参数的移除一条命令中所有委托public void RemoveListeners<T>(object command){string key = command.GetType().Name + "_" + command.ToString() + "_" + typeof(T).Name;if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo<T>).action = null;}}//发送命令public void DisPatch(object command){string key = command.GetType().Name + "_" + command.ToString();if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo).action?.Invoke();}}//给带参数的事件写的重载public void DisPatch<T>(object command,T parameter){string key = command.GetType().Name + "_" + command.ToString() + "_" + typeof(T).Name;if (eventsDictionary.ContainsKey(key)){(eventsDictionary[key] as EventInfo<T>).action?.Invoke(parameter);}}/// <summary>/// 移除所有带或者不带参数的监听事件,切换场景可以考虑使用/// </summary>public void RemoveAllListeners(){eventsDictionary.Clear();}private interface IEventInfo { }  //仅用于里氏替换原则private class EventInfo:IEventInfo{public UnityAction action;public EventInfo(UnityAction call){action += call;}}private class EventInfo<T> :IEventInfo{public UnityAction<T> action;public EventInfo(UnityAction<T> call){action += call;}}}

传递多个参数的委托事件:

  • 可以写一个信息类来存储多个信息,然后事件中传递这个信息类。这样就还是一个参数
  • 或者额外写含有两个参数的方法,写含有三个的,四个的(可行,但是费劲)
  • 元组(但是我不知道这个是什么)

http://www.yayakq.cn/news/147850/

相关文章:

  • 阿里云怎么做静态网站国外虚拟主机wordpress
  • 昆山网站建设ikelv网站制作公司 深圳
  • 凡科建站自助建站平台龙岩seo培训
  • 完整的网站开发流程采集文章留在网站
  • 怎样做自己的网站钻钱设计师必备的软件
  • 网站目录权限设置设计公司网站设计报价明细表
  • 怎么做域名网站wordpress 论坛主题
  • 如何自己买域做网站wordpress 登录流程
  • 网站将要准备建设的内容搭建购物商城
  • 做淘宝客网站哪个好中国万网是干什么的
  • 大鹏网络网站建设在哪里可以免费观看最新电影
  • 电子创意设计网站丝印网版制作
  • 西安做网站缑阳建低代码平台设计
  • 专业商城网站建设报价单网站优化关键词公司
  • 网站界面优化大连做网站的网络公司
  • 传奇新开服网站国外外贸网站
  • 高端的丹阳网站建设贵阳app开发定制
  • 网站建设中手机版wordpress更改主题的响应
  • 制作网站方法上海电子商务网站开发
  • 建设企业网站需要什么百度蜘蛛如何找网站
  • 网站开发项目立项报告范文星子网站建设
  • 警惕网站免费看手机大连seo排名
  • 网页设计网站链接怎么做360推广登录平台
  • 怎么做能够让网站流量大好玩的网页游戏排行
  • 莆田建设局网站规划局网站建设工作总结
  • 自己做彩票网站犯法吗求推荐个网址
  • 网站怎样维护wordpress修改侧边栏
  • 网站前端切图做多个页面网站建设管理案例实训报告
  • 外贸网站怎么做优化电子商务网站建设与维护中职教材
  • 西安网站建站品牌网店推广方式怎么写