1

プレーヤーが画面の左側を叩いたときに、プレーヤーを左に移動させたいと思っています。現在、マウス ボタンを押している間だけ、プレーヤーが動きます。私が本当に望んでいるのは、画面を 1 回押すと、目標位置に到達するまで彼が左に移動し続けることです。

これを可能にするためにコードに欠けているものを誰か教えてもらえますか?

void FixedUpdate() 
{

    if(Input.GetMouseButtonDown(0))
    {
        if(Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3)
        {
            if(position == middle)
            {
                MoveLeft();
            }   
        }
    }
}

void MoveLeft()
{
    var pos = rigidbody.position;
    float xPosition = left.transform.position.x;
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime);
    rigidbody.position = pos;
}

実際のプレーヤーを移動するのではなく、プレーヤーの剛体を移動しているため、私のメソッドは FixedUpdate にあります。

4

1 に答える 1

0

現在、プレーヤーはマウス ボタンを押したときにのみ移動します。これは、コードがそのように記述されているためです。マウスがフレームごとに押されているかどうかを確認し、それがリジッドボディを移動している場合のみです。

マウスが押されているかどうかに関係なくプレーヤーを動かしたい場合は、プレーヤーの状態を保存する何らかの変数を作成し、マウス ボタンが押されたときに左に移動し、マウス ボタンが押されたときに停止するように設定する必要があります。プレイヤーは目標に到達します。

あなたの目標を正しく理解していれば、次のようになります。

bool moveLeft = false;

void FixedUpdate() 
{

    if(Input.GetMouseButtonDown(0)
        && (Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3))
    {
        moveLeft = true;
    }

    if (moveLeft
        && (position == middle))
    {
        MoveLeft();
    }
    else
    {
        moveLeft = false;
    }
}

void MoveLeft()
{
    var pos = rigidbody.position;
    float xPosition = left.transform.position.x;
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime);
    rigidbody.position = pos;
}
于 2014-05-19T14:42:03.243 に答える