【发布时间】:2014-05-03 23:54:28
【问题描述】:
我有一个枚举prior。
我的每个脚本都有 priority 类型的 prior 属性。 (每个脚本都有自己的类)
我有一个数据提供者,它可以每帧发送事件。
我希望脚本只订阅一个事件,该事件的参数优先级等于脚本的参数。
例如,具有moderate 优先级的脚本应该只接收带有moderate 事件参数参数的事件
prior 的成员太多,无法为每个成员创建一个特殊的事件参数类。
不幸的是:
a)我只知道如何订阅某种事件类型。
b)我不能为事件参数创建一个泛型类,因为枚举的元素不是类型
我该怎么做?
项目目前看起来是这样的:
public class TDefault:MonoBehaviour,IDefault
{
public enum prior
{
none,
...,
terminal
};
prior priority;
public virtual void apply()//For override by scripts
{
}
void Start()
{
//There should be adding a method which calls apply() when event_manager
//sends Event with a certain priority
}
public TDefault ()
{
if(essential==null)
essential=new TEssential();
}
}
public class TApplyEventParam : EventArgs
{
public TDefault.prior priority;
public TApplyEventParam(TDefault.prior _priority)
{
priority=_priority;
}
}
public class event_manager : TDefault
{
//This has fixed type
event EventHandler<TApplyEventParam> handler=new EventHandler<TApplyEventParam>();
void Update ()
{
foreach (prior p in (prior[]) Enum.GetValues(typeof(prior)))
{
handler(this,new TApplyEventParam(p));
}
}
}
【问题讨论】:
-
那么,这些“脚本”有共同的基类吗?你能改变出版商吗?
-
是的,他们有,我可以更改发布者。
-
发布代码大纲。我懒得想象这一切。
-
BuiltInClasses<-TDefault<-...其中...包括发布者和所有脚本。大纲是什么意思? -
@user2136963:请编辑您的问题,而不是发布 cmets。