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

目录

前言

一、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()使用时要选择合适的场景

  • 23
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这是一个关于 Unity 游戏开发的问题,我可以回答。这段代码的作用是控制游戏对象在水平方向上的移动,其中 mRig 是游戏对象的刚体组件,velocity 是刚体的速度属性,Input.GetAxisRaw("Horizontal") 是获取玩家在水平方向上的输入值,mRig.velocity.y 则保持原有的垂直方向上的速度不变。 ### 回答2: 这行代码是Unity游戏引擎中使用的代码,用于控制游戏对象的速度。mRig是一个Rigidbody2D组件,velocity属性表示物体在世界坐标中的速度。在这行代码中,我们将新的速度赋值给mRig.velocity。 使用new Vector2(Input.GetAxisRaw("Horizontal"), mRig.velocity.y)创建了一个新的二维向量。Input.GetAxisRaw("Horizontal")表示水平轴上输入的值,可以使用键盘的方向键或者手柄的摇杆来控制。值为-1表示向左运动,值为1表示向右运动,值为0表示没有输入。 mRig.velocity.y表示物体当前的垂直速度,将其保持不变。这是为了确保物体在水平方向上移动时,垂直方向上的运动不受影响。 综上所述,这行代码的作用是根据水平输入值来调整物体在水平方向上的速度,并保持垂直方向上的速度不变。通过使用键盘或手柄输入水平方向的值,可以实现游戏对象在水平方向上的运动控制。 ### 回答3: mRig.velocity = new Vector2(Input.GetAxisRaw("Horizontal"), mRig.velocity.y) 的意思是:“将 mRig 的速度设置为一个 2D 向量,其中水平方向的速度由 Input.GetAxisRaw("Horizontal") 控制,垂直方向的速度保持不变。” Input.GetAxisRaw("Horizontal") 是一个用于获取水平输入的函数。当玩家按下左箭头键时,返回的值为 -1,当玩家按下右箭头键时,返回的值为 1,当玩家未按下任何箭头键时,返回的值为 0。 mRig.velocity.y 表示 mRig 在垂直方向上的速度保持不变,即不受到水平输入的影响。 这段代码的作用是,根据玩家在水平方向上的输入来控制 mRig 的水平速度,使其能够实现左右移动的功能,同时保持在垂直方向上的速度不变。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值