Unity中ARCore追踪平面添加碰撞体实现蜘蛛AI漫游问题
解决ARCore追踪平面无碰撞体导致AI脚本失效的问题
我之前也碰到过类似的情况,Google更新ARCore后不少旧工具都没法正常用了,给你几个亲测有效的解决方案:
方案1:利用ARCore内置能力生成平面碰撞体(首推)
现在ARCore本身就支持生成平面碰撞体,不用依赖第三方工具,操作步骤很简单:
- 找到场景里的
ARPlaneManager组件 - 在Inspector面板中找到Plane Prefab(就是你用来显示追踪平面的预制体)
- 给这个预制体添加
MeshCollider组件,勾选Convex选项(这一步很关键,AI寻路系统需要凸碰撞体才能正确识别地面) - 如果是动态生成的平面,还需要写个小脚本同步平面Mesh到碰撞体:
using UnityEngine; using UnityEngine.XR.ARFoundation; [RequireComponent(typeof(ARPlane), typeof(MeshCollider))] public class PlaneColliderSync : MonoBehaviour { private ARPlane _arPlane; private MeshCollider _meshCollider; void Awake() { _arPlane = GetComponent<ARPlane>(); _meshCollider = GetComponent<MeshCollider>(); } void OnEnable() { _arPlane.boundaryChanged += OnBoundaryChanged; UpdateColliderMesh(); } void OnDisable() { _arPlane.boundaryChanged -= OnBoundaryChanged; } void OnBoundaryChanged(ARPlaneBoundaryChangedEventArgs args) { UpdateColliderMesh(); } void UpdateColliderMesh() { if (_arPlane.mesh != null) { _meshCollider.sharedMesh = _arPlane.mesh; _meshCollider.convex = true; } } }
把这个脚本挂到你的平面预制体上,就能自动同步平面的碰撞体数据,AI脚本需要的地面碰撞就有了。
方案2:适配AI寻路系统的补充方案
如果你的AI脚本(比如ICE-Creature Control、HerdSim)依赖NavMesh这类寻路系统,平面动态变化可能导致寻路网格不及时,你可以这么做:
- 给生成的平面添加
NavMeshSurface组件(需要先导入Unity的Navigation包) - 写个监听脚本,监听
ARPlaneManager的planeAdded和planeUpdated事件,每次平面变化时调用NavMeshSurface.BuildNavMesh()更新寻路网格 - 要是有多个追踪平面,可以给每个平面单独加
NavMeshSurface,或者用合并工具把多个平面的NavMesh合并成一个整体
方案3:修复旧工具的兼容性
如果你特别想用之前的ARCoreUtils方案,也可以自己动手修复兼容性:
- 把旧代码里的
ARCorePlane类替换成ARFoundation的UnityEngine.XR.ARFoundation.ARPlane - 原本获取平面Mesh的API改成
_arPlane.mesh - 碰撞体赋值逻辑参考方案1里的脚本调整,替换后就能正常运行了
这些方法都能解决你的蜘蛛无法在AR平面上漫游的问题,优先试试方案1,最直接也最稳定。
内容的提问来源于stack exchange,提问作者Danve
相关产品推荐
相关产品推荐

