【问题标题】:How to stop a Game Object after it reaches a certain position如何在到达某个位置后停止游戏对象
【发布时间】:2021-12-26 19:04:14
【问题描述】:

我试图弄清楚如何让我的播放器在到达某个位置时停止,但似乎没有任何效果。我想要的是当游戏对象到达某个位置时游戏对象会突然停止移动。我正在向 RigidBody2d 施加力,因此游戏对象会移动并均匀减速,但我希望它在到达某个位置时停止。我正在尝试将此作为边界限制。我还尝试仅使用 collider2D 作为边界,但游戏对象仍然向右移动并抛出它,并且 collider2D 未设置为触发器。这是一款手机游戏,所以我使用的是触摸屏。

这就是我所拥有的。

private void Update()
{
    MovePlayer();
}

private void MovePlayer()
{
    if (Touchscreen.current.primaryTouch.press.isPressed)
    {            
        Vector2 touchPosition = Touchscreen.current.primaryTouch.position.ReadValue();
        Vector3 worldPosition = mainCamera.ScreenToWorldPoint(touchPosition);

        moveDirection = worldPosition - transform.position;
        moveDirection.z = 0f;
        moveDirection.Normalize();            
    }
    else
    {
        moveDirection = Vector3.zero;
    }

private void FixedUpdate()
{
    if (moveDirection == Vector3.zero) { return; }

    rb.AddForce(moveDirection * movementForce * Time.deltaTime, ForceMode2D.Force);
    rb.velocity = Vector3.ClampMagnitude(rb.velocity, velocity);

    if (transform.position.y >= 4f)
    {
        rb.velocity = Vector2.zero;
    }
}

【问题讨论】:

    标签: c# unity3d gameobject


    【解决方案1】:

    我认为其中一个问题可能是

    if (moveDirection == Vector3.zero) { return; }
    

    因此,如果没有用户输入,您永远不会到达该位置的检查。

    你应该分别对待这些。

    private void FixedUpdate()
    {
        var position = rb.position;
    
        if (position.y >= 4f)
        {
            rb.velocity = Vector2.zero;
            position.y = 4f;
            rb.position = position;
        }
    
        if (moveDirection == Vector3.zero) return;
    
        rb.AddForce(moveDirection * movementForce * Time.deltaTime, ForceMode2D.Force);
        rb.velocity = Vector3.ClampMagnitude(rb.velocity, velocity);       
    }
    

    【讨论】:

    • 谢谢!这正是我想要的。唯一需要修改的是删除“return;”,否则一旦到达边界你就不能再移动了。
    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多