我在UnityEngine.UI源代码中四处寻找。我试图了解事件系统如何知道哪些类正在实现IDragHandler接口或任何其他事件系统接口。
我到了一个只读对象的地方>或类似的东西。但我没有找到填充数据的地方。
有人知道evetsystem如何知道某个类是否正在从事件系统实现接口?我找不到接口注册的地方。
答案 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