如何在到达特定位置后停止游戏对象

How to stop a Game Object after it reaches a certain position

我正在尝试弄清楚如何让我的播放器在到达特定位置时停止,但似乎没有任何效果。我想要的是当游戏对象到达某个位置时游戏对象会突然停止移动。我正在向 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;
    }
}

我认为问题之一可能是

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);       
}