当前位置:   article > 正文

unity2d射线检测无法生效的问题_unity ray2d 射线检测

unity ray2d 射线检测

项目场景:

正在学习Unity,2D项目,需要做一个功能:鼠标点击到哪个物体就产生对应的效果,很容易想到使用射线检测,从鼠标位置发出一条射线,方向也是鼠标位置,就可以检测到鼠标点击到的物体。


问题描述:

于是用了官方文档给的范例:

    public Camera camera;

    void Start(){
        RaycastHit hit;
        Ray ray = camera.ScreenPointToRay(Input.mousePosition);
        
        if (Physics.Raycast(ray, out hit)) {
            Transform objectHit = hit.transform;  
            //逻辑代码          
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

但是调试时发现无法触发下面的逻辑代码,经过Debug.Log()排查之后,射线能够正常产生,但是无法触发if语句,也就是没有检测到射线和物体的碰撞,我一开始以为是UI遮挡或者是深度之类的问题,反复调试之后也无果,最后偶然看到一篇教程,才发现问题所在。


原因分析:

因为Unity的2D与3D项目互相兼容,可以随时来回切换,并且2D和3D物理引擎的组件和函数形式上也基本相同,只是在名字上加了2D而已,所以我就下意识地认为它们也能互相兼容,但事实上它们是互相独立的,各类组件和函数都无法相互触发。

我的项目里的所有物体的碰撞体都使用Collider 2D,而官方文档中给的Physics.Raycast函数是3D物理引擎的函数,只有射线触碰到带有Collider的物体才能有返回值,所以自然无法触发if语句,所以尽量避免2D和3D混用,要么全用2D,要么用3D组件模拟2D也可以,应该能实现比纯2D更好的效果。


解决方案:

使用Physics2D.Raycast函数代替Physics.Raycast

关于Physics2D.Raycast函数,参考官方文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/997492
推荐阅读
相关标签
  

闽ICP备14008679号