Unity3D在C#中的Vector3声明

时间:2014-10-31 02:29:03

标签: c# unity3d

我来自c / c ++,c#中的新内容。
我认为对于c#程序员来说这可能是一个如此简单和愚蠢的问题。

无论如何,在Unity c#,
这两个vector3的声明有什么不同。


void TestDecl()
{
    //case 1
    Vector3 vectorA = new Vector3(1, 0, 0);

    //case 2
    Vector3 vectorB;
    vectorB.x = 1;

    //it print "1/1"
    Debug.Log(vectorA.x + "/" + vectorB.x);
}


如果案例2也是宣布vector3的正确方法,我想我根本不需要使用new运算符。
它冗长而且效率不高。


任何评论plz。

2 个答案:

答案 0 :(得分:3)

那么,案例1将起作用,而案例2实际上是一个不完整的初始化。如果声明一个结构而不用new初始化它,则必须手动初始化所有字段,否则不能将结构作为整体使用。您的案例有效,因为您只使用已初始化的x组件。但是这会失败:

Vector3 vectorB;
vectorB.x = 1;
Debug.Log("vectorB: " + vectorB);  // <--CS0165: Use of unassigned local variable

使用构造函数始终确保初始化所有字段。

另请注意,字段需要初始化。如果您有私有字段并提供访问它们的属性,除非使用构造函数,否则无法初始化它们。

请参阅此问题以供参考:
C# Structs: Unassigned local variable?

答案 1 :(得分:1)

主要区别在于您开始在Unity引擎中处理Vector3的常见用途。

例如

transform.position.x = 1;

将无效,因为您无法修改`UnityEngine.Transform.position'的值类型返回值。

transform.position = new Vector3( 1, 0, 0 );
然而,当你为它分配一个新的Vector3时,

会起作用。这与其他变换值相同,因此使用'new'运算符很好,因为它符合标准,更能说明您正在做什么。

使用构造函数是一种更好的实践,因为您可以保证访问正在创建的对象中的基本元素。通过仅初始化类,结构的特定部分,在尝试使用需要自己初始化的元素时可能会出现问题。

通过仅初始化Vector3中的x,如果尝试访问z元素,则会遇到此问题。 “使用可能未分配的字段'z'”

摘要:使用构造函数是更好的做法,因为它符合大多数类,并有助于避免空错误。