Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity3D在C中的Vector3声明_C#_Unity3d - Fatal编程技术网

C# Unity3D在C中的Vector3声明

C# Unity3D在C中的Vector3声明,c#,unity3d,C#,Unity3d,我来自c/c++,是c语言的新手。 我认为这对c程序员来说可能是一个如此简单和愚蠢的问题 无论如何,在Unity c中, 这两个vector3的声明有什么不同 若案例2也是声明vector3的正确方法,我想我根本不需要使用新操作符。 它冗长而没有效率 有什么意见吗 好吧,案例1可以工作,而案例2实际上是一个不完整的初始化。如果在没有使用new初始化结构的情况下声明结构,则必须手动初始化所有字段,否则不能将结构作为一个整体使用。您的案例是有效的,因为您只使用已初始化的x组件。然而,这将失败:

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

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

若案例2也是声明vector3的正确方法,我想我根本不需要使用新操作符。 它冗长而没有效率


有什么意见吗

好吧,案例1可以工作,而案例2实际上是一个不完整的初始化。如果在没有使用new初始化结构的情况下声明结构,则必须手动初始化所有字段,否则不能将结构作为一个整体使用。您的案例是有效的,因为您只使用已初始化的x组件。然而,这将失败:

Vector3 vectorB;
vectorB.x = 1;
Debug.Log("vectorB: " + vectorB);  // <--CS0165: Use of unassigned local variable
使用构造函数始终确保所有字段都已初始化

还要记住,字段需要初始化。如果您有私有字段并提供属性来访问它们,那么除了使用构造函数之外,您根本无法初始化它们

参考此问题:

一个主要区别是,当您开始处理Unity引擎中Vector3的常见用途时

比如说

transform.position.x = 1;
将不起作用,因为无法修改“UnityEngine.Transform.position”的值类型返回值

transform.position = new Vector3( 1, 0, 0 );
但是,当您为其指定新矢量3时,它将起作用。这与其他变换值相同,因此使用“new”操作符很好,因为它符合标准,并且更能说明您正在做什么

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

通过仅初始化矢量3中的x,如果尝试访问z元素,将遇到此问题;使用可能未指定的字段“z”

<>总结:使用构造函数是符合大多数类的更好的实践,并有助于避免空错误。

这是一个结构,所以你用哪种方式并不重要。在C中使用新的与C++完全不同。我也试图避免它从C++到C。在c语言中,有很多情况下你只需要像初始化一样使用它,这是一个不错的实践。
transform.position = new Vector3( 1, 0, 0 );