输入控制模块:用到之前的事件中心模块和公共Mono模块,核心利用观察者设计模式进行事件的分发与注册。
InputMgr
脚本,输入控制功能模块通过MonoMgr
脚本创建Update方法,在通过EventCenter
触发事件。
/// <summary>
/// 1.Input类
/// 2.事件中心模块
/// 3.公共Mono模块的使用
/// </summary>
public class InputMgr : BaseManager<InputMgr>
{
private bool isStart = false;
/// <summary>
/// 构造函数中 添加Updata监听
/// </summary>
public InputMgr()
{
MonoMgr.GetInstance().AddUpdateListener(MyUpdate);
}
/// <summary>
/// 是否开启或关闭 我的输入检测
/// </summary>
public void StartOrEndCheck(bool isOpen)
{
isStart = isOpen;
}
/// <summary>
/// 用来检测按键抬起按下 分发事件的
/// </summary>
/// <param name="key"></param>
private void CheckKeyCode(KeyCode key)
{
//事件中心模块 分发按下抬起事件
if (Input.GetKeyDown(key))
EventCenter.GetInstance().EventTrigger("某键按下", key);
//事件中心模块 分发按下抬起事件
if (Input.GetKeyUp(key))
EventCenter.GetInstance().EventTrigger("某键抬起", key);
}
private void MyUpdate()
{
//没有开启输入检测 就不去检测 直接return
if (!isStart)
return;
CheckKeyCode(KeyCode.W);
CheckKeyCode(KeyCode.S);
CheckKeyCode(KeyCode.A);
CheckKeyCode(KeyCode.D);
}
}
InputTest
脚本,测试脚本EventCenter
进行事件注册,接收输入方法通过回调函数进行业务逻辑处理。
public class InputTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
InputMgr.GetInstance().StartOrEndCheck(true);
EventCenter.GetInstance().AddEventListener<KeyCode>("某键按下", CheckInputDown);
}
private void CheckInputDown(KeyCode arg0)
{
switch (arg0)
{
case KeyCode.W:
Debug.Log("前进");
break;
case KeyCode.A:
Debug.Log("向左");
break;
case KeyCode.S:
Debug.Log("后退");
break;
case KeyCode.D:
Debug.Log("向右");
break;
default:
Debug.Log("未知");
break;
}
}
}