介绍
指定哪些导航网格区域可通过
代码中使用
NavMeshAgent agent;
myagent = gameObject.GetComponent<NavMeshAgent>();
agent.areaMask = 区域值
AreaMask的计算方式
直接计算赋值
寻路区域每一个区域都是2的幂,通过幂的数值进行设置
-1是全部选择,选择多个则进行相加
如图所示
例如,选定1,3,4层AreaMask的值为$2{0} + 2{2} + 2^{3} = 13$
结果如下:
NavMeshAgent agent;
myagent = gameObject.GetComponent<NavMeshAgent>();
agent.areaMask = 13
如图所示
位运算方式
按照二进制1或0决定能不能走,二进制位从右到左依次是第一个标签到最后一个标签。只需要关注要改变的层级前面的
如:第四层需要开启或者关闭为1,前面三层不变则为0,从右开始,二进制位1000,第四位数为1则代表要改变的层
单独开启一层
NavMeshAgent agent;
myagent = gameObject.GetComponent<NavMeshAgent>();
agent.areaMask |= 0x8; // |可用可不用,不用也没发现错误😂
如:开启第四层
第四层,二进制为1000,然后化为十六进制为0x8(十进制为8,和上面方法也一样)
效果如下图
如:开启第六层
第六层,二进制为100000,然后化为十六进制为0x20
效果如下图
关闭一层,其他层都开启
NavMeshAgent agent;
myagent = gameObject.GetComponent<NavMeshAgent>();
agent.areaMask &= ~0x8; // &可用可不用,不用也没发现错误😂,必须要有~用于取反
如:关闭第四层
第四层,二进制为1000,然后化为十六进制为0x8(十进制为8,和上面方法也一样)
效果如下图
如:关闭第六层
第六层,二进制为100000,然后化为十六进制为0x20
效果如下图
开启和关闭多个
开启和关闭多个层,和上面一样
如:关闭四、六层
二进制为:101000,十六进制为:0x28。关闭也是同理