Unity / RIDER:乘法运算的顺序效率低下?

Posted

技术标签:

【中文标题】Unity / RIDER:乘法运算的顺序效率低下?【英文标题】:Unity / RIDER: order of multiplication operations is inefficient? 【发布时间】: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;

我不明白为什么它更好?

谁能帮忙?

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

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

    X*=速度 Y*=速度 Z*=速度 X*=时间 Y*=时间 Z*=时间

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

    规模=速度*时间 X*=比例 Y*=比例 Z*=比例

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

【讨论】:

编译器不能优化这个吗? @BrunoEly 可能可以。 Afaik 看起来还没有完成……但是。如果您不自己动手,这(可能)就是为什么 Rider 会生气的原因。

以上是关于Unity / RIDER:乘法运算的顺序效率低下?的主要内容,如果未能解决你的问题,请参考以下文章

2020-07-21 rider和unity结合

Unity + Rider - 运行测试错误:“未找到此测试的程序集”

Unity使用Rider作为IDE的体验

Mac版Rider加载编译.Net失败,Unity插件安装失败问题

Mac版Rider加载编译.Net失败,Unity插件安装失败问题

将 Rider 与 Unity 一起使用时如何为播放按钮分配快捷方式?