将 UnityScript 转换为 C# 时出错
Error on converting UnityScript to C#
我正在尝试将一些 UnityScript 代码转换为 D#,但出现以下错误:
Expression denotes a method group, where a variable
, value
or type
was expected on the Getcomponent
void Update ()
{
float xVel = GetComponent().Rigidbody2D().velocity.x;
if( xVel < 18 && xVel > -18 && xVel !=0){
if(xVel > 0){
GetComponent.Rigidbody2D().velocity.x=20;
}else{
GetComponent.Rigidbody2D().velocity.x = -20;
}
}
}
您的问题在于:GetComponent().Rigidbody2D()
因为这不是您使用 GetComponent 的方式,您看到的错误可能是因为 GetComponent
需要参数或指定类型。 JS 和 C# GetComponent 的工作方式略有不同。您可能打算这样做:
void Update ()
{
float xVel = GetComponent<Rigidbody2D>().velocity.x;
if( xVel < 18 && xVel > -18 && xVel !=0){
if(xVel > 0){
GetComponent<Rigidbody2D>().velocity.x = 20;
}else{
GetComponent<Rigidbody2D>().velocity.x = -20;
}
}
}
同样在 C# 中,我不认为你可以直接修改速度,因为它有 属性 包装器。相反,您必须手动将速度更新为新的 Vector2
。如果只想设置 x
值,请传入现有的 y
值。
我会这样写:
private Rigidbody2D _rigidBody;
void Start()
{
_rigidBody = GetComponent<Rigidbody2D>();
}
void Update ()
{
float xVel = _rigidBody.velocity.x;
if( xVel < 18 && xVel > -18 && xVel !=0){
if(xVel > 0){
_rigidBody.velocity = new Vector2(20, _rigidBody.velocity.y);
}else{
_rigidBody.velocity = new Vector2(-20, _rigidBody.velocity.y);
}
}
}
虽然我也将魔法 18
更改为一个变量,但我无法在这里猜测它代表什么!
float xVel = GetComponent<Rigidbody2D>().velocity.x;
GetComponent是这样使用的
我正在尝试将一些 UnityScript 代码转换为 D#,但出现以下错误:
Expression denotes a method group, where a
variable
,value
ortype
was expected on the Getcomponent
void Update ()
{
float xVel = GetComponent().Rigidbody2D().velocity.x;
if( xVel < 18 && xVel > -18 && xVel !=0){
if(xVel > 0){
GetComponent.Rigidbody2D().velocity.x=20;
}else{
GetComponent.Rigidbody2D().velocity.x = -20;
}
}
}
您的问题在于:GetComponent().Rigidbody2D()
因为这不是您使用 GetComponent 的方式,您看到的错误可能是因为 GetComponent
需要参数或指定类型。 JS 和 C# GetComponent 的工作方式略有不同。您可能打算这样做:
void Update ()
{
float xVel = GetComponent<Rigidbody2D>().velocity.x;
if( xVel < 18 && xVel > -18 && xVel !=0){
if(xVel > 0){
GetComponent<Rigidbody2D>().velocity.x = 20;
}else{
GetComponent<Rigidbody2D>().velocity.x = -20;
}
}
}
同样在 C# 中,我不认为你可以直接修改速度,因为它有 属性 包装器。相反,您必须手动将速度更新为新的 Vector2
。如果只想设置 x
值,请传入现有的 y
值。
我会这样写:
private Rigidbody2D _rigidBody;
void Start()
{
_rigidBody = GetComponent<Rigidbody2D>();
}
void Update ()
{
float xVel = _rigidBody.velocity.x;
if( xVel < 18 && xVel > -18 && xVel !=0){
if(xVel > 0){
_rigidBody.velocity = new Vector2(20, _rigidBody.velocity.y);
}else{
_rigidBody.velocity = new Vector2(-20, _rigidBody.velocity.y);
}
}
}
虽然我也将魔法 18
更改为一个变量,但我无法在这里猜测它代表什么!
float xVel = GetComponent<Rigidbody2D>().velocity.x;
GetComponent是这样使用的