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:乘法运算的顺序效率低下?的主要内容,如果未能解决你的问题,请参考以下文章
Unity + Rider - 运行测试错误:“未找到此测试的程序集”
Mac版Rider加载编译.Net失败,Unity插件安装失败问题