使用不同的 return 类型方法订阅 Action 事件
Subscribe to an Action event with a different return type method
我有一个活动:
public event Action OnDamageTaken;
我想在我的行为树中订阅它,但是使用 return 类型的 TaskStatus,当评估为 TaskStatus.Success 时,将结束树中的当前任务执行,例如所以:
Vegetation.OnDestroy += VegetationDestroyed;
public TaskStatus VegetationDestroyed()
{
Owner.FindTask<JobChooser>().CurrentJob.OnJobCompleted();
return TaskStatus.Success;
}
但是,我收到以下错误:
是否可以做这样的事情,如果不能,为什么?我认为由于 Action 事件不传递任何参数,因此,我们可以使用具有任何 return 类型的方法进行订阅,只要该方法也不需要参数。
您可以将方法包装在 lambda 中:
Vegetation.OnDestroy += () => VegetationDestroyed();
如果您想再次取消订阅该事件,您必须将 lambda 存储在一个变量中:
Action onDestroy = () => VegetationDestroyed();
Vegetation.OnDestroy += onDestroy;
Vegetation.OnDestroy -= onDestroy;
我有一个活动:
public event Action OnDamageTaken;
我想在我的行为树中订阅它,但是使用 return 类型的 TaskStatus,当评估为 TaskStatus.Success 时,将结束树中的当前任务执行,例如所以:
Vegetation.OnDestroy += VegetationDestroyed;
public TaskStatus VegetationDestroyed()
{
Owner.FindTask<JobChooser>().CurrentJob.OnJobCompleted();
return TaskStatus.Success;
}
但是,我收到以下错误:
是否可以做这样的事情,如果不能,为什么?我认为由于 Action 事件不传递任何参数,因此,我们可以使用具有任何 return 类型的方法进行订阅,只要该方法也不需要参数。
您可以将方法包装在 lambda 中:
Vegetation.OnDestroy += () => VegetationDestroyed();
如果您想再次取消订阅该事件,您必须将 lambda 存储在一个变量中:
Action onDestroy = () => VegetationDestroyed();
Vegetation.OnDestroy += onDestroy;
Vegetation.OnDestroy -= onDestroy;