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

Unity:平滑输入(Input.GetAxis)

目录

1.为什么需要Input.GetAxis?

2. Input.GetAxis的基本功能

3. Input.GetAxis的工作原理

4. 常用参数和设置

5. 代码示例:用GetAxis控制角色移动

6. 与Input.GetAxisRaw的区别

7.如何优化GetAxis?

1.为什么需要Input.GetAxis?

Input.GetAxis的根本需求是:

提供平滑的输入:让玩家的操作更自然,比如按下A键时角色慢慢加速到最大速度,而不是瞬间跳到最大速度。 

支持模拟输入:不仅适用于键盘,还适用于游戏手柄的摇杆,这些设备通常返回一个连续的值(-1到1)。 

从本质上讲,Input.GetAxis是为了解决“如何让输入更平滑、更自然”这个问题。 

2. Input.GetAxis的基本功能

Input.GetAxis是一个Unity内置方法,用于获取输入轴的值。它的返回值通常在-1到1之间,表示输入的强度和方向。常见的输入轴包括:

  • "Horizontal":水平方向(比如A/D键或左/右箭头,用于左右移动)。

  • "Vertical":垂直方向(比如W/S键或上/下箭头,用于前后移动)。

  • 自定义轴:你可以在Unity的Input Manager中定义新的轴。

通俗解释:想象有一个滑块,玩家可以通过按键或摇杆控制滑块的位置。当玩家按下A键时,滑块向左移动(返回-1);按下D键时,滑块向右移动(返回1);没按键时,滑块在中间(返回0)。GetAxis就是告诉你滑块当前的位置。

3. Input.GetAxis的工作原理

(1) 输入来源

Input.GetAxis会从Unity的输入管理系统(Input Manager)中读取数据。输入管理系统默认定义了一些轴,比如:

  • "Horizontal"默认绑定了A/D键和左/右箭头。

  • "Vertical"默认绑定了W/S键和上/下箭头。

你可以在Unity编辑器中(菜单:Edit > Project Settings > Input)查看或修改这些设置。比如,你可以让"Horizontal"不仅响应A/D,还响应游戏手柄的左摇杆。

(2) 返回值

Input.GetAxis返回一个浮点数(float),范围通常是-1到1:

  • -1:输入完全向负方向(比如按A键或摇杆全左)。

  • 0:没有输入或输入在中立位置(比如没按键或摇杆没动)。

  • 1:输入完全向正方向(比如按D键或摇杆全右)。

但它的特别之处在于,它不是简单的“0或1”,而是平滑过渡。比如,当你按下A键时,值不会瞬间跳到-1,而是可能逐渐接近-1(取决于设置的“Sensitivity”和“Gravity”参数)。

4. 常用参数和设置

当你调用Input.GetAxis("Horizontal")时,Unity会根据Input Manager中的设置计算返回值。以下是几个关键参数(通俗解释):

  • Sensitivity(敏感度):决定输入响应速度。比如,敏感度高,玩家按下A键后,值很快达到-1;敏感度低,值变化较慢。

  • Gravity(重力):决定输入返回到0的速度。比如,松开A键后,值会慢慢回到0,而不是瞬间跳回。

  • Dead(死区):定义输入的“无效区域”。比如,摇杆稍微动一下不响应,只有超过一定阈值才开始生效。

这些参数让GetAxis更适合模拟输入设备(如游戏手柄),也让键盘输入更平滑。

5. 代码示例:用GetAxis控制角色移动

假设你想让一个2D角色根据玩家的输入左右移动:

using UnityEngine;public class PlayerMovement : MonoBehaviour {[SerializeField] private float moveSpeed = 5f; // 移动速度void Update() {// 获取水平输入(A/D或左/右箭头)float horizontalInput = Input.GetAxis("Horizontal");// 根据输入移动角色transform.Translate(Vector3.right * horizontalInput * moveSpeed * Time.deltaTime);}
}

