我还是Unity的新手,正在尝试制作一款自上而下的2D游戏,但我一直坚持使用对角移动时移动更快的移动脚本。当我在";轴";vector2并开始移动时,玩家保持移动一段时间,然后当我停止按下任何键时突然停止移动,当我移除标准化时,移动会恢复正常,玩家停止缓慢而完美地移动,但当我对角移动时,移动速度会更快。
这是我的代码:
{
Rigidbody2D rb;
Vector2 axis;
public float Speed = 400;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
movement();
}
void movement()
{
axis = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")).normlized * Speed;
rb.AddForce(axis, ForceMode2D.Force);
rb.drag = 60;
}
}
结果是GetAxis
的返回值在某些帧上被平滑。因此,当你normalize
向量时,它会在一段时间内返回1
的大小,尽管你的输入实际上比它小,因为它是平滑的。
一般而言,代替
new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical").normalized`
它总是返回幅度1,对于较小的输入,您更希望使用Vector2.ClampMagnitude
axis = Vector2.ClampMagnitude(new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")), 1f) * Speed;
其仅在矢量具有总幅度>1