Unity中如何激活NavMesh?车辆类游戏导航控制方法
场景准备与NavMesh烘焙
先把场景里所有静态障碍物(比如墙、路沿)都勾选Inspector面板里的Static选项;打开Window > AI > NavMesh窗口,根据车辆尺寸调整烘焙参数:Agent Radius设成车辆碰撞半径,Max Slope匹配车辆爬坡能力,其他参数按需调整;最后点Bake按钮,等场景里出现蓝色导航网格就完成了。给车辆配置NavMesh组件
给车辆GameObject加上NavMeshAgent组件,把Radius、Height和烘焙时的Agent参数对齐;Speed、Angular Speed、Acceleration改成车辆实际的运动参数;取消Auto Braking勾选(车辆一般要平滑减速);轮式车辆可以把Navigation Type设为High Quality,路径会更顺滑。编写导航控制脚本
写个C#脚本挂到车辆上,核心逻辑就是调用NavMeshAgent的SetDestination方法,示例代码:using UnityEngine; using UnityEngine.AI; public class VehicleNavController : MonoBehaviour { private NavMeshAgent _agent; void Start() { _agent = GetComponent<NavMeshAgent>(); // 这里可以替换成玩家点击坐标或任务目标点 SetMoveTarget(new Vector3(10, 0, 10)); } public void SetMoveTarget(Vector3 targetPos) { if (NavMesh.SamplePosition(targetPos, out NavMeshHit hit, 2f, NavMesh.AllAreas)) { _agent.SetDestination(hit.position); } } }如果要做点击地面导航,加个射线检测逻辑,把点击到的地面坐标传给SetMoveTarget就行。
动态障碍物处理(可选)
给移动的障碍物(比如其他车)加NavMeshObstacle组件,勾选Carve选项,这样障碍物移动时会实时修改NavMesh,车辆就不会穿过去了;调整Carve Radius和Carve Height适配障碍物大小。测试优化
运行游戏测一遍,看车辆会不会卡障碍物、路径顺不顺;如果路径转弯太硬,调大NavMeshAgent的Corner Distance;转向太急就加个平滑转向的逻辑,或者增大Angular Speed参数。
内容的提问来源于stack exchange,提问作者liamm737

