unity中的射线检测

unity中的检测包含了范围检测和射线检测

以下收录了唐老狮专栏的详解(唐老狮yyds)老师讲的特别简单易懂

【唐老狮】Unity——物理系统(射线检测) - 哔哩哔哩 (bilibili.com)

【唐老狮】Unity——物理系统(范围检测) - 哔哩哔哩 (bilibili.com)

 

在记录一则自己用到实例,是一个开启高亮显示的功能,就是从摄像机中心发射一条射线来记录接触的第一个物体

核心代码如下:

    void SetInteractive()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        //检测是否对焦上物体
        // RaycastHit用来保存射线的探测结果
        RaycastHit info;

        // 从muzzlepoint的位置,向摄像机面向的正方向射出一根射线
        // 射线只能与m_layer所指定的层碰撞
        bool hit = Physics.Raycast(ray, out info, InterDistance, m_layer);

        string activeObjName = InterActiveManager.GetInstance().ActiveObjName;

        //如果检测到物品 而且检测不重复
        if (hit && activeObjName != info.transform.gameObject.name)
        {
            //就设置激活 激活后把当前激活的物品在管理类中进行一个设置
            EventCenter.GetInstance().EventTrigger("SetInteractive" + info.transform.name);
            InterActiveManager.GetInstance().ActiveObjName = info.transform.name;
        }

        //如果没有检测到物品 而且管理类中当前激活的物品不为空
        else if (!hit && activeObjName!=null)
        {
            //先取消先前激活物品的激活状态 之后将管理类中的激活记号置为null
            EventCenter.GetInstance().EventTrigger("CancelInteractive" + activeObjName);
            InterActiveManager.GetInstance().ActiveObjName = null;
        }
    }

 

posted @   fjnloo  阅读(1082)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
点击右上角即可分享
微信分享提示