Unity中的键位KeyCode

 

目录

主要用途

检测按键事件:

处理键盘输入:

基本键位 

常用键:

字母键:

数字键:

功能键:

方向键:

控制键:

鼠标键:

其他特殊键:

  代码示例

按下与抬起空格

 检测方向键来移动游戏对象

同时检测多个键

暂停和恢复

通过数字键切换武器

注意事项

在不同操作系统(如Windows、MacOS、Linux)上的差异

处理特殊键(如Ctrl、Alt、Shift)的事件

 Input.GetKeyDown(KeyCode) 与 Input.GetKeyDown() 的区别

所有类型的键盘输入


主要用途

  1. 检测按键事件

    • 使用 Input.GetKeyDown(KeyCode) 方法可以检测用户是否按下特定的键。例如,Input.GetKeyDown(KeyCode.Space) 可以检测空格键是否被按下。
    • 在 Event 类中,Event.keyCode 返回键盘事件的原始键代码,这些键代码直接映射到物理键盘键。
  2. 处理键盘输入

    在 OnGUI 方法中,可以通过 Event.current.keyCode 获取当前按键的 KeyCode 值,并进行相应的处理。

基本键位 

  1. 常用键

    • KeyCode.Backspace:退格键 
    • KeyCode.Delete:删除键 
    • KeyCode.Tab:Tab键 
    • KeyCode.Clear:清除键 
    • KeyCode.Return:回车键 
    • KeyCode.Pause:暂停键 
    • KeyCode.Escape:Esc键 
    • KeyCode.Space:空格键 
  2. 字母键

    KeyCode.A 到 KeyCode.Z:字母键A到Z 

  3. 数字键
    • KeyCode.Alpha0 到 KeyCode.Alpha9:主键盘上的数字键0到9 
    • KeyCode.Keypad0 到 KeyCode.Keypad9:数字键盘上的数字键0到9 
  4. 功能键

    KeyCode.F1 到 KeyCode.F12:功能键F1到F12 

  5. 方向键
    • KeyCode.UpArrow:上箭头键 
    • KeyCode.DownArrow:下箭头键 
    • KeyCode.LeftArrow:左箭头键 
    • KeyCode.RightArrow:右箭头键 
  6. 控制键
    • KeyCode.LeftControl:左Ctrl键 
    • KeyCode.RightControl:右Ctrl键 
    • KeyCode.LeftShift:左Shift键 
    • KeyCode.RightShift:右Shift键 
    • KeyCode.LeftAlt:左Alt键 
    • KeyCode.RightAlt:右Alt键 
  7. 鼠标键
    • KeyCode.Mouse0:鼠标左键 
    • KeyCode.Mouse1:鼠标右键 
    • KeyCode.Mouse2:鼠标中键 
  8. 其他特殊键

    • KeyCode.Insert:插入键 
    • KeyCode.Home:Home键 
    • KeyCode.End:End键 
    • KeyCode.PageUp:Page Up键 
    • KeyCode.PageDown:Page Down键 

  代码示例

按下与抬起空格

using system;
using UnityEngine;
public class ctrl_cv :MonoBehaviour    //假设我的类名叫做ctrl_cv,即我的脚本scripts名称
{void Start{//只调用一帧}void Update{//每一帧都调用if(Input.GetKeyDown(KeyCode.Space)){Debug.Log("按下空格")}if(Input.GetKeyUp(KeyCode.Space)){Debug.Log("抬起空格")}if(Input.GetButtonDown("Jump")){Debug.Log("跳跃")          //跳跃键默认为Space空格键,Unity中可在偏好设置中调节}}
} 

