unity 3d 使用C#的事件/委托机制

好未来U3D开发岗笔试复盘:C#/Unity/性能优化考点全解析 在游戏与互动应用开发中,Unity作为主流引擎,其性能优化与C#语言基础直接决定项目质量。理解值类型与引用类型的区别、LINQ延迟执行等机制,能够避免数据意外修改和GC分配问题;掌握UGUI的Canvas重建原理、对象池复用和AssetBundle资源管理,则能显著提升交互场景的流畅度。这些技术广泛应用于在线教育3D课件、虚拟实验室等实时渲染场景,对开发者笔试和工程实践均至关重要。本文复盘好未来U3D开发岗笔试,从C#核心语法到Unity引擎机制,再到综合设计题,系统梳理考点与解题思路,为准备同类岗位的开发 阅读详情

转自:http://blog.youkuaiyun.com/hiramtan/article/details/8955472


事件分发:

using UnityEngine;  
public class EventDispatcher : MonoBehaviour {  
  public delegate void EventHandler(GameObject e);  
  public event EventHandler MouseOver;  
  void OnMouseOver () {  
    if (MouseOver != null)  
        MouseOver (this.gameObject);  
  }  
}  

事件监听:

private GameObject s;  
[...]  
s.GetComponent<EventDispatcher>().MouseOver += Listener;  
[...]  
void Listener(GameObject g) {  
   // g is being hovered, do something...  
}  

结束监听某个事件:

s.GetComponent<EventDispatcher>().MouseOver -= Listener;  

一个通用的EventDispatcher类,实现所有GameObject能够分发的事件。

using UnityEngine;  
using System.Collections;  
  
/**  
 *  A simple event dispatcher - allows to listen to events in one GameObject from another GameObject 
 * 
 *  Author: Bartek Drozdz (bartek [at] everyday3d [dot] com) 
 * 
 *  Usage: 
 *  Add this script to the object that is supposed to dispatch events.  
 *  In another objects follow this pattern to register as listener at intercept events: 
  
    void Start () { 
        EventDispatcher ev = GameObject.Find("someObject").GetComponent<EventDispatcher>(); 
        ev.MouseDown += ListeningFunction; // Register the listener (and experience the beauty of overloaded operators!) 
    } 
 
    void ListeningFunction (GameObject e) { 
        e.transform.Rotate(20, 0, 0); // 'e' is the game object that dispatched the event 
        e.GetComponent<EventDispatcher>().MouseDown -= ListeningFunction; // Remove the listener 
    } 
     
 *  This class does not implement all standards events, nor does it allow dispatching custom events,  
 *  but you shold have no problem adding all the other methods. 
 */  
public class EventDispatcher : MonoBehaviour  
{  
  
    public delegate void EventHandler (GameObject e);  
    public delegate void CollisionHandler (GameObject e, Collision c);  
  
    public event EventHandler MouseOver;  
    void OnMouseOver ()  
    {  
        if (MouseOver != null)  
            MouseOver (this.gameObject);  
    }  
  
    public event EventHandler MouseDown;  
    void OnMouseDown ()  
    {  
        if (MouseDown != null)  
            MouseDown (this.gameObject);  
    }  
  
    public event EventHandler MouseEnter;  
    void OnMouseEnter ()  
    {  
        if (MouseEnter != null)  
            MouseEnter (this.gameObject);  
    }  
  
  
    public event EventHandler MouseExit;  
    void OnMouseExit ()  
    {  
        if (MouseExit != null)  
            MouseExit (this.gameObject);  
    }  
  
    public event EventHandler BecameVisible;  
    void OnBecameVisible ()  
    {  
        if (BecameVisible != null)  
            BecameVisible (this.gameObject);  
    }  
  
    public event EventHandler BecameInvisible;  
    void OnBecameInvisible ()  
    {  
        if (BecameInvisible != null)  
            BecameInvisible (this.gameObject);  
    }  
  
    public event CollisionHandler CollisionEnter;  
    void OnCollisionEnter (Collision c)  
    {  
        if (CollisionEnter != null)  
            CollisionEnter (this.gameObject, c);  
    }  
  
    public event CollisionHandler CollisionExit;  
    void OnCollisionExit (Collision c)  
    {  
        if (CollisionExit != null)  
            CollisionExit (this.gameObject, c);  
    }  
      
}  
Unity3D技巧在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 作者:王选易,出处:http://www.cnblogs.com/neverdie/欢迎转载,也请保留这段声明。如果你喜欢这篇文章,请点【推荐】。谢谢! 本文的参考博客:https://blog.youkuaiyun.com/wkkingsam/article/details/52403126 引子 在前面两篇文章: 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy ... 阅读详情

相关推荐

