因为以前用的 ActionScript 开发网页游戏,ActionScript 中的 EventDispatcher 还是非常方便以及实用的,借助 C# 强大的语言环境,做了 C# 版的 EventDispatcher 与 EventListener,但是与 ActionScript 相比,还是有一些差距,其中就没有事件冒泡机制,因为感觉用不上,或者稍加修改就可以实现同样的结果。
先来看下效果图,图中点击 Cube(EventDispatcher),Sphere(EventListener)以及 Capsule(EventListener)会做出相应的变化,例子中的对象相互之间没有引用,也没有父子关系。
Demo 事件触发者(EventDispatcher)CubeObject.cs,挂载在 Cube 对象上
using UnityEngine;
using System.Collections;
public class CubeObject : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButtonDown (0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit raycastHit = new RaycastHit();
if(Physics.Raycast(ray, out raycastHit))
{
if(raycastHit.collider.gameObject.name == \"Cube\")
{
// 触发事件
ObjectEventDispatcher.dispatcher.dispatchEvent(new UEvent(EventTypeName.CUBE_CLICK, \"cube\"), this);
}
}
}
}
}