本文首发于洪流学堂微信公众号。
洪流学堂,学Unity快人几步

你好,我是郑洪智,你的技术探路者。
这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记。
完整录播:https://www.bilibili.com/video/av24468720
源码地址:https://github.com/zhenghongzhi/PhysicRaycast

什么是射线(Ray)?

射线检测能用来做什么?

  • 检测光标位置的三维物体
  • 检测角色前面的物体(自动开门)
  • 从空中向下检测(凹凸不平的地形的瞬移)
  • 测量距离(激光测距)
  • ……

API

public static bool Raycast(Ray ray, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

其实你只要记住调用是使用 Physics.Raycast()就行啦

参数RaycastHit

可以获取到射线碰撞后的一些参数。

常用的有:
- collider 射线检测到的collider,这个非常常用,因为能根据collider.gameObject获取到对应GameObject
- distance 射线发射源与检测到的位置的距离
- normal 射线碰撞位置的法线
- point 射线碰撞位置的世界坐标
- transform 射线碰撞物体的transform组件

LayerMask参数

LayerMask是一个比较难懂的参数

Layer与LayerMask的关系

Layer是0-31的数字
LayerMask是按位对应0-31

如Layer9:Enemy
LayerMask用二进制表示:00000000 00000000 000000**1**0 00000000
从右往左第10位,等于表达式:1<<9

这是一种二进制思想,使用mask(掩码)表示时,可以同时表示多个状态的有无。

二进制思想小测验
1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
A 8
B 10
C 32
D 999
洪流学堂公众号 回复 老鼠 获取答案

如何根据Layer获取LayerMask

如果你知道Layer的名字,可以通过LayerMask.GetMask()方法获取,注意这个方法可以传入一个或多个string类型参数。

int mask = LayerMask.GetMask("Player", "NPC");

如果你知道Layer的数字,比如Layer9,可以通过移位操作1<<9来获取

int playerMask = 1<<9;
int npcMask = 1<<10;
int mask = playerMask | npcMask; // 通过位操作“或(|)”同时检测player 和 npc层
int reverse = ~mask; // 通过位操作"求反(~)",检测除了player 和 npc的其他层

调试小技巧

使用Debug.DrawRay()方法可以在Scene中画出射线或者检测到的位置,更好的方便调试。

小结

本周直播的精华内容笔记如上,直播通知QQ群:492325637。
洪流学堂公众号内回复log可以获取最新调试插件的下载地址。

你有没有朋友遇到过射线检测的问题?你可以把今天的内容分享给他,或许你能帮到他。


直播笔记 | Unity中射线检测详解相关推荐

  1. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  2. Unity中AB包详解(超详细,特性,打包,加载,管理器)

    Unity中的AssetBundle详解 AssetBundle的概念 AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包. Unity中的AssetBundle系统是对 ...

  3. 直播笔记 | Unity中路径的疑难杂症剖析

    本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 昨天我们直播剖析了Unity中路径的疑难杂症,以下是直播内容精华部分笔记. 完整录播:https:/ ...

  4. unity中Input.Touch详解

    相关的api 1.Touch类:用来记录一个手指触摸在屏幕上的状态与位置的各种相关数据.这其它中只有两个属性是你要注意的,就是Touch.fingerId和Touch.tapCount. Touch. ...

  5. Unity中射线检测实现瞄准等功能——Physics.Raycast

    重载方法1: 1.需要传入Ray射线.  2.创建一个Ray射线并传参,注意射线可能与自己发生碰撞,从而Debug结果一直True,需要设置射线起点为自身之外. 重载方法中其他参数含义: origin ...

  6. Unity中Light Probe详解

    本文节选自洪流学堂公众号专栏<郑洪智的Unity2018课>,未经允许不可转载. 洪流学堂公众号回复光照探头,获取本文对应的视频实战教程. 洪流学堂,让你快人几步.你好,我是郑洪智. Un ...

  7. Unity中Time类详解

    一:前言 Unity中时间类 二:常用 --Time.time 从游戏开始后所运行的时间,会受时间缩放比例的影响 --Time.unscaledTime 从游戏开始后所运行的时间,不受时间缩放比例的影 ...

  8. 小猫爪:i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解

    i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解 1 前言 2 FlexCAN简介 2.1 MB(邮箱)系统 2.1.1 正常模式下 2.1.2 激活了CAN FD情况下 2. ...

  9. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

最新文章

  1. 精通Python自然语言处理
  2. oracle每一行的hash值,Hash分区表分区数与数据分布的测试
  3. logstash grok mysql_【Logstash系列】使用Redis并自定义Grok匹配
  4. 软件配置管理(五)常用重构技巧
  5. 深度学习基础实战使用MNIST数据集对图片分类
  6. 你可能小赚,但苹果永远不亏!华强北老板说一台新iPhone只赚10块钱?
  7. Android 4.0 ICS SystemUI浅析——SystemUI启动流程
  8. delphi 子接口是否实现父接口_您可以从子类接口的接口调用父接口的默认方法吗?...
  9. wx.chooseimage 超过了最大请求长度_一次 HTTP 请求到底经历了什么?
  10. 关于UIControl响应事件说明
  11. php 基于redis计数器类
  12. 在微信小程序中使用条形码生成器
  13. 逻辑函数代数法化简(二)
  14. 软件集合:人人刚需的神器,已解锁使用
  15. 电场刺激响应性和AIE水凝胶/调控发射波长及亮度AIE微球/AIE糖肽聚合物的研究
  16. 中英文标点符号切换的组合键_最全的键盘各键及组合键功能说明,建议收藏
  17. play框架使用起来(17)
  18. 小红书怎么涨粉最快?小红书涨粉最快的方法分享
  19. 2019年上半年软件设计师下午试题
  20. YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights Biases)

热门文章

  1. linux apache tomcat ajp,Linux下apache tomcat ajp session複製
  2. 中img拉伸_8个拉伸动作,帮你调动全身肌肉,提高柔韧性,缓解疲劳放松心情...
  3. ajax后台返回数据中文乱码_ajax返回的数据是乱码????
  4. mysql 修改字段长度 合并语句_mysql中利用sql语句修改字段名称,字段长度等操作...
  5. linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库
  6. 随机数插入排序c 语言,C语言程序设计100例之(22):插入排序
  7. linux上安装osg_ubuntu 环境 安装OSG
  8. 设计师分享社区,展示风采平台
  9. 子网ip和子网掩码不匹配_【详解】你知道什么是IP路由查找的“最长匹配原则”吗?...
  10. C++11 thread使用