Unity2D input.GetAxis()与input.GetAxisRaw()的相同点、区别以及简单用法

2023-10-28

目录

前言

一、input.GetAxis()与input.GetAxisRaw()的相同点、区别

二、简单用法

1.input.GetAxis()

2.input.GetAxisRaw()

三、总结


前言

input.GetAxis()与input.GetAxisRaw()是unity中的两个函数,他们长相相似,注定了他们的作用大同小异。这里我们就简单的聊聊他们。


一、input.GetAxis()input.GetAxisRaw()的相同点、区别

input.GetAxis()input.GetAxisRaw()两个函数的传入值都为string类型,返回值都为float类型

传入参数有两种:

Vertical:获得垂直方向的值。

Horizontal:获得水平方向的值。

这里制作了一个图方便理解:

 那么两者的区别是什么呢?

input.GetAxis()的返回值是[-1, 1],拥有平滑过渡功能

input.GetAxisRaw()的返回值是{-1,0,1}

补充一下:input.GetAxis()的值是根据你 按键时间 以及 按键顺序 决定。例如当你一直按住 “A键” ,input.GetAxis()的返回值会随时间从 0 到 1 ,但是中途如果按下了 “D键”,那么就会保持按下 “D键”时的返回值。

二、简单用法

1.input.GetAxis()

举个例子:简单的物体运动

代码如下(示例)

//获取物体组件
public Rigidbody2D rb;
//定义水平运动的速度
public float runspeed;

//物体运动
void Move()
    {
        //记录运动方向值
        float move = Input.GetAxis("Horizontal");

        //以给定速度朝指定方向运动
        rb.velocity = new Vector2(move * runspeed * Time.deltaTime, rb.velocity.y);
}

代码中如果将input.GetAxis()替换成input.GetAxisRaw(),会出现物体弹射起步的效果(没有过渡感),这里其实是因为input.GetAxisRaw()只有当我们未控制时值为0,当我们控制移动后则只存在-1,1两种情况,缺少了加速的过程。

2.input.GetAxisRaw()

举个例子:简单的物体运动时物体的朝向方向变动(在上一个例子的基础上)

代码如下(示例)

//获取物体组件
public Rigidbody2D rb;
//定义水平运动的速度
public float runspeed;

//物体运动
void Move()
    {
        //记录运动方向值
        float move = Input.GetAxis("Horizontal");
        if (move != 0)
        {
            //以给定速度朝指定方向运动
            rb.velocity = new Vector2(move * runspeed * Time.deltaTime, rb.velocity.y);
        }
    
        //记录运动方向值
        float direction = Input.GetAxisRaw("Horizontal"); 
        if (direction != 0)
        {
            //可以达到变换运动方向时立即变换物体贴图朝向(实时性)
            transform.localScale = new Vector3(direction, 1, 1);
        }
}

在我们2D项目中旋转角色方向的时候可以选用 Input.GetAxisRaw() ,因为我们希望它是可以完整反转,而不是翻转一半。

三、总结

input.GetAxis()与input.GetAxisRaw()使用时要选择合适的场景

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity2D input.GetAxis()与input.GetAxisRaw()的相同点、区别以及简单用法 的相关文章

  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