输入输出管理器的使用
解释
InputMgr
是一个输入管理器,主要用于检测并管理用户的输入事件(例如键盘和鼠标输入)。它通过监听输入事件,并利用事件中心 (EventCenter
) 来触发相应的事件。在这里,你可以管理多种输入类型,如按下、抬起、以及持续按住的操作。这个管理器不仅能够捕捉单次输入,还可以通过回调函数捕获特定输入信息,用于复杂交互场景。
核心功能概述:
- 输入管理的开启和关闭:控制输入管理器是否处于活动状态。
- 键盘和鼠标输入的注册:支持监听特定按键或鼠标事件,并根据事件类型(按下、抬起、长按)触发相应的游戏逻辑。
- 输入监听的移除:可以动态地添加或移除输入监听,灵活地调整输入机制。
- 获取下一次输入信息:通过协程等待输入事件,并通过回调函数将输入信息传递给外部。
- 输入事件的触发:根据定义好的输入(键盘或鼠标)触发与之关联的事件中心操作。
- 外部事件的触发:例如,水平方向和垂直方向的移动触发,支持在游戏中处理角色移动等操作。
公有方法解释:
-
StartOrCloseInputMgr(bool isStart)
开启或关闭输入系统的检测。如果isStart
为true
,输入系统开始监听输入事件,反之停止监听。 -
ChangeKeyboardInfo(E_EventType eventType, KeyCode key, InputInfo.E_InputType inputType)
注册或更改键盘输入事件。根据传入的eventType
,将key
对应的输入与具体事件类型(按下、抬起、长按)绑定到输入管理器中。 -
ChangeMouseInfo(E_EventType eventType, int mouseID, InputInfo.E_InputType inputType)
注册或更改鼠标输入事件。根据传入的eventType
,将鼠标按键(mouseID
)对应的输入与具体事件类型(按下、抬起、长按)绑定到输入管理器中。 -
RemoveInputInfo(E_EventType eventType)
移除指定eventType
的输入监听。可以动态移除某些输入事件以便释放资源或调整输入模式。 -
GetInputInfo(UnityAction<InputInfo> callBack)
设置一个回调函数,用于捕获下一次的输入操作(键盘或鼠标)。捕获到输入信息后,通过回调将信息传递给外部。 -
InputUpdate()
这个方法会在每一帧更新中执行,首先会判断是否有输入信息需要传递给外部(如果启用了输入检查)。如果有输入,则触发与之关联的事件。
示例用例:
假设我们在一个游戏中要监听角色的基本控制操作,如移动(WASD键)和攻击(鼠标左键),并实现自定义事件绑定和管理。下面展示如何通过 InputMgr
实现这些功能:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class InputExemple : MonoBehaviour
{private void Start(){InputMgr.Instance.StartOrCloseInputMgr(true);InputMgr.Instance.ChangeKeyboardInfo(E_EventType.E_Input_MoveForward, KeyCode.W, InputInfo.E_InputType.Always);InputMgr.Instance.ChangeKeyboardInfo(E_EventType.E_Input_MoveBackward, KeyCode.S, InputInfo.E_InputType.Always);InputMgr.Instance.ChangeKeyboardInfo(E_EventType.E_Input_MoveLeft, KeyCode.A, InputInfo.E_InputType.Always);InputMgr.Instance.ChangeKeyboardInfo(E_EventType.E_Input_MoveRight, KeyCode.D, InputInfo.E_InputType.Always);InputMgr.Instance.ChangeMouseInfo(E_EventType.E_Input_Attack,0, InputInfo.E_InputType.Always);EventCenter.Instance.AddEventListener(E_EventType.E_Input_MoveForward, MoveForward);EventCenter.Instance.AddEventListener(E_EventType.E_Input_MoveBackward, MoveBackward);EventCenter.Instance.AddEventListener(E_EventType.E_Input_MoveLeft, MoveLeft);EventCenter.Instance.AddEventListener(E_EventType.E_Input_MoveRight, MoveRight);EventCenter.Instance.AddEventListener(E_EventType.E_Input_Attack, Attack);}private void Attack(){Debug.Log("角色攻击!");}private void MoveRight(){Debug.Log("角色向右移动");}private void MoveLeft(){Debug.Log("角色向左移动");}private void MoveBackward(){Debug.Log("角色向后移动");}private void MoveForward(){Debug.Log("角色向前移动");}
}
流程说明:
-
开启输入检测系统:
- 调用
InputMgr.Instance.StartOrCloseInputMgr(true)
来开启输入监听。
- 调用
-
注册输入事件:
- 使用
ChangeKeyboardInfo()
注册键盘 WASD 键的长按事件,表示角色移动操作。 - 使用
ChangeMouseInfo()
注册鼠标左键的按下事件,表示角色攻击操作。
- 使用
-
绑定事件回调:
- 使用
EventCenter.Instance.AddListener()
为每一个输入事件绑定一个对应的回调函数,如MoveForward()
或Attack()
。
- 使用
-
触发事件:
- 当用户按下或松开键盘或鼠标按钮时,
InputMgr
自动检测并触发绑定在EventCenter
上的事件逻辑。
- 当用户按下或松开键盘或鼠标按钮时,
相关文章:
输入输出管理器的使用
解释 InputMgr 是一个输入管理器,主要用于检测并管理用户的输入事件(例如键盘和鼠标输入)。它通过监听输入事件,并利用事件中心 (EventCenter) 来触发相应的事件。在这里,你可以管理多种输入类型,如按下、…...
windows连接linux服务器上的jupyter lab
文章目录 服务器上开启jupyter lab本地cmd将端口8888映射到服务器的8889上本地浏览器打开8888端口 服务器上开启jupyter lab jupyter-lab --ip 0.0.0.0 --port 8889 --no-browser --allow-root本地cmd将端口8888映射到服务器的8889上 ssh -N -f -L localhost:8888:localhost:…...

