首页 > 解决方案 > 为什么vector3 NewPosition =(1,1,1)无效

问题描述

为什么是命令行

vector3 NewPosition = (1,1,1);

是无效的?虽然命令行有效

Vector3 NewPosition = new Vector3(1,1,1); 

为什么使用下面的命令行,不使用“new”这个词就被接受了?不是transform.position也包含(x,y,z)的3个值吗?

Vector3 NewPosition = transform.position

写“Vector3 NewPosition”是不是已经把“NewPosition”识别为“Vector3”类型数据的内存存储区了?就像 int a=1? 我很迷失在发现差异。

标签: c#unity3d

解决方案


在 C# 中,只有某些类型可以在不使用new关键字的情况下通过简单地为它们分配一个值来实例化。

  1. 最突出的是原始类型(例如 int、float);
  2. Structs提供公共领域。(见this question,它也提供了解释)。但是,在这种情况下,您只能使用您分配的字段。

在这些情况下,您可以简单地 A) 声明您的变量,B) 为结构分配一个值/一些值,然后 C) 使用它。

public struct MyStruct
{
    public float X;
    public float Y;
    public float Z;
}

public class Usage
{
    public static void Test()
    {
        MyStruct myStruct;
        myStruct.X = 1;
        myStruct.Y = 2;
        Console.WriteLine(myStruct.X);
        Console.WriteLine(myStruct.Y);
        //Console.WriteLine(myStruct.Z); causes an error, since Z is still unassigned
    }
}

C# 9使new关键字 target-typed 允许省略说明用于创建的明显数据类型。

List<string> myList = new();
// instead of
List<string> myList = new List<string>();

推荐阅读