【问题标题】:addforce moving diagonally fasteraddforce 对角线移动更快
【发布时间】:2022-01-11 02:16:21
【问题描述】:

我仍然是 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;

}
}

【问题讨论】:

  • 请使用正确的标签!请注意,unityscript 是或更好的是曾经是一种 JavaScript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在已经不推荐使用了!您的代码位于c#
  • 它的速度更快,因为使用简单的数学运算,一个单元 1 的 2 条边的 99 三角形没有斜边 1,因此每次移动它移动得更远。

标签: c# unity3d 2d topdown


【解决方案1】:

发生的情况是GetAxis 的返回值在某些帧上被平滑了。因此,当您 normalize 向量时,它会在一段时间内返回 1 的大小,即使您的输入实际上小于该向量,因为它正在平滑处理。

一般不是

new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical").normalized`

对于您更愿意使用的较小输入,它总是返回 1Vector2.ClampMagnitude

axis = Vector2.ClampMagnitude(new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")), 1f) * Speed;

仅当向量的总幅度 > 1 时才进行钳位

【讨论】:

  • 哦,我明白了,谢谢
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2013-06-05
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多