码迷,mamicode.com
首页 > 其他好文 > 详细

Physics.Raycast重载方法的参数隐式转换引发的血案

时间:2015-11-26 06:53:11      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

我用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)

 

Physics.Raycast重载方法的参数隐式转换引发的血案

标签:

原文地址:http://www.cnblogs.com/yaohj/p/4996463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!