将 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是这样使用的