【零基础入门unity游戏开发——unity通用篇32】unity委托(UnityAction)和事件(UnityEvent)(基于unity6开发介绍)

unity委托(UnityAction)和事件(UnityEvent)(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1968

Unity C# 游戏开发 事件 消息派发器(图文详细,带源码)

Unity C# 游戏开发 事件 消息派发器 详细事情是这样的一、消息派发器的几个功能1.添加事件注册2.事件的触发3.移除事件二、完整代码三、使用案例1.没有参数的调用2.有参数的调用总结版权声明 事情是这样的 可可爱爱的程序媛小姐姐又来找我玩啦,本来是开心的聊天却变成了技术研讨会,小姐姐说最近敲代码,各种事件委托,各种观察者模式,手都敲麻了,问我有好办法没有 那我可以帮你揉一下?(显然不符合我钢铁直男的人设),那就写个消息派发器来帮助小姐姐吧! 一、消息派发器的几个功能 既然是要来简化观察者模式

水光涵月的博客 2468

事件分发机制--unity碰撞器的使用

对于事件分发机制的使用,当碰到物体时,会集中调用事件

Unity 中不同方式的事件分发和监听

Unity 中的事件分发和监听

weixin_42565127的博客 931

unity委托事件机制

事件机制,彻底了解C# delegate,将delegate使用到项目中。

Event-SendMessage:Unity事件分发机制,实现事件分发中心

Event-SendMessage Unity事件分发机制,实现事件分发中心 Unity5.0.1f1

Unity 事件派发

方法 功能 备注 Watcher.on 注册监听 注册一个事件监听j Watcher.off 移除监听 移除一个事件监听 Watcher.Dispatch 派发事件 广播事件 前言: 由事件类和监听接口组成 自定义一个事件前,必须提供一个事件的监听方法以及一个事件标签。 好处: 各个模块专心的做自己的事情,不需要过问其他模块的事情 解耦 代码部分~ using System; using System.Col...

曾用名:极客柒 708

Android11,无障碍服务模拟多手势使用dispatchGesture时总是onCancelled

AccessibilityService的dispatchGesture去模拟多手势,总是onCancelled的一种解决办法

m0_49953943的博客 2102

Unity&C#的委托事件总结

吐血整理。。基本涵盖了常见的各种委托,下面放了代码可供参考 基础知识: 发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。即下文中的Mom(发布方) 订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托

sols的博客 3303

《商用密码应用与安全性评估》第四章密码应用安全性评估实施要点4.1密码应用方案设计

密码应用方案设计

qq_40442137的博客 1471

将Python爬取的数据导入钉钉多维表

摘要:本文介绍将Python爬取的数据导入钉钉多维表的完整解决方案。首先通过requests库爬取数据并解析为结构化格式,然后使用钉钉开放平台API对接多维表。关键步骤包括获取app_key、app_secret等凭证,通过OAuth2获取access_token,以及批量写入记录。文章详细说明了参数获取位置、字段类型匹配、权限配置等注意事项,并提供了错误处理建议和性能优化方法。适用于需要将网络数据同步到钉钉多维表的开发场景。

IT深耕十余载,大道之简 2131

Unity中使用委托/事件实现GameObject之间的通信

Unity中使用委托/事件实现GameObject之间的通信

cuit_xuchen的博客 4975

实战游戏项目管理1-规划篇

1、前言 做研发管理10多年,进游戏行业8年,经验下来项目管理就是一门技术,结合不同行业不同项目加以不同管理方法,但原理基本一样,这里总结下游戏项目的管理一些实操方法 一般游戏确定立项前都需要做,项目预研产出一个游戏Demo,通过公司的立项评审,这个过程的项目管理相对简单一般由制作人或其他项目经理兼任,只有控制好总体时间与成本就好,这里按立项后开始讲。 2、游戏项目规划 ...

pengdali的专栏 2万+

Unity 3D游戏开发实战:从C#脚本到物理碰撞与项目构建全流程

在游戏开发领域,C#作为Unity引擎的核心脚本语言,其面向对象特性与事件驱动模型是构建交互逻辑的基础。理解其原理,关键在于掌握如何通过类、方法、委托等概念,将代码逻辑转化为驱动游戏对象行为的组件。这一技术的核心价值在于实现高效、可维护的游戏系统,尤其在处理物理交互、角色控制和状态管理时至关重要。其典型应用场景包括3D动作游戏的角色移动、物理碰撞检测以及多脚本间的通信协调。本文聚焦于Unity游戏开发中的物理碰撞处理与脚本通信,通过实战案例,系统讲解如何利用C#脚本生命周期和事件系统,构建清晰的游戏项目结构

weixin_34034670的博客 479

ic后端学习笔记-floorplan

floorplan是布图规划,规划包括定义芯片的大小,定义芯片内各种模块、hard macros(硬核。比如RAM,ROM及其他IP模块等)、IO等的大小和位置,有时候还需要提前定义一些placement blockages,groups/regions等等,是后端设计的第一步,也是后续所有P&R工作的基础。floorplan与placement的区别是。

tfrofc的博客 5831

深度学习模型轻量化方法之【量化】

量化虽然有着硬件友好和功效提升的特点,但它也引入了模型性能的折衷。因此,设计有效的量化策略需要在模型大小、性能以及运算速度之间做出平衡。随着深度学习算法和硬件加速技术的快速发展,量化方法在使深度网络轻量化和提高部署效率方面持续发挥着重要作用。

m0_73916791的博客 2847

好未来U3D笔试攻略:C#基础、Unity引擎与算法考点全解析

在Unity3D开发岗位的笔试中,扎实的C#功底和引擎原理是决定成败的关键。理解值类型与引用类型、委托与事件、GC机制,并掌握协程、物理系统、UI重建及AssetBundle资源加载等核心知识,能够有效应对复杂工程问题。同时,数据结构与算法(如BFS求最短路径)、3D数学中的向量与四元数变换,也是教育科技场景下实现交互课件与虚拟实验室的必备技能。从基础概念到引擎机制,再到实际项目中的性能优化与热更新方案,这些知识共同构成了U3D开发者的核心能力。好未来秋招U3D岗第三批笔试正围绕这些考点展开,深入理解原理并

weixin_33981932的博客 474

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1043

2023好未来U3D开发岗笔试经验:核心考点与踩坑复盘

在Unity游戏开发与交互应用领域,掌握引擎核心机制是衡量开发者水平的关键。从C#值类型装箱到Unity生命周期调用顺序,从物理射线检测到AssetBundle资源管理,这些基础原理直接决定了项目的运行效率与稳定性。理解Time.deltaTime与FixedUpdate的差异、对象池设计思路等工程实践,能够有效应对实际开发中的性能瓶颈。随着教育硬件与3D互动课件的普及,U3D开发岗位愈发重视候选人对引擎底层逻辑与业务场景结合的能力。本文基于2023年好未来秋招U3D开发岗笔试全过程,梳理题型分布、高频考点

weixin_33968104的博客 382

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的YOLOv8的项目,经过实验我发现该卷积模块(作为下采样模块)首先可以大幅度降低参数值,其次其精度上也有很高的提升,同时本文的内容目前网络上并无其它人总结(也是最新发布的,可以说BUff是集满了)大家可以尝试以下在自己数据集上的效果。

Snu77的博客 4772

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

UNITY_委托和事件

UNITY_委托和事件 参考资料: Unity3D脚本编程-使用C#语言开发跨平台游戏-陈嘉栋 观察者模式 主题(Subject)管理某些数据,当主题的数据发生改变时,会通知已经注册(Register)的观察者(Observer),而这些已经注册的观察者会受到数据改变的通知并作出相应反应。 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。 ...

weixin_30457465的博客 469

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#事件和委托机制

今天做unity3d项目,代码中使用了委托机制,由于我对C#不熟

ivebeenready的专栏 709

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Unity快速入门之三 脚本与事件

Unity快速入门之一 3D基础概念、Camera、Canvas RenderMode的几种方式对比 Unity快速入门之二 GUI Transform 与 自适应 详解 脚本与事件 资源管理待定…… 3D模型待定…… …… 接上一篇,3D基本背景、UI自适应之后,要开始上手代码了,这一篇会涉及到一些C#语法,没办法一一讲解,代码内容是纯示例内容,可以有更多更好的思路扩展。 本篇幅会比较长,涉及到比较多的内容,请坐好准备发车~~~~ C# Script(脚本) 脚本创建 挂载 mo.

翕翕堂 5767

【Unity3D技巧】在Unity中使用事件/委托机制

引子在前面两篇文章:【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation我们了解了2D中的Sprite,Animation,RigidBody和...

kenljh的博客 2454

使用c#语言进行游戏开发,Unity 3D脚本编程——使用C#语言开发跨平台游戏

第1 章 Hello Unity 3D 11.1 Unity 3D 游戏引擎进化史 11.2 Unity 3D 编辑器初印象 51.2.1 Project 视图 51.2.2 Inspector 视图 81.2.3 Hierarchy 视图 91.2.4 Game 视图 101.2.5 Scene 视图 121.2.6 绘图模式 141.2.7 渲染模式 161.2.8 场景视图控制 171...

weixin_29549747的博客 2196
上一篇: Android反编译工具介绍与简单实用方法
下一篇: Application常用判断函数
骑行的蜗牛
博客等级 码龄21年 107粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值