Unity3d c# - Vector3作为默认参数

时间:2015-05-18 02:20:17

标签: c# unity3d default

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

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

我刚试了一下我的错误:

  

将表达式分配给可选参数`p'必须是常数或默认值

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

4 个答案:

答案 0 :(得分:11)

你不能。默认参数有些限制。请参阅this MSDN page

  

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

     
      
  • 一个常量表达式;

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

  •   
  • 表单default(ValType),其中ValType是值类型。

  •   

在您发布的特定情况下,我怀疑new Vector3()new Vector3(0,0,0)相同,因此您可以使用它。

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

答案 1 :(得分:6)

我知道这已经回答了,但我只是想添加其他方法来做到这一点。 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)
    }

}

正如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
}

答案 2 :(得分:2)

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

了解此

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方法主体的一种实现,可以在有或没有参数的情况下使用它:)

答案 3 :(得分:0)

您好我刚遇到这个问题,我需要将Vector3作为可选项。但它会继续说我需要编译时间常数。为了解决这个问题,我使用了这个:

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