Unity3D检测屏幕边缘 - 移动时对象闪烁

时间:2014-02-04 15:27:23

标签: unity3d

你好我正在开发一款简单的太空射击游戏风格的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

我不知道如何修改上面的代码,以便我触摸和移动的对象不会闪烁。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

您正在从任意浮点坐标转换到范围[0,1]并再次返回。您可能遇到的问题可能是由于当您的世界位置远离0时浮点不准确。

有多种方法可以解决这个问题:

  1. 在上面的脚本中,只有在实际触摸屏幕边缘时才执行转换。
  2. 处理OnBecameVisible()OnBecameInvisible()条消息。不要让玩家离开屏幕,否则会导致他们“隐身”。
  3. 使用this wiki文章中的IsVisibleFrom()回调。 Some people更喜欢这个,因为他们声称​​“OnBecameVisible() / OnBecameInvisible()已被破坏。”
    我不知道他们是怎么/为什么认为他们被打破了。

答案 1 :(得分:0)

您是否尝试过使用Screen.width和Screen.height来检测屏幕边缘?也许它有助于防止闪烁。