Unity 3D 射线检测方法

  • 问题描述
    • 一、检测一个物体
    • 二、检测多个物体

问题描述

我们通常要检测主体周围是否有其他物体,就是主体的视线内是否能看到周围的物体。如果前方有障碍物则判断障碍物的高低,高于射线的障碍物会遮住主体的视线,而矮的障碍物就不会遮挡。如果要实现这种场景,我们就要用到unity种的射线检测。

一、检测一个物体

创建射线,并显示;

 Ray ray = new Ray(transform .position , transform.forward);RaycastHit hit;if (Physics.Raycast(ray, out hit, Mathf.Infinity)){if (hit.collider.gameObject.CompareTag("Obstacles")){Debug.Log("检测到物体");}}float distance = 0f;if (hit.collider == null){distance = 100f;}else{distance = Vector3.Distance(transform.position, hit.collider.gameObject.transform.position);}Debug.DrawRay(ray.origin, transform.forward*distance, Color.red);

主体前面没有物体,射线无限延长
射线前方有物体,则投射到物体上:

障碍物后方的物体无法检测到,而前方的物体可以检测到:

二、检测多个物体

如果周围有很多需要检测到的物体,就像是人的眼睛一样,视野范围内的物体都能看到,并被检测到。所以我们就用多条射线组成的扇形面来检测,即扇形射线检测。

代码如下:

void Update(){if (Look(this.gameObject) == true){Debug.Log("检测到物体");}}//放射线检测private bool Look(GameObject controller){float lookAngle = 90f;float lookAccurate = 70f;//一条向前的射线if (LookAround(controller, Quaternion.identity, Color.green))return true;//多一个精确度就多两条对称的射线,每条射线夹角是总角度除与精度float subAngle = (lookAngle / 2) / lookAccurate;for (int i = 0; i < lookAccurate; i++){if (LookAround(controller, Quaternion.Euler(0, -1 * subAngle * (i + 1), 0), Color.green)|| LookAround(controller, Quaternion.Euler(0, subAngle * (i + 1), 0), Color.green))return true;}return false;}//射出射线检测是否有Playerstatic public bool LookAround(GameObject attacker, Quaternion eulerAnger, Color DebugColor){float distance;RaycastHit hit;if (Physics.Raycast(attacker.transform.position, eulerAnger * attacker.transform.forward, out hit, 100) && hit.collider.CompareTag("Player")){//controller.chaseTarget = hit.transform;return true;}if (hit.collider == null){distance = 100f;}else{distance = Vector3.Distance(attacker.transform.position, hit.collider.gameObject.transform.position);}Debug.DrawRay(attacker.transform.position, eulerAnger * attacker.transform.forward.normalized * distance, DebugColor);return false;}}

效果如下:

[以上部分参考网络]
·
·
·
·
·
·
·
·
·
·
流水不争先,争的是滔滔不绝。

Unity 3D 射线检测方法相关推荐

  1. Unity 常用射线检测方法

    1.普通射线检测(一般用于检测某一个物体) Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);Debug.DrawRay(ray. ...

  2. unity通关射线检测实现3d模型自适应地形起伏

    unity通关射线检测实现3d模型自适应地形起伏 该方法是一种取巧的方式,不通关人物碰撞器什么的,很简单的一种思路 通过在模型的位置每次移动时向下发射一条射线检测,检测到地面碰撞器时,获取碰撞点的坐标 ...

  3. 直播笔记 | Unity中射线检测详解

    本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...

  4. Unity 2019 射线检测失效

    之前在做毕设的一个FPS游戏时,遇到了使用射线检测失效的情况,特此记录以下. 前因 在FPS游戏中,对于子弹的发射主要通过两种方式来实现. 一种可以通过实例化子弹的GameObject对其施加物理效果 ...

  5. 通过形状先验引导的3D目标检测方法(Disp R-CNN解读)

    来源丨AI 修炼之路 问题,我们提出在不需要雷达点云的情况下,使用统计形状模型生成密集视差伪真值,这使得我们的系统具有更广泛的适用性.在KITTI数据集上进行的实验表明,即使在训练时不使用雷达数据,D ...

  6. PanoNet3D:一个基于激光雷达点云语义和几何理解的3D目标检测方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨黄浴@知乎 来源丨https://zhuanlan.zhih ...

  7. 一个雷达和摄像头融合的3D目标检测方法CenterFusion

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉工坊 以前提到过此文(在想法中),WACV'2 ...

  8. PanoNet3D:一种3D目标检测方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉联盟 AI博士笔记系列推荐 周志华<机器 ...

  9. 相机与激光雷达融合的3D目标检测方法MVAF-Net

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 编辑丨新机器视觉 该方法将激光雷达投影的BEV和前向视角.与摄像头视角图像作为检测输入,在特征融合中, ...

  10. Top1的3D目标检测方法(已开源)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 一.SA-SSD 在bird's eye view任务中,效率与精度并存的SA-SSD 论文:http ...

最新文章

  1. iOS 跳转App的二三事
  2. 移动端网站优化该注意哪些重点?
  3. 深度学习85—[深度学习] 感知器
  4. 为什么要用内插字符串代替string.format
  5. 获得诺贝尔奖之后影响力会下降?绘制精英科学家的职业生涯路线图
  6. Matlab 中prod函数的使用
  7. (44)FPGA时序逻辑与组合逻辑(组合逻辑)
  8. 计算机原理测试卷一,计算机原理章节测考试试卷一.doc
  9. NYOJ-疯牛(贪心)
  10. 活动目录系列之二:单域环境的实现(单站点)
  11. linux下c语言版线程池
  12. bugzilla perl mysql apache windows,windows下配置bugzilla
  13. OA开发很简单,OA实施很复杂!
  14. 虎牙直播电脑配置推荐2021 虎牙直播电脑配置清单
  15. Java随机26位英文字母
  16. 计算机东北大学与兰州大学哪个好,东北大学和兰州大学如何选择?上哪个比较好?...
  17. css div水平垂直居中
  18. win7系统快捷键大集合 这个最有感觉了~~:~~ 【Win+Tab】:3D切换窗口
  19. 用于生菜的Linux
  20. 【面试题】1384- 分享 44 道 JS 难题,做对一半就是高手

热门文章

  1. linux下载navicat
  2. Excel-散点图(相关性及数据分布)分析
  3. 软件测试:什么是图灵测试
  4. 如何成为一名机器学习算法工程师?
  5. 【定时自动清理磁盘空间】
  6. 2017春招实习-Android开发面经-bat,td等公司
  7. 计算机截屏无法保存,win7电脑自带截图软件保存图片提示失败怎么办?(已解决)...
  8. 处理分类数据 非数值型编码
  9. html中body写什么,HTML中body内常用标签
  10. vscode中出现 Statements must be separated by newlines or semicolons 问题的解决方法之一