当前位置: 首页 > news >正文

Unity(2022.3.38LTS) - 输入

目录

一. 简介

二. 实例

键盘输入:

鼠标输入:

触摸输入:

输入管理器:



一. 简介

在 Unity 中,输入(Input)是用于获取用户输入信息的重要部分。

键盘输入
可以通过 Input.GetKey 、 Input.GetKeyDown 、 Input.GetKeyUp 等方法来检测键盘按键的状态。例如,判断是否按下了“W”键来控制角色向前移动。

鼠标输入
Input.mousePosition 可以获取鼠标在屏幕上的位置。 Input.GetMouseButton 系列方法用于检测鼠标按键的操作。

触摸输入
在支持触摸的设备上,Unity 提供了相应的触摸输入检测方法。

轴输入
可以在 Unity 的输入设置中定义轴(Axes),如水平轴(Horizontal)和垂直轴(Vertical),然后通过 Input.GetAxis 或 Input.GetAxisRaw 来获取轴的值,常用于控制角色的移动或其他连续的操作。

示例应用
在一个射击游戏中,通过鼠标左键点击进行射击,通过键盘的“WASD”键控制角色移动。

在一个跑酷游戏中,利用手机的触摸滑动控制角色的跳跃和转向。

二. 实例

键盘输入

使用 Input.GetKey 方法

void Update()
{if (Input.GetKey(KeyCode.W)){// 执行当 W 键被持续按下时的操作}
}

使用 Input.GetKeyDown 方法

void Update()
{if (Input.GetKeyDown(KeyCode.W)){// 执行当w键被按下时的操作}
}

使用 Input.GetKeyUp 方法

void Update()
{if (Input.GetKeyUp(KeyCode.W)){// 执行当w键被松开时的操作}
}

例如,在一个简单的平台跳跃游戏中:

当持续按下 W 键时,角色向上跳跃;当按下空格键时,角色发动特殊技能;当松开 Esc 键时,暂停游戏。

代码:

using System.ComponentModel.Design;
using UnityEngine;public class InputTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if (Input.GetKeyUp(KeyCode.W)){// 执行当 W 键被松开时的操作Debug.LogError("W被松开");}if (Input.GetKeyDown(KeyCode.W)){// 执行当 W 键被按下时的操作Debug.LogError("W被按下");}if (Input.GetKey(KeyCode.W)){// 执行当 W 键被持续按下时的操作Debug.LogError("W持续按下");}}
}

把这个代码脚本组件,添加到场景内物体上.然后运行游戏,按下键盘的W.

鼠标输入

在 Unity 中,处理鼠标输入有多种方式。

获取鼠标位置
可以使用 Input.mousePosition 来获取鼠标在屏幕上的位置。它返回的是一个 Vector3 类型的值,其中 x 和 y 分别表示鼠标在屏幕上的水平和垂直坐标。

检测鼠标按键按下

  • Input.GetMouseButton(0) :检测鼠标左键是否按下。
  • Input.GetMouseButton(1) :检测鼠标右键是否按下。
  • Input.GetMouseButton(2) :检测鼠标中键是否按下。

检测鼠标按键按下的瞬间

  • Input.GetMouseButtonDown(0) :检测鼠标左键按下的瞬间。
  • Input.GetMouseButtonDown(1) :检测鼠标右键按下的瞬间。
  • Input.GetMouseButtonDown(2) :检测鼠标中键按下的瞬间。

检测鼠标按键松开

  • Input.GetMouseButtonUp(0) :检测鼠标左键松开。
  • Input.GetMouseButtonUp(1) :检测鼠标右键松开。
  • Input.GetMouseButtonUp(2) :检测鼠标中键松开。

以下是一个简单的示例代码,用于在鼠标左键按下时打印信息:

using System.ComponentModel.Design;
using UnityEngine;public class InputTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){Debug.Log("鼠标左键按下位置" + Input.mousePosition);}}
}

触摸输入:

在 Unity 中处理触摸输入,需要考虑移动端设备(如手机和平板)的触摸操作。

基本的触摸检测方法

Input.touches 数组包含了当前所有触摸的信息。每个 Touch 对象具有位置、阶段(如开始、移动、结束)等属性。

示例代码

using UnityEngine;public class TouchInputExample : MonoBehaviour
{void Update(){if (Input.touchCount > 0){Touch touch = Input.GetTouch(0);if (touch.phase == TouchPhase.Began){Debug.Log("触摸开始");}else if (touch.phase == TouchPhase.Moved){Debug.Log("正在触摸移动");}else if (touch.phase == TouchPhase.Ended){Debug.Log("触摸结束");}}}
}

多点触摸

如果需要处理多点触摸,可以遍历 Input.touches 数组获取多个触摸的信息。

在游戏中的应用

