Unity3d c# - Vector3 作为默认参数

Unity3d c# - Vector3 as default parameter

我们如何添加 Vector3 作为方法的默认参数?例如:

Void SpawnCube(Vector3 p = new Vector3(0,0,0)){...}

我刚刚尝试了关于我遇到错误的行:

Expression being assigned to optional parameter `p' must be a constant or default value

我想自定义一个函数来生成一些 game objects,如果我没有提供 transform.position,它将转到 (0,0,0)

在一般情况下,您不能。默认参数有些限制。参见 this MSDN page

Each optional parameter has a default value as part of its definition. If no argument is sent for that parameter, the default value is used. A default value must be one of the following types of expressions:

  • a constant expression;

  • an expression of the form new ValType(), where ValType is a value type, such as an enum or a struct;

  • an expression of the form default(ValType), where ValType is a value type.

然而,在您发布的特定情况下,我怀疑 new Vector3() 将等同于 new Vector3(0,0,0),因此您可以改用它。

如果您需要非零默认值,您可以使用 method overloading

我知道这已经得到解答,但我只想添加其他方法来做到这一点。 Vector3? pVector3 bar = default(Vector3) 应该这样做。

public void SpawnCube(Vector3? p = null)
{
    if (p == null)
    {
        p = Vector3.zero; //Set your default value here (0,0,0)
    }

}

正如指出的那样,

要使用 p,您必须使用 p.Value 或使用 ((Vector3)p).

p 转换回 Vector3

例如,要使用 p 变量、p.Value.x((Vector3)p).x.

从该函数访问 x

public void SpawnCube(Vector3 bar = default(Vector3))
{
    //it will make default value to be 0,0,0
}

嗨,我刚刚 运行 解决了这个问题,我需要 Vector3 是可选的。但它会一直说我需要一个编译时间常数。为了解决这个问题,我使用了这个:

    public void myMethod(Vector3 optionalVector3 = new Vector3())
    {
        //you method code here...
    }

作为解决方法您可以重载方法。

取而代之

void SpawnCube(Vector3 p = new Vector3(0,0,0)){...}

使用这个

void SpawnCube(Vector3 p)
{
  //Implementation
}

//overloaded method without parameter which calls SpawnCube with given default parameter
void SpawnCube()
{
  SpawnCube(new Vector3(0,0,0));
}

您已经获得了 SpawnCube 方法体的一个实现,您可以在有或没有参数的情况下使用它:)