在制作二维角色运动时,通常使用GetAxis方法来获取键盘输入,在Update使用如下代码来控制移动:
public class Object: MonoBehaviour
{
public int speed=3;
void Update()
{
public int speed=3;
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector2 move = new Vector2(h, v);
Vector2 position = transform.position;
position = position + move * speed * Time.fixedDeltaTime;
transform.position = position;
}
}
但是有的时候我们需要人物只能上下左右四个方向移动,同时按猪两个按键,比如左上,上述代码回导致角色斜着移动。这里提供一种高效的思路。
public class Object: MonoBehaviour
{
public int speed=3;
private bool oldv;
void Update()
{
public int speed=3;
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector2 move = new Vector2(h, v);
if (Mathf.Abs(h)> Mathf.Abs(v))
{
v=0;
oldv = false;
}
else if (Mathf.Abs(h) < Mathf.Abs(v))
{
h=0;
oldv = true;
}
else if (oldv)
{
h = 0;
}
else
{
v = 0;
}
Vector2 position = transform.position;
position = position + move * speed * Time.fixedDeltaTime;
transform.position = position;
}
}
代码的思路是这样的:我们需要一个代码来判断同时按住的情况下,那个键是先按下——换言之,那个键按下的持续时间长。我们利用GetAxis的机制,按下键不放,输出的值会随着Update反复调用从0逐渐增加到1。再增加到1前,先按下的键获取到输出值会始终大于后按下键。于是我们只需要额外对等于1的情况做个判断即可,文章用bool oldv来记录1之前过去的判断