赞
踩
如果你在射线检测中用到了Camera.main,游戏导出或切换场景后可能会因为场景中存在多个摄像机或者相机未被正确激活而导致射线检测位置不准确。
注意这种情况同样可能在联机游戏中出现(因为场景中有多个玩家,每个玩家有不同的摄像机)。
解决方案是:
Camera.main
接口,而是直接引用场景中激活的相机实例如下图所示,我制作了一个简单的Fps游戏Demo,实现了简陋的开火和俯视角小地图的功能。
其中开火的射线检测代码如下:
- Vector3 start = Camera.main.transform.position;//射线起点
- Vector3 to = Camera.main.transform.forward;//射线方向
- RaycastHit hit;
- float maxDistance = 100f;
- if (Physics.Raycast(start, to, out hit, maxDistance))
- {
- //其他内容...
- Debug.Log(hit.collider.name);
- }
如下图所示:与编辑器中的效果不同,在游戏导出后,点击左键开火后,目标并没有执行应有的逻辑。
在我的案例中:我使用了一个相机模拟玩家的视角,于此同时,我也使用了一个摄像机用于制作屏幕右上角的小地图。
由于我使用了多个摄像机(注意:在制作多人联机游戏时也可能出现这个问题),且在射线检测中用到了Camera.main,导致场景中存在多个摄像机或者相机未被正确激活而导致射线检测位置不准确的问题。所以解决方法是“不使用Camera.main
接口,而是直接引用场景中激活的相机实例。”而且要注意“避免在场景切换后立即进行射线检测,或者在切换后重新获取当前场景中的主相机。”这样也可能出现相同的问题。
- //用于存放场景中的实例
- public Camera targetCamera;
- //...
- //-------------声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/997499推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。