UF_OLDL7——输入控制模块

输入控制模块

注意!该输入控制模块主要用于PC端,其它操作方式需要作特别的处理,但思路大致一致

在使用输入控制模块前,可能都是在操控角色的Update()内写输入操作逻辑
但是,如果我们要切换操控的对象,或者多操控一些对象,每一个对象的类里都要写输入操作逻辑,
这样较为麻烦且不能统一管理,也不利于降低代码耦合性(不同的类都在引用Input类,但是它们输入的逻辑其实是类似的)

通过事件中心模块,封装一个输入控制模块,它只需要对事件中心发送输入事件,由事件中心触发对象执行监听输入事件的方法
这样即可缩减代码量,且便于统一管理输入控制逻辑,降低耦合性
(要控制的对象只需要通过事件中心监听输入控制模块发送的输入事件即可)

知识点:Input,事件中心模块,公共Mono模块

最基本的输入模块

使用方法:
检测键盘某按键按下检测,向事件中心发送监听“键盘某键按下”“键盘某键抬起”,可以检测
需要加键就在InputUpdate加调用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using UnityEngine;
/// <summary>
/// 输入控制模块
/// </summary>
public class InputManager : BaseManager<InputManager>
{
private bool isInput = false;

/// <summary>
/// 当第一次调用该模块时,先用构造函数初始化,将输入检测方法放入公共Mono的Update内
/// </summary>
public InputManager()
{
MonoManager.Instance().AddUpdateListener(InputUpdate);
}

/// <summary>
/// 是否开启或关闭输入检测
/// </summary>
/// <param name="isOpen"></param>
public void StartOrEnd(bool isOpen)
{
isInput = isOpen;
}

/// <summary>
/// 检测键盘某按键按下检测,向事件中心发送监听“键盘某键按下”“键盘某键抬起”,可以检测
/// </summary>
/// <param name="key"></param>
private void CheckKeyCode(KeyCode key)
{
if (Input.GetKeyDown(key))
EventCenter.Instance().EventTrigger("键盘某键按下", key);
if (Input.GetKeyUp(key))
EventCenter.Instance().EventTrigger("键盘某键抬起", key);
}

private void InputUpdate()
{
if (isInput)
{
CheckKeyCode(KeyCode.W);
CheckKeyCode(KeyCode.S);
CheckKeyCode(KeyCode.A);
CheckKeyCode(KeyCode.D);
}
}
}