解释:

  • Input.GetAxis("Horizontal")返回-1到1的值:

    • 按A键或向左:返回-1,角色向左移动。

    • 按D键或向右:返回1,角色向右移动。

    • 不按键:返回0,角色停止。

  • moveSpeed控制移动速度,Time.deltaTime确保移动与帧率无关。

难点解析:相比Input.GetKey,GetAxis的优势是平滑性。比如,玩家按住A键,角色不会瞬间跳到最大速度,而是逐渐加速(如果设置了Sensitivity和Gravity)。这让游戏感觉更自然,尤其是对模拟设备(如手柄)或需要渐进控制的场景。

6. 与Input.GetAxisRaw的区别

Unity还提供了一个类似的方法:Input.GetAxisRaw。两者的区别在于:

  • GetAxis:返回平滑的值,会应用Sensitivity和Gravity,适合需要渐进变化的场景。

  • GetAxisRaw:返回原始值(-1、0、1),没有平滑效果,适合需要即时响应的场景。

通俗比喻:GetAxis像是用遥控器慢慢调亮灯,灯会逐渐变亮;GetAxisRaw像是直接开关灯,瞬间从暗到亮。

代码对比:

float smoothValue = Input.GetAxis("Horizontal"); // 平滑值,可能返回-0.5、-0.8等
float rawValue = Input.GetAxisRaw("Horizontal"); // 原始值,只返回-1、0或1

通常,GetAxis更常用,因为它更适合游戏的自然控制。 

7.如何优化GetAxis?

有些开发者可能会遇到问题,比如输入响应太慢或太快。以下是解决方法:

  • 调整Input Manager设置:

    • 增加Sensitivity,让输入更快响应。

    • 减少Gravity,让输入返回到0的速度变慢。

    • 设置Dead,排除微小输入的误触。

  • 结合Time.deltaTime:确保移动或旋转速度与帧率无关,避免快慢帧率导致的抖动。

  • 测试不同设备:GetAxis同时支持键盘和手柄,确保两者体验一致。

 

相关文章:

Unity:平滑输入(Input.GetAxis)

目录 1.为什么需要Input.GetAxis? 2. Input.GetAxis的基本功能 3. Input.GetAxis的工作原理 4. 常用参数和设置 5. 代码示例:用GetAxis控制角色移动 6. 与Input.GetAxisRaw的区别 7.如何优化GetAxis? 1.为什么需要Input.GetAxis&…...

【AI学习】MCP的简单快速理解

最近,AI界最火热的恐怕就是MCP了。作为一个新的知识点,学习的开始,先摘录一些信息,从发展历程、通俗介绍到具体案例,这样可以快速理解MCP。 MCP发展历程 来自i陆三金 Anthropic 开发者关系负责人 Alex Albert&#…...

单机快速部署开源、免费的分布式任务调度系统——DolphinScheduler

看了DolphinScheduler的介绍,不知道有没有引起你的兴趣,有没有想要上手体验一番呢。本文则主要为大家介绍DolphinScheduler的单机部署方式,方便大家快速体验。 环境准备 需要Java环境,这是一个老生常谈的问题,关于Ja…...

Vue3命名规范指南

在 Vue 3 中,遵循一致的命名规范可以提高代码的可读性和维护性。以下是常见的命名规范和实践建议: 1. 组件命名 PascalCase(大驼峰式) 单文件组件(.vue 文件)和组件引用时推荐使用 PascalCase,便…...

【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器

今天我们将使用FastAPI来构建 MCP 服务器,Anthropic 推出的这个MCP 协议,目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,可轻松处理高并发请求,尤…...

springcloud configClient获取configServer信息失败导致启动configClient注入失败报错解决

目录 一、问题现象 二、解决方案 三、运行结果 四、代码地址 一、问题现象 springcloud configClient获取configServer信息失败导致启动configClient注入失败 报错堆栈信息 org.springframework.beans.factory.BeanCreationException: Error creating bean with name scop…...

HarmonyOS-ArkUI Rcp模块类关系梳理

