Gre*_*reg 5 c# hook listener unity-game-engine
我需要知道有多少非持久侦听器被添加到 UnityEvent。
似乎没有方法在 UnityEvent 类中给我这个数字。我只能获得持久侦听器计数(从编辑器或使用 UnityEvent.AddPersistentListener() 添加的那些)。我想出的唯一解决方案是创建一个子类并使用注册计数覆盖该函数。
这是一个显示问题的简短代码:
private UnityEvent myEvent;
private void MyFunctionToHook()
{
// func logic
}
private void MyInitialisation()
{
myEvent.AddListener(MyFunctionToHook);
myEvent.AddListener(MyFunctionToHook);
myEvent.AddListener(MyFunctionToHook);
// here, I need to know how much hooks were added.
// ??
}
Run Code Online (Sandbox Code Playgroud)
1)您对我如何设法在本地跟踪此信息有任何想法吗?
2)我这样做对吗?想知道这些信息有错吗?
无法访问此信息似乎很奇怪,因为它可能在单元测试/警告中很有用...等
谢谢你的时间。
这是 unityEvent 文档:https ://docs.unity3d.com/ScriptReference/Events.UnityEvent.html
[编辑] 到目前为止我发现的唯一解决方案如下:
public class TrackingUnityEvent<T0> : UnityEvent<T0>
{
private int nonPersistentListenersCount;
public int GetNonPersistentEventCount()
{
return nonPersistentListenersCount;
}
public void AddNonPersistantListener(UnityAction<T0> call)
{
AddListener(call);
nonPersistentListenersCount++;
}
public void RemoveNonPersistantListener(UnityAction<T0> call)
{
RemoveListener(call);
nonPersistentListenersCount--;
}
}
Run Code Online (Sandbox Code Playgroud)
这种方式很糟糕,因为您无法判断“RemoveListener()”和“AddListener()”是否成功,因为它们是无效的。
小智 0
为什么不将事件包装在另一个没有继承的类中,以便可以计算侦听器的数量?您还可以向事件添加更多代码...
public class MySpecialEvent {
private UnityEvent event;
public EventCount { get; private set; }
public void AddListener(UnityAction call) {
event.AddListener(call);
EventCount++;
}
public void RemoveListener(UnityAction call) {
event.RemoveListener(call);
EventCount--;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |