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