目录
一、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}
二、简单用法
1.input.GetAxis()
举个例子:简单的物体运动
代码如下(示例)
//获取物体组件
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);
}
}
代码中如果将input.GetAxis()替换成input.GetAxisRaw(),会出现物体控制停止时依旧朝原方向运动一段距离的情况。我的理解是因为input.GetAxisRaw()取值是-1, 0,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);
}
}
代码中如果将input.GetAxisRaw()替换成input.GetAxis(),会出现物体运动时变换方向时自己的素材没有及时随着方向的改变而改变,而产生的了一段没必要的动画,正是因为input.GetAxis()拥有平滑过渡功能,所以他并不能胜任这项工作。
三、总结
input.GetAxis()与input.GetAxisRaw()使用时要选择合适的场景