前言 本文重点解决的是,按照官网学习路径学习Tcp模块内容时,越看越混乱的问题。仿照官网案例,书写代码时,产生的各种疑惑。比如,类与类之间的关系,各种配置信息究竟有多少,为什么越写越混乱。那…...

26考研——线性表_ 线性表的链式表示_双循环链表(2)

408答疑 文章目录 三、 线性表的链式表示双循环链表单链表与双链表的比较单链表的特点双链表的特点 双链表上基本操作的实现双链表的插入操作双链表的删除操作 双链表的代码实操定义结点创建一个结点带头结点的双链表初始化创建双链表打印双链表查找结点插入结点在指定节点后插…...

大模型如何引爆餐饮与电商行业变革

大模型如何引爆餐饮与电商行业变革? 一、时代背景:大模型重构产业逻辑的底层动力 1. 技术跃迁催生效率革命 2025年,大模型技术迎来"普惠临界点"。李开复在中关村论坛指出,大模型推理成本每年降低10倍,使得…...

基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,考研成绩查询管理事务现在已经成为社会关注的重要内容,因此运用互联网技术来提高考研成绩…...

es自定义ik分词器中文词库实现热更新

基于web地址的方式实现ik分词热更新。 操作系统:win 11 es version:8.6.2 ik version:8.6.2 1、创建web服务,并提供ik查询词库接口 编写分词http url代码,返回自定义分词内容分词词库数据来自业务需求,存…...

OpenStack 卷虚拟机跨租户迁移方案

目标:迁移租户A的卷虚机到租户B 场景:使用卷虚拟机,租户a和b使用相同网络 租户A的操作: 1.记录虚拟机的ip地址,Mac信息, nova interface-list neutron port-show 2.对虚拟机进行关机操作,将…...

添加购物车功能

