【问题标题】:Unity / RIDER: order of multiplication operations is inefficient?Unity / RIDER:乘法运算的顺序效率低下?
【发布时间】:2019-09-14 08:35:43
【问题描述】:

Rider IDE 通知我以下内容效率低下

        transform.Translate(moveDirection * speed * Time.smoothDeltaTime);

想改写成

        transform.Translate(Time.smoothDeltaTime * speed * moveDirection);

有人知道为什么吗?

都是乘法,有什么区别?

在某些情况下,这里是 speed 和 moveDirection 的值

private Vector3 moveDirection = Vector3.left;

private float speed = 2.5f;

我不明白为什么它更好?

谁能帮忙?

谢谢

【问题讨论】:

    标签: c# unity3d rider


    【解决方案1】:

    Vector3 有 3 个组件。 X、Y 和 Z。

    将 Vector3 乘以一个值,就是将分量乘以该值。

    由于向量旁边有 2 个值,因此顺序与结果无关,而与操作次数有关。

    那是因为向量优先会导致 3+3=6 次乘法:

    1. X*=速度
    2. Y*=速度
    3. Z*=速度
    4. X*=时间
    5. Y*=时间
    6. Z*=时间

    虽然最后向量将是 1+3=4 次乘法:

    1. 规模=速度*时间
    2. X*=比例
    3. Y*=比例
    4. Z*=比例

    不管怎样,这只是 Rider 对性能的偏执,而这种程度的优化虽然总是受欢迎的,但在大多数情况下绝对不需要。

    【讨论】:

    • 编译器不能优化这个吗?
    • @BrunoEly 可能可以。 Afaik 看起来还没有完成……但是。如果您不自己动手,这(可能)就是为什么 Rider 会生气的原因。
    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 2016-06-28
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2010-11-27
    相关资源
    最近更新 更多