因为以前用的 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);
                }
            }
        }
    }
}