1、目标
掌握事件通知的Publisher - Subscriber设计模式,并通过事件通知触发动画。
2、发布者/订阅者模式
首先,定义事件Event
然后,Publisher触发事件
最后,Subscriber订阅事件并进行处理
(1)创建动作Enum类
在Assets -> Scripts 下新建Enums目录,并且创建Enums脚本如下:
public enum ToolEffect
{
none,
watering
}
(2)创建事件处理类EventHandler
public delegate void MovementDelegate(float inputX, float inputY, bool isWalking, bool isRunning, bool isIdle, bool isCarrying,
ToolEffect toolEffect,
bool isUsingToolRight, bool isUsingToolLeft, bool isUsingToolUp, bool isUsingToolDown,
bool isLiftingToolRight, bool isLiftingToolLeft, bool isLiftingToolUp, bool isLiftingToolDown,
bool isPickingRight, bool isPickingLeft, bool isPickingUp, bool isPickingDown,
bool isSwingToolRight, bool isSwingToolLeft, bool isSwingToolUp, bool isSwingToolDown,
bool idleUp, bool idleDown, bool idleLeft, bool idleRight
);
public static class EventHandler
{
public static event MovementDelegate MovementEvent;
public static void CallMovementEvent(float inputX, float inputY, bool isWalking, bool isRunning, bool isIdle, bool isCarrying,
ToolEffect toolEffect,
bool isUsingToolRight, bool isUsingToolLeft, bool isUsingToolUp, bool isUsingToolDown,
bool isLiftingToolRight, bool isLiftingToolLeft, bool isLiftingToolUp, bool isLiftingToolDown,
bool isPickingRight, bool isPickingLeft, bool isPickingUp, bool isPickingDown,
bool isSwingToolRight, bool isSwingToolLeft, bool isSwingToolUp, bool isSwingToolDown,
bool idleUp, bool idleDown, bool idleLeft, bool idleRight)
{
if (MovementEvent != null)
{
MovementEvent(inputX, inputY, isWalking, isRunning, isIdle, isCarrying,toolEffect,
isUsingToolRight, isUsingToolLeft, isUsingToolUp, isUsingToolDown,
isLiftingToolRight, isLiftingToolLeft, isLiftingToolUp, isLiftingToolDown,
isPickingRight, isPickingLeft, isPickingUp, isPickingDown,
isSwingToolRight, isSwingToolLeft, isSwingToolUp, isSwingToolDown,
idleUp, idleDown, idleLeft, idleRight);
}
}
}
- 静态类EventHandler
定义了一个公开的静态类 EventHandler。静态类不能被实例化,并且它包含的所有成员都必须是静态的。这意味着你可以直接通过类名访问这些成员,而不需要创建类的实例。
- 静态事件 MovementEvent
委托是一种特殊的类型,它定义了方法的类型&