例如在一个跑酷游戏中,玩家通过手指在屏幕上滑动来控制角色的左右移动和跳跃。

或者在一个策略游戏中,通过手指的缩放操作来控制地图的缩放。

输入管理器:

在 Unity 中,输入管理器(Input Manager)是用于配置和管理各种输入设备输入的工具。

主要功能

  1. 定义输入轴(Axes):您可以创建水平轴(Horizontal)、垂直轴(Vertical)等,并为其指定对应的按键或鼠标操作。
  2. 灵敏度设置:调整输入轴的灵敏度,以控制输入的响应速度。
  3. 反转设置:例如,反转某个轴的输入方向。

配置输入
在 Unity 编辑器的菜单栏中,选择 “Edit” -> “Project Settings” -> “Input” 来打开输入管理器。

应用示例
假设您正在制作一个赛车游戏,您可以创建一个 “Acceleration” 轴,并将其设置为对应键盘的 “W” 和 “S” 键,或者手柄的某个摇杆操作,然后在脚本中通过 Input.GetAxis("Acceleration") 来获取玩家的加速输入值。

优点

  1. 统一管理:方便集中配置和查看所有的输入设置。
  2. 跨平台适配:可以为不同的平台(如 PC、移动设备、主机)进行针对性的输入配置。

属性:功能:
Name用于从脚本中检查此轴的字符串名称。
Descriptive Name独立构建的 Configuration 对话框的 Input 选项卡中显示的正值名称。
Descriptive Negative Name独立构建的 Configuration 对话框的 Input 选项卡中显示的负值名称。
Negative Button用于向负方向推动轴的按钮。
Positive Button用于向正方向推动轴的按钮。
Alt Negative Button用于向负方向推动轴的替代按钮。
Alt Positive Button用于向正方向推动轴的替代按钮。
Gravity未按下按钮的情况下,轴下降到中性点的速度(以单位/秒表示)。
Dead模拟盲区的大小。此范围内的所有模拟设备值都会映射到中性点。
Sensitivity轴向目标值移动的速度(以单位/秒表示)。仅用于数字设备。
Snap如果启用,按下相反方向的按钮时,轴值将重置为零。
Invert如果启用,则负按钮 (Negative Buttons) 将提供正值,反之亦然。
Type将控制此轴的输入类型。
将控制此轴的已连接设备的轴。
Joy Num将控制此轴的已连接游戏杆。
    void Update(){// 获取水平轴的值(例如:A 键和 D 键,或左摇杆左右移动)float horizontal = Input.GetAxis("Horizontal");// 获取垂直轴的值(例如:W 键和 S 键,或左摇杆上下移动)float vertical = Input.GetAxis("Vertical");Debug.Log("水平轴输入: " + horizontal);Debug.Log("垂直轴输入: " + vertical);}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 企业电子招投标采购系统——功能模块功能描述+数字化采购管理 采购招投标
  • 【C++ 第十章】继承
  • php防止页面重复刷新或者重复提交
  • Excel表格使用IF条件判断
  • 介绍一下react中虚拟dom和diff算法
  • 第N5周:Pytorch文本分类入门
  • 如何在香港云服务器上优化网站性能?
  • 基于车联网大数据平台的用户驾驶习惯行为画像分析
  • AI学习记录 - 自注意力机制之权重矩阵和查询向量V矩阵的计算方式的补充
  • RCE绕过练习
  • 工厂模式和策略模式区别以及使用
  • STM32第十二节(中级篇):串口通信(第二节)——串口固件库函数以及串口发送和接收代码讲解
  • Nginx与Tomcat的区别
  • 计算机网络部分基础知识
  • 安全无忧!Windows7全补丁旗舰版:集成所有补丁!
  • codis proxy处理流程
  • ES6核心特性
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Hibernate最全面试题
  • JavaScript函数式编程(一)
  • js
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Laravel核心解读--Facades
  • MySQL用户中的%到底包不包括localhost?
  • sessionStorage和localStorage
  • Web标准制定过程
  • Web设计流程优化:网页效果图设计新思路
  • zookeeper系列(七)实战分布式命名服务
  • 服务器从安装到部署全过程(二)
  • 今年的LC3大会没了?
  • 力扣(LeetCode)22
  • 马上搞懂 GeoJSON
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 山寨一个 Promise
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • ​520就是要宠粉,你的心头书我买单
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #VERDI# 关于如何查看FSM状态机的方法
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (SpringBoot)第七章:SpringBoot日志文件
  • (WSI分类)WSI分类文献小综述 2024
  • (备份) esp32 GPIO
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)c52学习之旅-独立按键
  • (六)激光线扫描-三维重建
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转载)(官方)UE4--图像编程----着色器开发
  • ******之网络***——物理***
  • .dwp和.webpart的区别
  • .Net Core 中间件与过滤器