事件/委托机制(event/delegate)(Unity3D开发之十七)
2015-06-17 22:46
429 查看
猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/46539433
Delegate作用我就不多说了,Unity中可以直接使用EventHandler实现事件委托,咱们直接事例吧。
事件接收处理
这里由于使用的EventHandler实现,所以在事件中无法传递自定义参数。
那么我们修改下PlayerControl
处理事件的我们也修改下
ok,现在你可以自由的玩耍了。
原文地址: http://blog.csdn.net/cocos2der/article/details/46539433
Delegate作用我就不多说了,Unity中可以直接使用EventHandler实现事件委托,咱们直接事例吧。
一、场景物体移动结束后事件监听
假如PlayerControl,移动结束后触发MoveComplete事件。using UnityEngine; using System.Collections; using System; public class PlayerControl : MonoBehaviour { public event EventHandler MoveComplete; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButtonUp(0)) { // Test logic for PlayerMoveComplete PlayerMoveComplete(); } } void PlayerMoveComplete() { if (MoveComplete != null) { MoveComplete(this, EventArgs.Empty); } } }
事件接收处理
using UnityEngine; using System.Collections; using System; public class GameManager : MonoBehaviour { public static GameManager Instance; public PlayerControl playerControl; void Awake () { // check there isn't more than one instance of the GameManager in the scene if(Instance != null){ Debug.LogError("More than one GameManager found in the scene"); return; } // set the global instance Instance = this; } // Use this for initialization void Start () { playerControl.MoveComplete += HandleMoveComplete; } void HandleMoveComplete (object sender, EventArgs e) { Debug.Log("MoveComplete:"); } // Update is called once per frame void Update () { } }
这里由于使用的EventHandler实现,所以在事件中无法传递自定义参数。
二、自定义Event,事件中传递自定义参数
1、自定义EventArgsusing UnityEngine; using System.Collections; using System; public class PlayerMoveEventArgs : EventArgs { private string message; public PlayerMoveEventArgs(string message) { this.message = message; } public string Message { get{return message;} } } public delegate void MoveCompleteHandle(object sender, PlayerMoveEventArgs e);
那么我们修改下PlayerControl
using UnityEngine; using System.Collections; using System; public class PlayerControl : MonoBehaviour { public event EventHandler MoveComplete; public event MoveCompleteHandle CustomMoveComplete; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButtonUp(0)) { // Test logic for PlayerMoveComplete PlayerMoveComplete(); } } void PlayerMoveComplete() { if (MoveComplete != null) { MoveComplete(this, EventArgs.Empty); } if (CustomMoveComplete != null) { CustomMoveComplete(this, new PlayerMoveEventArgs("Move:" + this.name)); } } }
处理事件的我们也修改下
using UnityEngine; using System.Collections; using System; public class GameManager : MonoBehaviour { public static GameManager Instance; public PlayerControl playerControl; void Awake () { // check there isn't more than one instance of the GameManager in the scene if(Instance != null){ Debug.LogError("More than one GameManager found in the scene"); return; } // set the global instance Instance = this; } // Use this for initialization void Start () { playerControl.MoveComplete += HandleMoveComplete; playerControl.CustomMoveComplete += HandleCustomMoveComplete; } void HandleCustomMoveComplete (object sender, PlayerMoveEventArgs e) { Debug.Log("HandleCustomMoveComplete:" + e.Message); } void HandleMoveComplete (object sender, EventArgs e) { Debug.Log("MoveComplete:"); } // Update is called once per frame void Update () { } }
ok,现在你可以自由的玩耍了。
相关文章推荐
- apache mpm
- C#使用委托(delegate)实现在两个form之间传递数据的方法
- 通过event对象的fromElement属性解决热区设置主实体的一个bug
- JavaScript Event学习第十章 一些可替换的事件对
- JavaScript Event学习第九章 鼠标事件
- JavaScript Event学习补遗 addEventSimple
- javascript event 事件解析
- JavaScript Event学习第四章 传统的事件注册模型
- JS event使用方法详解
- javaScript window.event.keyCode 集合与测试方法
- JavaScript Event学习第六章 事件的访问
- javascript add event remove event
- Query中click(),bind(),live(),delegate()的区别
- Jquery替换已存在于element上的event的方法
- 由点击页面其它地方隐藏div所想到的jQuery的delegate
- jquery利用event.which方法获取键盘输入值的代码
- jQuery.event兼容各浏览器的event详细解析
- JavaScript Event学习第七章 事件属性
- FireFox JavaScript全局Event对象
- jQuery中delegate与on的用法与区别示例介绍