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? 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)
}
}
正如指出的那样,
要使用 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
方法体的一个实现,您可以在有或没有参数的情况下使用它:)
我们如何添加 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? 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)
}
}
正如
要使用 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
方法体的一个实现,您可以在有或没有参数的情况下使用它:)