golang生成并分析cpu prof文件
1. 定义一个接口,请求接口时,生成cpu.prof文件 在主协程中新启一个协程,当请求接口时,生成一个60秒的cpu.prof文件 go func() {http.HandleFunc("/prof", startProfileHandler)http.ListenAndServe(":9092"…...

【Python爬虫实战】XPath与lxml实现高效XML/HTML数据解析
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、为什么学习xpath和lxml (一)高效解析和提取数据 …...

软件测试学习笔记丨Selenium学习笔记:元素定位与操作
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22510 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…...
在 HTML 中,<input> 元素支持的事件汇总
在 HTML 中,<input> 元素支持多种事件,这些事件可以在用户与输入字段交互时触发。以下是一些常见的 <input> 事件: input: 当 <input> 元素的值发生变化时触发。适用于文本、数字、日期等类型的输入。 change: 当 <inp…...

vue3【实战】 渲染 md 文件(markdown语法 .md后缀的文件)
1. 安装相关插件 npm i unplugin-vue-markdown markdown-it-prism prism unhead/vue2. 添加配置 src/main.ts // 给 md 文件创建头部 import { createHead } from unhead/vue // md 文件中代码高亮的样式 import prismjs/themes/prism.css // 自定义 md 文件的样式 import /as…...

Sora高端制造业WordPress外贸主题
Sora是一款专为高端制造业设计的WordPress主题,由国内知名wordpress开发团队简站wordpress主题开发,它以红色为主色调,适合外贸企业出海建独立站的模板。这个主题适用于WordPress 6.0及以上版本,并且只服务于真正有需要的用户。主…...
windows安装superset及各种问题解决
1,背景 先说说背景,之前在2月份已经安装过superset3.1.1,当时还没有提示SECRET_KEY异常,能正常运行,且已配置数据库连接. 2,报错信息及解决途径 1,创建admin时,提示Error! User already exists 这个是因为之前已经创建过admin用户,需要删除C:\Users\用户名\.superset下的.…...

JMeter模拟并发请求
PostMan不是严格意义上的并发请求工具,实际是串行的,如果需要测试后台接口并发时程序的准确性,建议采用JMeter工具。 案例:JMeter设置20个并发卖票请求,查看后台是否存在超卖的情况 方式一:一共10张票&…...

【小趴菜前端实习日记5】
实习日记5 一、vue3中如何使用router(获取this)二、ts中用object定义类型太宽泛导致Ts无法推断出正确类型三、动态设置日记封面失败vite动态引入静态资源1.方法一vue3父子组件生命周期执行顺序 2.方法二3.方法三 四、打包问题总结1.The import.meta meta-property i…...

如何通过谷歌外推占据搜索引擎首页?
外贸企业在推广过程中,如何在谷歌搜索引擎中占据有利位置,获取更多曝光,GLB谷歌霸屏服务就可以派上用场。它通过高效的品牌外推策略,可以让你的企业信息在谷歌中实现“霸屏”效果,特别是长尾关键词的全面覆盖 很多企业…...
jmeter学习(6)逻辑控制器
1. 简单控制器 简单控制器用来存放组件的,没有提供什么逻辑功能。 2. 循环控制器 用来循环执行请求,可以配置循环次数。注意它与线程组、测试计划中的循环是相互独立的,比如在线程组中设置循环2次,循环控制器设置循环3次&#…...
Android14 和android12 在锁屏界面Keyguard输错5次密码后倒计时30秒时重启手机不显示倒计时
参考如下修改:Android9.0在锁屏界面Keyguard输错5次密码后倒计时30秒时重启手机不显示倒计时_android 锁屏密码输错5次-CSDN博客 android 14 修改如下: androidap/SYSTEM/frameworks/base$ git status Refresh index: 100% (47218/47218), done. HEAD d…...

智能时代摩托车一键启动无钥匙进入感受科技前线
向智能化与高性能迈进,技术创新与绿色转型引领摩托车行业智能化出行。 摩托车一键启动无钥匙进入功能是一种先进的车辆控制系统,它允许驾驶员在不使用传统机械钥匙的情况下,通过智能感应技术自动解锁和启动摩托车。这种系统通常包括一个智能钥匙&#x…...
需要补充的技能
密码管理 文件管理 人际管理 Microsoft365 teams和onedrive,outlook,sharepoint等 被问到自己不懂的问题的时候怎么迅速反应快速回答? 被帅锅的时候怎么解决? 谈判技巧? 说话的语速? 遇到解决不了的问题如何处理? 考…...
15分钟学 Go 第 15 天:映射(Map)
第15天:映射(Map) 学习目标 在本节中,我们将深入理解Go语言中的字典类型(映射),通过例子与图示来帮助你掌握其使用方法。我们将涵盖以下几个方面: 概念定义创建和使用映射访问和更…...

element-plus 官方表格排序问题
element-plus 官方API 默认表格排序存在问题,一个list 被多组排序 修改后: 注意点: 这里一定要使用 sortable"custom",自定义 sort-change 方法 使用 sortable true 的情况排序会冲突,出现莫名奇妙的问题…...

AI语音模型在家宽业务中的应用
在运营商家宽业务支撑场景中,存在多个APP和系统需要与装维人员交互,传统的功能按钮点击型操作交互界面,越来越难以满足装维人员工作提效的迫切需求。家宽施工调度系统所需的AI语音能力主要包括ASR(音转字)和TTS&#x…...
零七生活API-文字转语音API使用示例
//官网地址:零七生活API - 提供免费接口调用平台function getAud(){axios({method: get,url: https://api.oick.cn/api/txt?text你好&spd5&apikeyyourApikey,responseType: blob, // 确保 axios 处理为二进制数据}).then((response) > {// 将 Blob 转换…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...