和UE4能够设置linetrace的channel通道一样,ray一样能够通过添加自定义layer设置添加通道。
精华部分:
①通过操作位符实现
Unity使用一个32位的整数来代表图层掩码参数。举个例子,以下表示32位全是零:
0000 0000 0000 0000 0000 0000 0000 0000
默认情况下Unity使用前8层作为内置层。所以当你在不使用任何图层参数掩码参数的情况下调用光线投射方法时,它会对所有默认的这8层进行光线投射,可以用如下掩码表示:
0000 0000 0000 0000 0000 0000 1111 1111
我们把敌人所在层设置为第8层(下标为9),我们只希望对这个层进行光线投射。所以我们把掩码设置为:
0000 0000 0000 0000 0000 0001 0000 0000
设置这个位掩码简单的办法可以使用位移操作。我们只需要将下标为9的位置设置为1,这意味着我们只需要左移8位即可。使用向左位移操作符向左移8位,如下代码:
int layerMask =1<<8;
要是希望多个图层掩码,比如8层和9层,用按位或操作符即可:
int layerMask = (1<<8)|(1<<9);
如果要全部都检测,那么
LayerMask mask = -1;
Raycast传 mask.value
LayerMask还能够通过GetMask()的方法,获得特定通道的value
LayerMask.GetMask("Enemy")
网友评论