Unity 关于Physics.***Cast的LayerMask问题

最近在使用Physics.Cast接口时,发现我怎么使用LayerMask都不能正常工作......捂脸

后来发现是我使用方式不对。

错误示范:

Physics2D.CircleCast(Rigidbody2D.position, 0.01f, direction, 0.01f, LayerMask.NameToLayer("Tree");

正确示范:

Physics2D.CircleCast(Rigidbody2D.position, 0.01f, direction, 0.01f, 1 << LayerMask.NameToLayer("Tree")

 

关于Physics、Physics2D里面的cast接口,在使用LayerMask时,该参数位置的填写格式应该是:1 << int 或 1 << LayerMask.NameToLayer("LayerName") 如果你有多个层需要混合,则格式为: 1 << int | 1 << int | ......

关于Physics2D.CircleCast(Vector2 origin, float radius, Vector2 direction, float distance, int layerMask)参数解释

origin 投射圆的圆心

radius 投射圆的半径

direction 投射圆从哪一个方向开始画,比如Vector.one就是以(0,0)到(1,1)向量开始画

distance 将这个投射圆产生位移,位移distance距离。(我个人理解,不知正确与否。简单来说就是缩短投射圆和碰撞体的距离。比如Player和Tree本来距离100,你将distance设置为50,则Player将在和Tree距离50以内时,就会触发这个投射圆代码) 一般来说根本不会设置这个参数,默认为0,除非你真的有特殊需求。

layerMask 投射圆在哪一个Layer投射,比如我就要获得在Tree这个Layer层的GameObject,那就是1 << LayerMask.NameToLayer("Tree")

 

posted @ 2020-09-25 15:16  自在道人  阅读(380)  评论(0)    收藏  举报