Unity3d c# - Vector3作为默认参数

soo*_*oon 10 c# default unity-game-engine

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

Void SpawnCube(Vector3 p = new Vector3(0,0,0)){...}
Run Code Online (Sandbox Code Playgroud)

我刚试过这条线路我得到了一个错误:

分配给可选参数"p"的表达式必须是常量或默认值

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

Jas*_*ins 12

你不能.默认参数有些限制.请参阅此MSDN页面.

每个可选参数都有一个默认值作为其定义的一部分.如果没有为该参数发送参数,则使用默认值.默认值必须是以下类型的表达式之一:

  • 一个恒定的表达;

  • 表达式为新的ValType(),其中ValType是值类型,例如枚举或结构;

  • 形式为default(ValType)的表达式,其中ValType是值类型.

然而,在您发布的特定情况下,我怀疑new Vector3()它将是等效的new Vector3(0,0,0),因此您可以使用它.

如果您需要非零默认值,则可以使用方法重载.

  • 你可以。请参阅下面我的回答。/sf/answers/3319465271/ (2认同)
  • 我上面的原始答案涵盖了使用默认构造函数...... (2认同)

Pro*_*mer 9

我知道这已经回答了,但我只是想添加其他方法来做到这一点.Vector3? p并且Vector3 bar = default(Vector3)应该这样做.

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

}
Run Code Online (Sandbox Code Playgroud)

正如htmlcoderexe指出的那样,

要使用p,你必须使用p.Value或施放pVector3((Vector3)p).

例如,要使用变量,,或来访问x此函数的值.pp.Value.x((Vector3)p).x


要么

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


Sky*_*n R 7

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

相反这个

void SpawnCube(Vector3 p = new Vector3(0,0,0)){...}
Run Code Online (Sandbox Code Playgroud)

用这个

void SpawnCube(Vector3 p)
{
  //Implementation
}

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

您已经获得了SpawnCube方法体的一种实现,并且可以带或不带参数使用它:)


Dal*_*ton 5

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

    public void myMethod(Vector3 optionalVector3 = new Vector3())
    {
        //you method code here...
    }
Run Code Online (Sandbox Code Playgroud)