You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何为地形树木创建自定义NavMesh Obstacle导航障碍

Unity自定义树木NavMesh树干避让区实现方法

你之前添加NavMesh Obstacle不生效的核心原因:Unity地形系统种植的树木,默认会在NavMesh烘焙阶段直接把整棵树的模型范围(含树冠)识别为静态不可走区域,烘焙完成后这部分障碍已经写进NavMesh数据里了,后续加的运行时障碍组件自然没法覆盖已经烘焙好的静态障碍。

按以下步骤操作就能实现仅避让树干的效果:

  • 第一步:清除原有树木自动生成的大范围障碍
    1. 选中场景中的Terrain对象,在Terrain组件的树木原型配置列表里,逐个打开所用树木的配置面板,取消所有和NavMesh烘焙相关的勾选(不同Unity版本显示名称略有区别,一般叫Bake to NavMesh或NavMesh Obstacle)
    2. 打开Navigation烘焙窗口,清空原有NavMesh数据后重新烘焙一次,此时树木周围覆盖到树枝的大范围避让区会全部消失。
  • 第二步:配置仅覆盖树干的自定义障碍,根据你的需求二选一即可
    • 静态烘焙方案(性能最优,适合固定不会移动/破坏的树木)
      1. 打开树木对应的预制体,在根节点下新建一个空子物体,对齐到树干位置
      2. 给这个空子物体添加Capsule Collider(胶囊碰撞体最适配圆柱状树干),调整碰撞体的半径、高度、中心偏移,让碰撞体范围刚好包裹住树干,不要延伸到树冠区域
      3. 把这个碰撞体的Navigation Area设置为Not Walkable,勾选树木预制体的Navigation Static选项
      4. 重新烘焙NavMesh,生成的障碍就只会覆盖你设置的树干碰撞体范围。
    • 动态障碍方案(适合可破坏、可交互移动的树木)
      1. 同样在树木预制体下新建对齐树干的空子物体,给子物体添加NavMesh Obstacle组件
      2. 把组件的形状设置为Capsule,调整半径、高度、中心参数,让组件的包围范围刚好覆盖树干
      3. 勾选组件上的Carve(雕刻)选项,不需要调整其他默认参数即可。如果是用地形笔刷批量绘制的树木,这类树木默认是地形系统托管的渲染实例,不会直接挂载预制体上的运行时组件,加一个简单的初始化脚本在场景加载时遍历所有树实例,在对应树干位置生成配置好尺寸的NavMesh Obstacle即可生效,不会出现之前组件不生效的问题。

效果参考:
screenshot

内容的提问来源于stack exchange,提问作者Mushy Avocado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:09:26