惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
爱范儿
爱范儿
Y
Y Combinator Blog
Last Week in AI
Last Week in AI
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
月光博客
月光博客
Martin Fowler
Martin Fowler
A
About on SuperTechFans
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
J
Java Code Geeks
博客园 - 聂微东
宝玉的分享
宝玉的分享

博客园 - O和尚O

Time.timeScale 对 协程WaitForSeconds的影响 [转]Coroutine,你究竟干了什么? 转:Automatic Layout Groups How to Add Collider to Line Renderer in Unity [转] Edit Terrain foliage/texture at runtime [转]How to translate WORLD coordinates to TERRAIN coordinates in Unity3d [转]如何获取Untiy地形某一位置的贴图类型 Path Follow System using Waypoints C# [转]一步步使用3Dmax+Photoshop为游戏关卡设计瓦片化3D模型和无缝贴图(视频教程) [转]Unity游戏开发视频培训 [转]如何管理一个远程团队 [转]以《AI War》为例阐述AI元素概念与代码 [转]分享AI寻径设计的射线追踪法 [转]如何反推一个游戏 mac下汇编hello world 转:相机碰撞检测 转:拾起并拖拽物体(使用rigidbody.velocity) 转:如何设计一个沉浸式UI 转:如何实现一个滚动列表
Physics.Raycast重载方法的参数隐式转换引发的血案
O和尚O · 2015-11-26 · via 博客园 - O和尚O

我用Raycast检测两个物体是否碰撞,发现无论如何结果都不太对劲,ray貌似忽略了我设置的LayerMask

代码是这样的:

Physics.RaycastAll(start, Vector3.down, 1 << mask);

看出来问题在哪里了么?

尼玛,根本没有Physics.Raycast(Vector3 start, out RaycastHit hit, int layerMask) 这样的重载好不好。。。

我不知道从哪儿得来的一个印象,觉得有这么一个重载,就一直在用。

但是为什么这样调用编译没问题呢,这涉及到了C#参数的隐式转换。

Physics.Raycast恰好有一个重载方法是:

Physics.Raycast(Vector3 start, out RaycastHit hit, float maxDistance)

因为1<<mask是int,隐式转换成float,符合了上面的重载,于是编译是不会出错的。但这样的结果根你期待的设置LayerMask是完全不一样的,你只不过设置了一个maxDistance值等于layermask值的ray

正确的重载应该是:

Physics.Raycast(Vector3 start, out RaycastHit hit, float maxDistance,int layerMask)