当试图从屏幕边缘反弹时,物体会卡住,我这样做错了吗?

public class AsteroidMovement : MonoBehaviour { public Vector2 speed; public Vector2 direction; private Vector2 movement; private Vector3 TopScreenBound; private Vector3 BottomScreenBound; // Use this for initialization void Start() { TopScreenBound = Camera.main.ViewportToWorldPoint(new Vector3(0f, 1f, 0f)); BottomScreenBound = Camera.main.ViewportToWorldPoint(new Vector3(0f, 0f, 0f)); } // Update is called once per frame void Update() { if (gameObject.transform.position.y >= TopScreenBound.y) { direction.y *= -1; } if (gameObject.transform.position.y <= BottomScreenBound.y) { direction.y *= -1; } movement = new Vector2(speed.x * direction.x, speed.y * direction.y); } void FixedUpdate() { rigidbody2D.velocity = movement; } } 

我试图让我的游戏中的小行星从我的屏幕边缘反弹,我让它工作得体,但经过一些反弹后,小行星/物体被“卡住”在墙上,并且在游戏区域出现故障。

我错了吗? 我无法看到它在代码中的位置使得小行星在几次反弹后卡住了。谢谢提前:)

您必须修复对象在屏幕反弹的位置,如果您的对象已经在屏幕之外并且它没有完全进入下一帧的屏幕空间,那么您的对象将无限地改变它的方向,直到它进入或离开屏幕。

改变这个:

 if (gameObject.transform.position.y >= TopScreenBound.y) { direction.y *= -1; } if (gameObject.transform.position.y <= BottomScreenBound.y) { direction.y *= -1; } 

对此:

 if (gameObject.transform.position.y >= TopScreenBound.y) { gameObject.transform.position.y = TopScreenBound.y; direction.y *= -1; } if (gameObject.transform.position.y <= BottomScreenBound.y) { gameObject.transform.position.y = BottomScreenBound.y; direction.y *= -1; }