目录
一、input.GetAxis()与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()使用时要选择合适的场景