你好我正在开发一款简单的太空射击游戏风格的2D游戏,我被困在对象应该限制自己超出屏幕左右边缘的位置。
我在Unity Answers的一个答案中实现了@Waz解决方案,如果该对象不是一个刚体,它的效果很好。但是,如果它应用于刚体,则对象开始闪烁。以下是我在@Waz
中使用的代码 float speed = 0.1f;
Vector3 viewPos = Camera.main.WorldToViewportPoint(transform.position);
viewPos.x = Mathf.Clamp01(viewPos.x);
viewPos.y = Mathf.Clamp01(viewPos.y);
transform.position = Camera.main.ViewportToWorldPoint(viewPos);
这是@Waz提到他的代码段的链接: http://answers.unity3d.com/questions/148790/detecting-the-edge-of-the-screen.html
这是一个链接,表示要为刚体使用替代解决方案,但此代码对我不起作用: http://answers.unity3d.com/questions/62189/detect-edge-of-screen.html
我不知道如何修改上面的代码,以便我触摸和移动的对象不会闪烁。任何帮助都会很棒。
答案 0 :(得分:1)
您正在从任意浮点坐标转换到范围[0,1]并再次返回。您可能遇到的问题可能是由于当您的世界位置远离0时浮点不准确。
有多种方法可以解决这个问题:
OnBecameVisible()
和OnBecameInvisible()
条消息。不要让玩家离开屏幕,否则会导致他们“隐身”。IsVisibleFrom()
回调。 Some people更喜欢这个,因为他们声称“OnBecameVisible()
/ OnBecameInvisible()
已被破坏。” 答案 1 :(得分:0)
您是否尝试过使用Screen.width和Screen.height来检测屏幕边缘?也许它有助于防止闪烁。