UnityVR--EventManager--事件中心1

这篇具有很好参考价值的文章主要介绍了UnityVR--EventManager--事件中心1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

C#中的一些概念:

委托(Delegate)

事件(Event)

观察者模式

在项目中建立事件中心的必要


C#中的一些概念:

委托(Delegate)

  委托(Delegate)是一个数据类型(类),可以看作是一个方法的集合和管理器,用于对这些方法做一个流程化的管理。C#中的Delegate是强类型的,在声明委托时就已经指定了委托变量只能指向具有特定参数,以及返回值的方法。委托的声明如下:

Delegate void MyDelegate();

  委托的类型、参数需要与被委托管理的方法类型一致。

  委托可以无参也可以带参。如果带参,则在执行事件流程过程中,所有方法共用一个参数。定义了委托后,需要将被委托的方法集加入到委托中,方法就是委托的参数,如下:

MyDelegate myDelegate=new MyDelegate(Method1);
MyDelegate+=Method2;
MyDelegate+=Method3;

  也可以委托其他类中的方法,如下:

MyDelegate myDelegate=new MyDelegate(Func.Function1);
//或者写成MyDelegate myDelegate=Func.Function1;
myDelegate+=Func.Function2;
myDelegate+=Func.Function3;

  委托的执行就是按顺序执行被委托的所有对象。Invoke()是用于同步调用委托对象的显示调用方法,或者隐式调用。如下。调用时就会将委托的方法Method1、Method2、Method3按顺序执行一遍。

myDelegate.Invoke(); //显示调用
myDelegate( );       //隐式调用

事件(Event)

 事件(Event)是特殊的委托,为委托提供了封装。它一方面允许从类的外部增加或删除绑定的方法,另一方面又不 允许从类的外部来触发,只能在事件源内部触发。它为委托对象隐式地建立add_XXX、remove_XXX两个方法,用作注册注销事件的处理方法。而且事件对应的变量成员将会被视为private变量,外界无法超越事件所在对象直接访问它们,这使事件具备良好的封装性。

  如下,在类中定义事件和触发事件的条件:

public delegate void MyDelegate(string name);

public class Manager
{   
   public event MyDelegate MyEvent;  //定义事件
   public void Execute(string name)
   {//管理触发事件的条件
      if (MyEvent != null) 
          MyEvent(name);    
   }   
}

  在事件中添加绑定方法并触发执行事件:

    class MyEvent
    {   
        Manager manager= new Manager();            
        Manager.MyEvent += new MyDelegate(Method); //绑定事件处理方法
        Manager.Execute("唐小墨同学");  //触发事件
    
        public static void Method(string name)
        {   
           Alarm();// 写一些事件绑定的方法        
        }
     }

观察者模式

  属于行为型模式的一种,即建立一个或多个观察者去订阅或监听某一对象,当对象的行为触发事件时就会通知观察者,然后观察者执行相应的行为。详见设计模式(五)观察者模式_刘望舒的博客

  其实这种方式我们早就接触过,比如UI组件中的Button、检测碰撞的OnTriggerEnter等等。

  在机械臂场景中的机械臂示教模式 (记录角度自动旋转)中,用到了Unity的UI控件的Button、Slider等控件,都涉及到了事件监听的语句:

Button.onClick.Addlistener(recordAngle);

  给Button按钮添加一个观察者,一旦Button被按下,观察者就会被触发,从而回调recordAngle函数,去执行相应的工作。请注意,这句代码是写在Start中的,所以只要定义了一个事件的观察者,就不需要在Update()、FixedUpdate()中不断去刷新它,可以节约系统资源。

在项目中建立事件中心的必要

  以上的委托、事件、观察者模式,它们的作用其实是一致的,就是使代码的结构更加合理和高效。否则需要写一长串的“if……else……”判断或者繁琐的过程性代码。因此,每个项目中都需要建立一个管理事件、回调等方法的事件中心,一旦发生鼠标移动(或者VR手柄输入)、键盘输入,或者在工业场景中发生触发传感器等任何事件时,都可以统一在事件中心进行管理,提高代码的重用性,最重要的是可以节约系统的运行资源。

  下一篇将实现一个事件中心的搭建文章来源地址https://www.toymoban.com/news/detail-463537.html

