【问题标题】:Unity normalize functionunity normalize 函数
【发布时间】:2021-05-05 07:56:44
【问题描述】:

我试图向鼠标的方向射击子弹。但是鼠标离我的枪越近,子弹走的越慢。所以我想我应该标准化我的向量:

Vector3 shootDirection = (mousePosition - shootpoint.transform.position);
 shootDirection.Normalize();

据我所知,在对向量进行归一化后,它的 x 和 y 将遵循勾股定理:

x^2 + y^2 = 1

但是,如果我在规范化后调试矢量坐标,我会得到:

0,1915651 0,1933651
0,5729401 0,4919207

这显然不符合规则。有什么帮助吗?

【问题讨论】:

  • 你是如何打印的?因为 Vector33 个组件 ...
  • debug.log(shootDirection.x + " " + shootDirection.y)
  • 是的,如前所述.. Vector3 有 x,y,z,这些加起来是 1 ...也许你想要 Vector2

标签: c# unity3d game-development


【解决方案1】:

顾名思义,Vector33 个组件 x、y、z。

如果您只对 x 和 y 感兴趣,您应该使用 Vector2 并将其标准化:

var shootDirection = (mousePosition - (Vector2)shootpoint.transform.position). normalized;

【讨论】:

    【解决方案2】:

    你对勾股定理有点正确。归一化意味着结果向量的magnitude 将为1。(https://docs.unity3d.com/ScriptReference/Vector3-magnitude.html)

    我无法从您的示例中看出,但您可能需要先存储 vector3 的值,然后再打印它。也许让你的代码:

    Vector3 shootDirection = (mousePosition - shootpoint.transform.position).normalized;

    然后看看射击方向是否更符合你的预期?

    如果不是,您使用的是什么输入,然后是什么输出?

    【讨论】:

    • 我现在知道了。我应该将vector3更改为vector2。
    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多