平滑地弹出一个刚体

时间:2014-05-19 14:35:35

标签: c# input unity3d rigid-bodies

当玩家点击屏幕左侧时,我希望我的播放器向左移动。现在,我的播放器仅在按住鼠标按钮时移动。我真正想要的是,当我按下屏幕一次时,他不断向左移动,直到他击中目标位置。

有人可以告诉我我的代码中缺少什么来允许这种情况发生吗?

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中,因为我正在移动玩家刚体而不是翻译实际玩家。

1 个答案:

答案 0 :(得分: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;
}