 检测方向键来移动游戏对象

using UnityEngine;public class MoveWithArrowKeys : MonoBehaviour
{public float speed = 5f;void Update(){Vector3 move = Vector3.zero;// 使用方向键移动游戏对象if (Input.GetKey(KeyCode.UpArrow)){move += Vector3.forward;}if (Input.GetKey(KeyCode.DownArrow)){move += Vector3.back;}if (Input.GetKey(KeyCode.LeftArrow)){move += Vector3.left;}if (Input.GetKey(KeyCode.RightArrow)){move += Vector3.right;}transform.Translate(move * speed * Time.deltaTime);}
}

同时检测多个键

using UnityEngine;public class MultiKeyInputExample : MonoBehaviour
{void Update(){// 检测玩家是否同时按下了 "A" 键和 "D" 键if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.D)){Debug.Log("同时按下了 A 和 D 键");}}
}

暂停和恢复

using UnityEngine;public class PauseGameExample : MonoBehaviour
{private bool isPaused = false;void Update(){// 按下 Esc 键暂停或恢复游戏if (Input.GetKeyDown(KeyCode.Escape)){isPaused = !isPaused;Time.timeScale = isPaused ? 0 : 1;Debug.Log(isPaused ? "游戏已暂停" : "游戏已恢复");}}
}

通过数字键切换武器

using UnityEngine;public class WeaponSwitchExample : MonoBehaviour
{public GameObject[] weapons;void Update(){// 按下数字键 1 到 3 切换武器if (Input.GetKeyDown(KeyCode.Alpha1)){SwitchWeapon(0);}if (Input.GetKeyDown(KeyCode.Alpha2)){SwitchWeapon(1);}if (Input.GetKeyDown(KeyCode.Alpha3)){SwitchWeapon(2);}}void SwitchWeapon(int index){for (int i = 0; i < weapons.Length; i++){weapons[i].SetActive(i == index);}Debug.Log($"切换到武器 {index + 1}");}
}

注意事项

  • KeyCode 值直接映射到物理键盘键,因此在不同平台和语言设置下,这些键码可能会有所不同。
  • 如果需要处理光标键、功能键等特殊按键,可以使用 Event.keyCode 来获取相应的 KeyCode 值。

通过使用 KeyCode,开发者可以方便地处理键盘输入事件,从而实现各种交互功能。

在不同操作系统(如Windows、MacOS、Linux)上的差异

在Unity中,KeyCode值用于表示键盘上的物理按键。然而,在不同操作系统(如Windows、MacOS、Linux)上,这些键的识别和映射可能会有所不同。

  1. 修饰键的差异:在macOS上,某些修饰键可能无法通过Event.current.keyCode 来识别。这表明在macOS上使用keyCode时需要特别注意修饰键的处理方式。

  2. 控制键的统一性:尽管在不同的操作系统中,控制键的功能有所不同,但在Unity中,它被统一为KeyCode control,分别代表Windows和Linux上的Control键以及macOS上的Command键。

  3. Alt键的差异:在macOS上,Alt键被称为Option键,因此在编写跨平台代码时需要注意这一点。

  4. 字符与键码的区别keyCode表示的是物理按键,而character属性则表示特定字符的输入。例如,在小写和大写字母的情况下,它们都返回相同的keyCode值(即(KeyCode.A),但字符本身会有所不同。

处理特殊键(如Ctrl、Alt、Shift)的事件

1、在Unity中处理特殊键(如Ctrl、Alt、Shift)的事件,可以使用Input.GetKey方法。这个方法可以检测某个键是否被一直按住。例如,如果你想检测用户是否一直按住Ctrl键,你可以这样写:

if (Input.GetKey(KeyCode.Ctrl))
{// Ctrl键一直被按住时执行的代码
}

2、然而,对于特殊组合键(如Ctrl+Shift),你可能需要同时检查多个键的状态。这可以通过组合使用Input.GetKey来实现,例如:

if (Input.GetKey(KeyCode.Ctrl) && Input.GetKey(KeyCode.Shift))
{// Ctrl和Shift键同时被按住时执行的代码
}
 Input.GetKeyDown(KeyCode) 与 Input.GetKeyDown() 的区别

Unity的 Input.GetKeyDown(KeyCode) 方法与 Input.GetKeyDown() 方法之间的区别主要在于它们对按键事件的响应方式。

  1. Input.GetKeyDown(KeyCode) :这个方法用于检测特定按键是否被按下一次。当按键被按下时,该方法会返回 true,但只在按键被按下的那一帧内有效。即使按键一直保持按下状态,该方法也不会再次触发。例如,在射击游戏中,当你按下空格键开枪时,Input.GetKeyDown(KeyCode.Space) 只会在你第一次按下空格键时返回 true,而不会在你继续按住空格键时持续返回 true。

  2. Input.GetKeyDown() :这个方法没有提供具体的参数,因此它实际上是一个语法错误或不存在的方法。在 Unity 中,正确的用法应该是 Input.GetKeyDown(KeyCode),其中 KeyCode 是一个枚举值,代表键盘上的某个按键。

所有类型的键盘输入

Unity中的 KeyCode 并不直接支持所有类型的键盘输入,包括触摸屏和游戏手柄。然而,Unity提供了多种机制来处理不同类型的输入设备。

  1. 键盘输入:Unity原生支持键盘输入,并且可以通过 KeyCode 来识别不同的按键。

  2. 游戏手柄和操纵杆输入:Unity也支持游戏手柄和操纵杆输入。开发者可以在输入管理器 (Input Manager) 中创建虚拟轴和按钮,并通过脚本访问这些设置。

  3. 触摸屏输入:对于移动设备,Unity可以跟踪最多五根手指同时触摸屏幕的状态。开发者可以通过访问 Input.touches  属性数组来获取触摸状态。此外,Unity还提供了一个名为 Input-touchSupported 的属性,用于确定当前设备是否支持触摸输入。

  4. 多平台适配:在进行多平台适配时,Unity的 InputSystem 插件可以帮助开发者在PC端(鼠标与键盘)、手机端(触摸屏)以及主机手柄上同步实现角色移动与跳跃功能。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高考或者单招考试需要考物理这科目

问题&#xff1a;帮忙搜索一下以上学校哪些高考或者单招考试需要考物理这科目的 回答&#xff1a; 根据目前获取的资料&#xff0c;明确提及高考或单招考试需考物理的学校为湖南工业职业技术学院&#xff0c;在部分专业单招时要求选考物理&#xff1b;其他学校暂未发现明确提…

【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})

代理模式 代理模式是一种结构型设计模式&#xff0c;它提供了一种替代访问的方法&#xff0c;即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下&#xff0c;增加额外的功能&#xff0c;如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…

Redis 限流

Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AccessLimit {/*** 限制次数*/int count() default 15;/*** 时间窗口&#xff0c;单位为秒*/int seconds() default 60; }Aspect Component public class AccessLimitAspect {private static …

Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(1)

Android Coil3缩略图、默认占位图placeholder、error加载错误显示&#xff0c;Kotlin&#xff08;1&#xff09; implementation("io.coil-kt.coil3:coil-core:3.1.0")implementation("io.coil-kt.coil3:coil-network-okhttp:3.1.0") <uses-permission …

DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

uniapp引入uview组件库(可以引用多个组件)

第一步安装 npm install uview-ui2.0.31 第二步更新uview npm update uview-ui 第三步在main.js中引入uview组件库 第四步在uni.scss中引入import "uview-ui/theme.scss"样式 第五步在文件中使用组件

Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?

问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…

React 低代码项目:网络请求与问卷基础实现

&#x1f35e;吐司问卷&#xff1a;网络请求与问卷基础实现 Date: February 10, 2025 Log 技术要点&#xff1a; HTTP协议XMLHttpRequest、fetch、axiosmock.js、postmanWebpack devServer 代理、craco.js 扩展 webpackRestful API 开发要点&#xff1a; 搭建 mock 服务 …

安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法

硬件&#xff1a;雷神MIX G139H047LD 工控机 系统&#xff1a;ubuntu20.04 之前运行某项目时&#xff0c;处于正常状态。后来由于要使用海康威视工业相机&#xff08;型号&#xff1a;MV-CA013-21UC&#xff09;&#xff0c;便下载了并安装了该相机的SDK&#xff0c;之后运行…

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用&#xff0c;旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率&#xff0c;还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系&#xff0c;包括感…

浅谈模组-相机鬼像

一&#xff0e;前言 在成像中&#xff0c;我们常常会遇到肉眼观测的真实世界中&#xff0c;不存在的异常光影出现在画面中&#xff0c;并伴有各种颜色&#xff0c;我们将这个物体称为鬼像。某些鬼像可能会对图像产生美感的体验&#xff0c;但是大多数的鬼像都会对图像的质量以…

vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容

1、先安装vmware workstation 17 player&#xff0c;然后再安装Ubuntu Desktop虚拟机&#xff0c;然后再安装vmware tools&#xff0c;具体可以参考如下视频&#xff1a; VMware虚拟机与主机实现文件共享&#xff0c;其实一点也不难_哔哩哔哩_bilibili 2、本人亲自试过了&…

Spring Boot项目中解决跨域问题(四种方式)

目录 一&#xff0c;跨域产生的原因二&#xff0c;什么情况下算跨域三&#xff0c;实际演示四&#xff0c;解决跨域的方法 1&#xff0c;CrossOrigin注解2&#xff0c;添加全局过滤器3&#xff0c;实现WebMvcConfigurer4&#xff0c;Nginx解决跨域5&#xff0c;注意 开发项目…

Oracle JDK、Open JDK zulu下载地址

一、Oracle JDK https://www.oracle.com/java/technologies/downloads/ 刚进去是最新的版本&#xff0c;往下滑可以看到老版本 二、Open JDK的 Azul Zulu https://www.azul.com/downloads/ 直接可以选版本等选项卡

软件测试:1、单元测试

1. 单元测试的基本概念 单元&#xff08;Unit&#xff09;&#xff1a;软件系统的基本组成单位&#xff0c;可以是函数、模块、方法或类。 单元测试&#xff08;Unit Testing&#xff09;&#xff1a;对软件单元进行的测试&#xff0c;验证代码的正确性、规范性、安全性和性能…

Leetcode.264 丑数 II

题目链接 Leetcode.264 丑数 II mid 题目描述 给你一个整数 n n n &#xff0c;请你找出并返回第 n n n 个 丑数 。 丑数 就是质因子只包含 2 2 2、 3 3 3 和 5 5 5 的正整数。 示例1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;12 解释&#xff1a;[1, 2, 3,…

瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

目录 1 环境搭建 2 交叉编译opencv 3 模型训练 4 模型转换 4.1 pt模型转onnx模型 4.2 onnx模型转rknn模型 4.2.1 安装rknn-toolkit 4.2.2 onn转成rknn模型 5 升级npu驱动 6 C++推理源码demo 6.1 原版demo 6.2 增加opencv读取图片的代码 7 交叉编译x264 ffmepg和op…

【Python爬虫(32)】从单飞 to 团战:Python多线程爬虫进化史

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

C#初级教程(1)——C# 与.NET 框架:探索微软平台编程的强大组合

图片来源&#xff1a; https://www.lvhang.site/docs/dotnettimeline 即梦AI - 一站式AI创作平台 一、历史发展脉络 在早期的微软平台编程中&#xff0c;常用的编程语言有 Visual Basic、C、C。到了 20 世纪 90 年代末&#xff0c;Win32 API、MFC&#xff08;Microsoft Found…

【接口封装】——13、登录窗口的标题栏内容设置

解释&#xff1a; 1、封装内容&#xff1a;图标、文本内容、宽度 2、ui.iconLabel&#xff1a;在UI文件中的自定义命名 3、引入头文件&#xff1a;#include<qpixmap.h> 函数定义&#xff1a; #pragma once#include <QWidget> #include "ui_TitleBar.h"cl…