业务需求: 用户提交三个字段,服务端根据提交的字段判断是菜品还是套餐,根据菜品或者套餐添加购物车表中。 代码实现 RestController Slf4j RequestMapping("/user/shoppingCart") public class ShoppingCartController {Autowired…...

Logo语言的系统监控

Logo语言的系统监控 引言 在信息技术飞速发展的时代,系统监控成为了确保计算机系统和网络平稳运行的重要手段。系统监控不仅可以实时跟踪系统的性能、资源使用情况和安全风险等,还能够在出现问题时及时发出警报,从而避免潜在的故障和损失。…...

Scheme语言的算法

Scheme语言的算法探索 引言 Scheme是一种以表达式为基础的编程语言,属于Lisp家族,因其简洁、灵活的语法而受到广泛关注。Scheme不仅适合教学,还被用于实际应用开发和研究。本文将深入探讨Scheme语言的算法,包括其基本特性、常用…...

Python爬虫第2节-网页基础和爬虫基本原理

目录 一、网页基础 1.1 网页的组成 1.2 网页的结构 1.3 节点树及节点间的关系 1.4 选择器 二、爬虫的基本原理 2.1 爬虫概述 2.2 能抓怎样的数据 2.3 JavaScript 渲染页面 一、网页基础 使用浏览器访问网站时,我们会看到各式各样的页面。你是否思考过&…...

阿里巴巴langengine二次开发大模型平台

阿里巴巴LangEngine开源了!支撑亿级网关规模的高可用Java原生AI应用开发框架 - Leepy - 博客园 阿里国际AI应用搭建平台建设之路(上) - 框架篇 基于java二次开发 目前Spring ai、spring ai alibaba 都是java版本的二次基础能力 重要的是前端工作流 如何与 服务端的…...

深度学习中的 Batch 机制:从理论到实践的全方位解析

一、Batch 的起源与核心概念 1.1 批量的中文译名解析 Batch 在深度学习领域标准翻译为"批量"或"批次",指代一次性输入神经网络进行处理的样本集合。这一概念源自统计学中的批量处理思想,在计算机视觉先驱者Yann LeCun于1989年提出…...

【网络协议】三次握手与四次挥手

例如我们使用MobaXterm登录服务器的时候,基于TCP协议的之间是如何进行通信的? 使用工具:wireshark抓取传输层TCP协议 三次握手 mobaxterm:登录服务器触发三次握手 wireshark过滤分析 ip.addr 192.168.3.239 192.168.3.239登录…...

请求被中止: 未能创建 SSL/TLS 安全通道。

需要安装vs2019社区办,下载VisualStudioSetup.exe后,报无法从"https://aka,ms/vs/16/release/channel"下载通道清单错误,接着打开%temp%目录下的最新日志,发现日志里报: [27d4:000f][2025-04-04T21:15:43] …...

JS API

const变量优先 即对象、数组等引用类型数据可以用const声明 API作用和分类 DOM (ducument object model) 操作网页内容即HTML标签的 树状模型 HTML中标签 JS中对象 最大对象 document 其次大 html 以此类推 获取DOM对象 CSS 中 使用选择器 JS 中 选多个 时代的眼泪 修…...

“一路有你”公益行携手《东方星动》走进湖南岳阳岑川镇中心小学

2025年4月2日,“一路有你”公益行携手《东方星动》走进湖南岳阳岑川镇,一场充满爱与温暖的捐赠仪式在岑川镇中心小学隆重举行。这是一场跨越千里的爱心捐赠,也是一场别开生面的国防教育,更是一场赋能提质的文化盛宴。 岑川镇地处湘…...

vue组件开发:什么是VUE组件?

什么是VUE组件 在我们实际开发过程中你也许会发现有很多代码是重复的,它们可能是一个按钮、一个表单、一个列表等等,其中最为显著的应该是列表。 以CSDN的首页为例: 上述截图中的文章列表可能会在多处出现,比如此截图是精选博客…...

仿小红书社交源码+及时通讯聊天软件APP源码

多端支持,数据互通 本程序支持H5、小程序、安卓、iOS四端运行,共用同一套后台管理系统,确保数据同步,用户可在不同设备上无缝切换,实现真正的多端互通。 技术架构 前端技术:Vue2、uni-app、HTML、CSS、Jav…...

Libevent TCP开发指南

一、概念 Libevent 提供了高效的 TCP 网络编程接口,使开发者能够轻松构建高性能的 TCP 服务器和客户端。本指南将详细介绍如何使用 Libevent 进行 TCP 网络开发。 核心组件 事件基 (event_base) - 事件处理的核心结构 事件 (event) - 表示单个事件 缓冲区事件 (bufferevent)…...

Objective-C语言的集合

Objective-C语言的集合 引言 Objective-C是一种面向对象的编程语言,主要用于苹果的macOS和iOS系统应用程序的开发。作为C语言的一个超集,Objective-C继承了C语言的优雅,同时又添加了许多强大的特性,使其适合于大型项目的开发。在…...

网络安全与防护策略

随着互联网的普及与信息化程度的不断加深,网络安全问题已成为全球关注的焦点。从个人用户到大规模的企业系统,网络安全威胁的不断演变和升级已成为每个人和组织不可忽视的挑战。无论是恶意软件、钓鱼攻击,还是数据泄露、拒绝服务攻击&#xf…...

OpenCV:计算机视觉的强大开源库

文章目录 引言一、什么是OpenCV?1.OpenCV的核心特点 二、OpenCV的主要功能模块1. 核心功能(Core Functionality)2. 图像处理(Image Processing)3. 特征检测与描述(Features2D)4. 目标检测&#…...

Java基础:面向对象进阶(二)

01-static static修饰成员方法 static注意事项(3种) static应用知识:代码块 static应用知识:单列模式 02-面向对象三大特征之二:继承 什么是继承? 使用继承有啥好处? 权限修饰符 单继承、Object类 方法重…...

【MVP 和 MVVM 相比 MVC 有哪些优化点?】

MVP 和 MVVM 相比 MVC 的优化及原因 1. MVC 的痛点 在传统 MVC 模式中: 视图(View)和模型(Model)直接交互:View 可能直接监听 Model 的变化(如观察者模式),导致耦合。…...