在我的项目中,我有一个非常简单的任务。
Vector3 v1 = new Vector3(0,0,0);
Vector3 v2 = v1;
v2.x = 10;
Debug.Log(v1);
以上代码打印"0,0,0"
。如果这是Java,则会打印"10,0,0"
,因为v2
会引用v1
。我如何在C#中获得这个?
我希望v1和v2指向同一个对象。这也是团结项目的一部分,但我认为这不相关吗?
答案 0 :(得分:2)
在Unity3d中,Vector3
不是引用类型(类)。它是一个值类型(struct)。这意味着它在这个意义上的行为 更像是Java中的原语。
分配时,您正在复制,而不是引用同一个对象。
您可以做的是使用ref
关键字调用方法,并允许 修改现有的Vector3
:
private static void Vector3Test()
{
Vector3 v1 = new Vector3(0, 0, 0);
ChangeVector(ref v1);
Debug.Log(v1);
}
private static void ChangeVector(ref Vector3 vector)
{
vector.x = 10;
}
这将按预期输出"10,0,0"
。
答案 1 :(得分:1)
这是因为 Vector3 是 Structure
类型而不是 Class
类型。它是一个值类型,而不是类,如Class。因此,当您指定它时,它将复制一个新值,但它们在内存中的地址不相同。