Csharp/C#教程:当试图从屏幕边缘反弹时,物体会卡住,我这样做错了吗?分享


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

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

对此:

上述就是C#学习教程:当试图从屏幕边缘反弹时,物体会卡住,我这样做错了吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1027789.html

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

精彩推荐