调用NavMeshBuilder.CollectSources出现void转NavMeshBuildSource错误
错误原因
NavMeshBuilder.CollectSources为void无返回值方法,它会直接将收集到的所有导航构建源写入你传入的最后一个List<NavMeshBuildSource>类型参数中,不会返回单个NavMeshBuildSource对象- 你的代码尝试将void返回值赋值给
NavMeshBuildSource类型变量,触发了隐式类型转换失败的CS0029报错
修复方案
把报错的赋值行删掉,直接调用方法即可,收集到的构建源会自动存入你提前初始化的navMeshBuildSources列表中,后续可直接用该列表构建NavMesh。
修正后完整代码示例
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class NavMeshRuntimeBuilder : MonoBehaviour { LayerMask _layerMask; // 存储运行时生成的NavMesh数据 NavMeshData _runtimeNavMesh; NavMeshDataInstance _navMeshInstance; private void SetUpNavMesh() { NavMeshBuildSettings navMeshBuildSettings = NavMesh.CreateSettings(); navMeshBuildSettings.agentHeight = 2f; navMeshBuildSettings.agentRadius = 1f; navMeshBuildSettings.agentSlope = 45f; // 原参数2坡度过低,建议根据实际需求调整 Bounds collectionBounds = new Bounds(Vector3.zero, new Vector3(99999, 9999, 9999)); NavMeshCollectGeometry navMeshCollectGeometry = NavMeshCollectGeometry.PhysicsColliders; List<NavMeshBuildMarkup> navMeshBuildMarkups = new List<NavMeshBuildMarkup>(); List<NavMeshBuildSource> navMeshBuildSources = new List<NavMeshBuildSource>(); // 修正后的调用方式,不需要接收返回值 NavMeshBuilder.CollectSources(collectionBounds, _layerMask, navMeshCollectGeometry, 0, navMeshBuildMarkups, navMeshBuildSources); // 后续构建并激活NavMesh的补充代码 _runtimeNavMesh = new NavMeshData(); _navMeshInstance = NavMesh.AddNavMeshData(_runtimeNavMesh); NavMeshBuilder.UpdateNavMeshData(_runtimeNavMesh, navMeshBuildSettings, navMeshBuildSources, collectionBounds); } }
内容的提问来源于stack exchange,提问作者Anouar Touati
相关产品推荐
相关产品推荐

