Far*_*her 3 c# performance unity-game-engine
Vector3 v = new Vector3(1, 1, 1);
v.x = 5;
Run Code Online (Sandbox Code Playgroud)
我为什么不能这样做?我要做v = new Vector3(5, v.y, v.z);
我认为这背后的原因是性能。但是我无法猜测为什么这是必要的。
我撒了谎,这确实有效。Vector3我一直在使用的I transform.position总是返回自身的副本,这就是为什么在其上设置值不起作用的原因。某种Unity魔术。
小智 5
我撒了谎,这确实有效。我一直在使用transform.position的Vector3总是返回其自身的副本,这就是为什么在其上设置值不起作用的原因。某种Unity魔术。
实际上,原因是Vector3是结构。在C#中,结构是值类型。因此,它们总是按值返回,因为类可以通过引用传递/返回。包装结构成员的所有属性(例如Rect,Vector2等)的行为都相同。
由于这是一个属性,因此get方法在调用它时返回结构位置的副本值。您将始终需要将其分配给本地引用,对其进行修改然后重新分配:
Vector3 t_Pos = transform.position;
t_Pos.Normalize();
transform.position = t_Pos;
Run Code Online (Sandbox Code Playgroud)
(免责声明:我不是 Unity 开发人员)
我看到的每个示例都初始化了一个新的Vector3..,这意味着这些属性在 Unity 中可能是只读的(它们不在 XNA 中)。
但是,文档显示了Set()的方法Vector3。所以你可以(显然)这样做:
v.Set(5, v.y, v.z);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4819 次 |
| 最近记录: |