我試圖弄清楚如何讓我的播放器在到達某個位置時停止,但似乎沒有任何效果。我想要的是當游戲物件到達某個位置時,游戲物件會突然停止移動。我正在給 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;
}
}
uj5u.com熱心網友回復:
我認為其中一個問題可能是
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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/394510.html
