Unity如何实现IDragHandler,事件系统如何知道

时间:2017-11-10 14:32:02

标签: c# unity3d

我在UnityEngine.UI源代码中四处寻找。我试图了解事件系统如何知道哪些类正在实现IDragHandler接口或任何其他事件系统接口。

我到了一个只读对象的地方>或类似的东西。但我没有找到填充数据的地方。

有人知道evetsystem如何知道某个类是否正在从事件系统实现接口?我找不到接口注册的地方。

2 个答案:

答案 0 :(得分:3)

GetComponent功能就是答案。如果返回interface,它会实现null。如果返回null,则不实现接口。

例如:

界面:

public interface IDrag { }

实现它的脚本:

public class MyScript : MonoBehaviour, IDrag{ }

要检查MyScript脚本是否实现IDrag接口,请使用GetComponent功能。

IDrag idrag = gameObject.GetComponent<IDrag>();
if (idrag != null)
    Debug.Log("Implemeted IDrag");
else
    Debug.Log("DID NOT Implement IDrag");

答案 1 :(得分:1)

ExecuteEvents类包含一种用于检查GameObject是否可以处理特定UI事件(类型为T的IEventSystemHandler)的方法,例如:

bool handlesDrag = ExecuteEvents.CanHandleEvent<IDragHandler>(gameObject);

如果true实现了gameObject接口,则返回IDragHandler

文档位于:

https://docs.unity3d.com/ScriptReference/EventSystems.ExecuteEvents.CanHandleEvent.html