Módulo de controle de entrada: Usando o módulo do centro de eventos anterior e o módulo Mono público, o núcleo usa o padrão de design do observador para distribuir e registrar eventos.
InputMgr
Script, o módulo de função de controle de entradaMonoMgr
cria o método Update por meio do script eEventCenter
aciona o evento.
/// <summary>
/// 1.Input类
/// 2.事件中心模块
/// 3.公共Mono模块的使用
/// </summary>
public class InputMgr : Singleton<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
Scripts, scripts de testeEventCenter
para registro de eventos, recebem métodos de entrada para processamento de lógica de negócios por meio de funções de retorno de chamada.
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;
}
}
}