1.引入:
一般我们在unity中书写输入模块,一般都是if+Input写一堆,有时候一个按键的事件要在不同的脚本的Update中书写判断很多次,得非常啰嗦。
2.思路:
创建一个InputManager事件,用于专门获取按键消息,然后利用事件中心分发对应事件,需要响应的脚本监听这一事件
3.编码:
public class InputManager : SingeCaseBase<InputManager>
{
//用于控制输入响应的开启和关闭
private bool isStart = false;
public void SetIsStart(bool value)
{
isStart = value;
}
/// <summary>
/// 确保InputManager实例化时InputManager也被实例化,Update才得以运行
/// </summary>
public InputManager()
{
MonoManager.GetInstance().AddUpdateAction(InputUpdate);
}
/// <summary>
/// Update响应按键,分发消息
/// </summary>
void InputUpdate()
{
if(isStart)
{
KeyDown(KeyCode.W);
KeyDown(KeyCode.A);
KeyDown(KeyCode.S);
KeyDown(KeyCode.D);
}
}
/// <summary>
/// 按键按下分发消息
/// </summary>
/// <param name="code"></param>
void KeyDown(KeyCode code)
{
//获取键盘输入,分发事件
if (Input.GetKeyDown(code))
{
EventCenter.GetInstance().EventTrigger("KeyDown", code);
}
}
/// <summary>
/// 按键抬起分发消息
/// </summary>
/// <param name="code"></param>
void KeyUp(KeyCode code)
{
//获取键盘输入,分发事件
if (Input.GetKeyDown(code))
{
EventCenter.GetInstance().EventTrigger("KeyUp", code);
}
}
}