1、为什么制作输入输出模块
制作输入控制模块主要是降低 输入相关代码的耦合性
以前我们制作老输入系统相关功能,都是在Update当中进行按键检测 处理对应逻辑
但是当游戏开发中存在角色切换功能时,可能就会存在冗余代码
所以我们将通过输入控制模块来降低代码耦合性,减少冗余代码
2、输入控制模块的基本原理
1.制作InputMgr单例模式管理器
2.在输入管理器中进行按键检测
3.利用事件中心分发事件
4.在希望处理输入逻辑的位置监听事件
基础版实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InputMgr : BaseManager<InputMgr>
{
//是否开启了输入系统检测
private bool isStart;
private InputMgr()
{
MonoMgr.Instance.AddUpdateListener(InputUpdate);
}
/// <summary>
/// 开启或者关闭我们的输入管理模块的检测
/// </summary>
/// <param name="isStart"></param>
public void StartOrCloseInputMgr(bool isStart)
{
this.isStart = isStart;
}
private void InputUpdate()
{
//如果外部没有开启检测功能 就不要检测
if (!isStart)
return;
CheckKeyCode(KeyCode.W);
CheckKeyCode(KeyCode.A);
CheckKeyCode(KeyCode.S);
CheckKeyCode(KeyCode.D);
CheckKeyCode(KeyCode.H);
CheckKeyCode(KeyCode.J);
CheckKeyCode(KeyCode.K);
CheckKeyCode(KeyCode.L);
CheckMouse(0);
CheckMouse(1);
EventCenter.Instance.EventTrigger(E_EventType.E_Input_Horizontal, Input.GetAxis("Horizontal"));
EventCenter.Instance.EventTrigger(E_EventType.E_Input_Vertical, Input.GetAxis("Vertical"));
}
private void CheckKeyCode(KeyCode key)
{
if (Input.GetKeyDown(key))
EventCenter.Instance.EventTrigger(E_EventType.E_Keyboard_Down, key);
if (Input.GetKeyUp(key))
EventCenter.Instance.EventTrigger(E_EventType.E_Keyboard_Up, key);
if (Input.GetKey(key))
EventCenter.Instance.EventTrigger(E_EventType.E_Keyboard, key);
}
private void CheckMouse(int mouseID)
{
if (Input.GetMouseButtonDown(mouseID))
EventCenter.Instance.EventTrigger(E_EventType.E_Mouse_Down, mouseID);
if (Input.GetMouseButtonUp(mouseID))
EventCenter.Instance.EventTrigger(E_EventType.E_Mouse_Up, mouseID);
if (Input.GetMouseButton(mouseID))
EventCenter.Instance.EventTrigger(E_EventType.E_Mouse, mouseID);
}
}