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),因此您可以使用它.
如果您需要非零默认值,则可以使用方法重载.
我知道这已经回答了,但我只是想添加其他方法来做到这一点.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或施放p回Vector3用((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)
作为解决方法,您可以重载方法。
相反这个
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方法体的一种实现,并且可以带或不带参数使用它:)
嗨,我刚遇到这个问题,我需要 Vector3 是可选的。但它会一直说我需要一个编译时间常数。为了解决这个问题,我使用了这个:
public void myMethod(Vector3 optionalVector3 = new Vector3())
{
//you method code here...
}
Run Code Online (Sandbox Code Playgroud)