gpt4 book ai didi

c# - 在基于事件的架构中通过 UnityEvent 传递数据

转载 作者:太空狗 更新时间:2023-10-30 01:28:42 25 4
gpt4 key购买 nike

我来自这篇文章

https://unity3d.com/how-to/architect-with-scriptable-objects

并想知道如何引发事件并将数据传递给它。因为只听这个事件是不够的。我将尝试对其进行解释以进行复制。

首先我创建了一个新的游戏事件LevelSceneLoadedGameEvent

class LevelSceneLoadedGameEvent : UnityEvent<Scene> { }

引发此事件时,它应返回已加载的当前场景。接下来我创建了一个静态的 EventManager 来管理所有这些事件

public static class EventManager
{
private static Dictionary<Type, UnityEvent> events = new Dictionary<Type, UnityEvent>()
{
{
typeof(LevelSceneLoadedGameEvent),
new LevelSceneLoadedGameEvent()
}
};

private static UnityEvent GetEvent<EventType>() where EventType : UnityEvent
{
return events[typeof(EventType)];
}

public static void SubscribeTo<EventType>(UnityAction listener) where EventType : UnityEvent
{
GetEvent<EventType>().AddListener(listener);
}

public static void UnsubscribeFrom<EventType>(UnityAction listener) where EventType : UnityEvent
{
GetEvent<EventType>().RemoveListener(listener);
}

public static void Trigger<EventType>() where EventType : UnityEvent
{
GetEvent<EventType>().Invoke();
}

public static void Trigger<EventType, FirstParam>(FirstParam firstParam) where EventType : UnityEvent
{
GetEvent<EventType>().Invoke(firstParam);
}
}

其他脚本可以订阅/取消订阅事件并触发这些事件。现在出现了两个属于同一类的问题:

  • 我无法将我的通用 UnityEvent 存储到字典中,因为它只能保存非通用的

The best overloaded Add method 'Dictionary.Add(Type, UnityEvent)' for the collection initializer has some invalid arguments (CS1950) [Assembly-CSharp] Argument 2: cannot convert from 'LevelSceneLoadedGameEvent' to 'UnityEngine.Events.UnityEvent' (CS1503) [Assembly-CSharp]

  • 我的带有一个参数的 Trigger 方法在 Invoke 时失败,因为 GetEvent 返回一个非通用的 UnityEvent<

No overload for method 'Invoke' takes 1 arguments (CS1501) [Assembly-CSharp]

如何修复我的 EventManager 以处理非通用和通用的 UnityEvents

最佳答案

UnityEvent有几个通用重载,您可以使用它们来添加参数(例如字符串、整数等)

基本上,Unity 将序列化的任何数据类型都会显示在检查器中。所以你基本上需要使用 UnityEvent<string>例如,如果您希望使用字符串引发事件。

Here是使用单个参数 UnityEvent 的示例。

关于c# - 在基于事件的架构中通过 UnityEvent 传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com