• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

01月
07
Unity

Unity导航系统AreaMask代码开启

发表于 2022-01-07 • 字数统计 2518 • 被 2,041 人看爆

介绍

指定哪些导航网格区域可通过

代码中使用

 NavMeshAgent agent;
 myagent = gameObject.GetComponent<NavMeshAgent>();
 agent.areaMask = 区域值

AreaMask的计算方式

直接计算赋值

寻路区域每一个区域都是2的幂,通过幂的数值进行设置
-1是全部选择,选择多个则进行相加

如图所示
AreaMask01.png
例如,选定1,3,4层AreaMask的值为$2{0} + 2{2} + 2^{3} = 13$
结果如下:

 NavMeshAgent agent;
 myagent = gameObject.GetComponent<NavMeshAgent>();
 agent.areaMask = 13

如图所示
AreaMask02.png

位运算方式

按照二进制1或0决定能不能走,二进制位从右到左依次是第一个标签到最后一个标签。只需要关注要改变的层级前面的
如:第四层需要开启或者关闭为1,前面三层不变则为0,从右开始,二进制位1000,第四位数为1则代表要改变的层

单独开启一层

    NavMeshAgent agent;
    myagent = gameObject.GetComponent<NavMeshAgent>();
    agent.areaMask |= 0x8;     // |可用可不用,不用也没发现错误😂

如:开启第四层

第四层,二进制为1000,然后化为十六进制为0x8(十进制为8,和上面方法也一样)

效果如下图
AreaMask03.png

如:开启第六层

第六层,二进制为100000,然后化为十六进制为0x20

效果如下图
AreaMask04.png

关闭一层,其他层都开启

    NavMeshAgent agent;
    myagent = gameObject.GetComponent<NavMeshAgent>();
    agent.areaMask &= ~0x8;     // &可用可不用,不用也没发现错误😂,必须要有~用于取反

如:关闭第四层

第四层,二进制为1000,然后化为十六进制为0x8(十进制为8,和上面方法也一样)

效果如下图
AreaMask05.png

如:关闭第六层

第六层,二进制为100000,然后化为十六进制为0x20

效果如下图
AreaMask06.png

开启和关闭多个

开启和关闭多个层,和上面一样

如:关闭四、六层

二进制为:101000,十六进制为:0x28。关闭也是同理

AreaMask07.png

参考

  • 码农家园-Unity3D—–寻路系统
  • 总都督-Unity3D 导航系统
  • FrankNotes-【Unity3D 学习笔记】自动寻路
分享到:
软件类型和下载地址
Unity导航系统
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,080次看爆
  • JAVA_HOME环境配置问题 3,731次看爆
  • AssetBundle使用 3,499次看爆
  • VSCode配置C++开发环境 3,257次看爆
  • Lua反射 3,133次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图