当前位置:   article > 正文

【Unity】使用Camera.main导致射线检测失灵 射线检测导出后失灵_unity 射线检测在导出安卓后还能用吗

unity 射线检测在导出安卓后还能用吗

先放解决方案:

如果你在射线检测中用到了Camera.main,游戏导出切换场景后可能会因为场景中存在多个摄像机或者相机未被正确激活而导致射线检测位置不准确。

注意这种情况同样可能在联机游戏中出现(因为场景中有多个玩家,每个玩家有不同的摄像机)。

解决方案是:

  • 避免在场景切换后立即进行射线检测,或者在切换后重新获取当前场景中的主相机。
  • 不使用Camera.main接口,而是直接引用场景中激活的相机实例

项目场景:

如下图所示,我制作了一个简单的Fps游戏Demo,实现了简陋的开火和俯视角小地图的功能。

点击左键开火后,射线检测使目标消失
点击左键开火后,射线检测使目标消失

其中开火的射线检测代码如下:

  1. Vector3 start = Camera.main.transform.position;//射线起点
  2. Vector3 to = Camera.main.transform.forward;//射线方向
  3. RaycastHit hit;
  4. float maxDistance = 100f;
  5. if (Physics.Raycast(start, to, out hit, maxDistance))
  6. {
  7. //其他内容...
  8. Debug.Log(hit.collider.name);
  9. }

问题描述

如下图所示:与编辑器中的效果不同,在游戏导出后,点击左键开火后,目标并没有执行应有的逻辑。

即使我已经在疯狂的射击了,但是目标没有消失
即使我已经在疯狂的射击了,但是目标没有消失

原因分析:

在我的案例中:我使用了一个相机模拟玩家的视角,于此同时,我也使用了一个摄像机用于制作屏幕右上角的小地图。

由于我使用了多个摄像机(注意:在制作多人联机游戏时也可能出现这个问题),且在射线检测中用到了Camera.main,导致场景中存在多个摄像机或者相机未被正确激活而导致射线检测位置不准确的问题。所以解决方法是不使用Camera.main接口,而是直接引用场景中激活的相机实例。”而且要注意“避免在场景切换后立即进行射线检测,或者在切换后重新获取当前场景中的主相机。”这样也可能出现相同的问题。

  1. //用于存放场景中的实例
  2. public Camera targetCamera;
  3. //...
  4. //-------------
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/997499
    推荐阅读
    相关标签