到了这里,关于UnityVR--EventManager--事件中心1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity框架学习--5 事件中心管理器

    作用 :访问其它脚本时,不直接访问,而是通过发送一条“命令”,让监听了这条“命令”的脚本自动执行对应的逻辑。 原理: 1、让脚本向事件中心添加事件,监听对应的“命令”。 2、发送“命令”,事件中心就会通知监听了这条“命令”的脚本,让它们自动执行对应的

    2024年02月13日
    浏览(35)
  • 数据中心水浸事件,该如何找回安全?

    数据中心是现代企业和组织中不可或缺的基础设施,承载着大量的敏感数据和关键业务运作。然而,水浸事件可能成为数据中心的巨大威胁,可能导致设备故障、数据丢失以及业务中断,给组织带来严重的损失和风险。 因此,为了保护数据中心免受水浸的威胁,水浸监控技术

    2024年02月17日
    浏览(67)
  • 安全响应中心 — 垃圾邮件事件报告(6.5)

    2023年6月 第二周 样本概况 ✅ 类型1: 携带钓鱼链接的伪造传票邮(URLPhish) 近期,安全团队捕获到一类新的伪造51某票的钓鱼邮件,内容上为伪造的律师事务所传票信息,并诱导收件人点击钓鱼链接。代表样本如下: 结合情报分析,该域名下存在过恶意压缩文件,木马家族为

    2024年02月08日
    浏览(43)
  • 安全响应中心 — 垃圾邮件事件报告(5.16)

    2023年5月 第二周 一. 样本概况 ✅ 类型1:二维码钓鱼(QRPhish) 利用二维码进行的钓鱼、投毒,成为目前常见的邮件攻击手段之一,该类二维码主要存在于网络链接图片、邮件内容图片、附件图片中。 近日,安全团队捕获到一类基于员工福利、节日礼品的二维码钓鱼邮件。攻击

    2024年02月07日
    浏览(42)
  • 小程序监听左上角返回事件后处理一些逻辑

    有得时候小程序在点击左上角返回的时候是需要改变一些只或者属性的,但是有监听不到用户点击了返回按钮,除非是自定义一个返回按钮,哎,我找到了一个方法,不多说直接用代码演示 这是A页面的wxml代码 A页面的js代码 接下来就在B页面的onUnload函数里监听点击箭头事件

    2024年02月11日
    浏览(48)
  • 多监控系统产生的告警如何高效管理 - 运维事件中心

    随着互联网服务深入千行百业,数字化成为企业和机构为用户提供服务的重要形式。在企业的IT基础架构趋于复杂化的过程中,运维管理工作的技术性也有了更高的要求。如果针对相关的故障,企业无法做到及时的发现和响应,将会延长上层业务中断的事件,缺位的运维将会

    2024年01月16日
    浏览(50)
  • Linux - 借助 inotifywait,轻松实现 Linux 文件/目录事件监听

    常用选项包括: -m​:以持续监视模式运行,即持续监视文件并输出事件。 ​-r​:递归监视指定目录及其子目录中的文件。 ​-e event ​:指定要监视的特定事件类型。可以使用多个 -e​ 选项来指定多个事件类型。 ​-q​:静默模式,只输出事件信息。 ​-s seconds ​:设置

    2024年02月12日
    浏览(46)
  • 如何基于运维事件中心通过 logstash 进行日志关键字监控

    日常运维过程中,很多场景都需要对日志进行监测,以便第一时间发现应用/业务相关异常,这是一种比较常见的监控需求,所以也有很多方法可以实现告警。对于简单的告警可以通过一些传统的监控工具实现,但对于体量和业务是非常复杂的中大型企业来说,在

    2024年02月20日
    浏览(35)
  • Unity中,在按钮的处理事件中,显示UI(Panel)的一些问题

    问题来源(自己遇到的): (32条消息) Unity SetActive(True)滞后严重-游戏-CSDN问答 简单概括就是,点击按钮,开始处理某个事件,这个事件需要花费较长时间,我的想法是加入一个加载中界面,方便告知用户当前程序没有卡住。在完成事件后,提示加载完成。 首先,为按钮添加

    2024年02月03日
    浏览(63)
  • UnityVR--组件6--Animation动画

    目录 新建动画Animation Animation组件解释 应用举例1:制作动画片段 应用举例2:添加动画事件 Animator动画控制器 应用举例3:在Animator中设置动画片段间的跳转 本篇使用的API:Animation、Animator以及Animator类中的SetFloat、SetInteger、SetBool等,以及短小动画片段的制作 新建动画Animati

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包