Unity打包后NavMesh Agent无法工作的问题排查与解决求助
问题描述
- 编辑器环境下,NavMesh Agent可正常避开静态及动态障碍物(启用carving功能)并完成关卡流程;但打包发布后,Agent会停在原地不动,且每个Agent会随机转向不同方向
- 补充:添加LineRenderer用于显示寻路路径,编辑器中路径正常显示,打包后无路径显示,寻路功能完全失效
相关代码
OpponentController类(仅在Awake阶段设置目标点)
using UnityEngine; using UnityEngine.AI; public class OpponentController : Competitor { [SerializeField] private NavMeshAgent agent; [SerializeField] private Animator anim; [SerializeField] private float _endPositionX = -23.54f; void Awake() { //agent.speed = Random.Range(1.0f, 2.0f); _startPosition = transform.position; Vector3 endPosition = new Vector3(GameManager.instance.finishLine.position.x, 0, Random.Range(_limitZ, _limitZ)); agent.SetDestination(endPosition); } }
Competitor基类(自定义MonoBehaviour)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Competitor : MonoBehaviour { protected Vector3 _endPosition; protected float _limitZ; public Vector3 _startPosition; public void StartOver() { transform.position = _startPosition; } }
修复方案
- 最初尝试为动态障碍物启用carving功能,并在障碍物移动时更新NavMesh Surface,但该方案在低性能设备上性能开销过大
- 排查后发现编辑器与打包版本存在性能瓶颈,最终通过禁用部分障碍物的carving功能,依靠NavMesh Agent自身的避障能力解决了问题,参考Unity官方寻路内部工作机制指南
内容的提问来源于stack exchange,提问作者MUSA ZENBİLCİ
相关产品推荐
相关产品推荐

