我们如何添加Vector3
作为方法的默认参数?例如:
Void SpawnCube(Vector3 p = new Vector3(0,0,0)){...}
我刚试了一下我的错误:
将表达式分配给可选参数`p'必须是常数或默认值
我想自定义一个函数来生成一些game objects
,如果我没有提供transform.position
,它将转到(0,0,0)
。
答案 0 :(得分:11)
你不能。默认参数有些限制。请参阅this MSDN page。
每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是以下类型的表达式之一:
一个常量表达式;
新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
表单default(ValType),其中ValType是值类型。
在您发布的特定情况下,我怀疑new Vector3()
与new Vector3(0,0,0)
相同,因此您可以使用它。
如果您需要非零默认值,则可以改为使用method overloading。
答案 1 :(得分:6)
我知道这已经回答了,但我只是想添加其他方法来做到这一点。 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)
}
}
正如htmlcoderexe 指出的那样,
要使用p
,您必须使用p.Value
或使用p
将Vector3
投回((Vector3)p)
。
例如,要使用x
变量,p
或p.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...
}