Unity 6中ARHumanBodyManager无法区分多人体追踪的问题咨询
Unity 6中ARHumanBodyManager无法区分多人体追踪的问题咨询
大家好,我最近在做一个基于Unity 6的人体追踪项目,遇到了个棘手的问题,想请教一下各位:
我目前在Unity 6里用ARHumanBodyManager实现人体运动追踪,最终把App部署到了带LiDAR传感器的11英寸iPad Pro(第4代)上。相关版本信息如下:
ARHumanBodyManager:6.0.4- Unity版本:6000.0.31f1
- 设备:11英寸 iPad Pro(第4代)
我的需求是同时追踪多个人体,所以打算通过不同的trackableId来区分不同人体,为此写了以下代码,用字典维护当前追踪到的所有人体:
// HumanBodyManager 是 ARHumanBodyManager 的实例 HumanBodyManager.pose3DRequested = true; HumanBodyManager.pose3DScaleEstimationRequested = true; HumanBodyManager.trackablesChanged.AddListener(OnTrackableBodiesChanged); internal Dictionary<TrackableId, ARHumanBody> trackedBodies = new Dictionary<TrackableId, ARHumanBody>(); void OnTrackableBodiesChanged(ARTrackablesChangedEventArgs<ARHumanBody> eventArgs) { // 处理新增的人体 foreach (var humanBody in eventArgs.added) { if (!trackedBodies.ContainsKey(humanBody.trackableId)) { trackedBodies.Add(humanBody.trackableId, humanBody); Debug.Log($"Body Added: [{humanBody.trackableId}] (currently {trackedBodies.Count} bodies)."); } } // 处理更新的人体 foreach (var humanBody in eventArgs.updated) { if (trackedBodies.ContainsKey(humanBody.trackableId)) { trackedBodies[humanBody.trackableId] = humanBody; } } // 处理移除的人体 foreach (var (trackableId, _) in eventArgs.removed) { if (trackedBodies.ContainsKey(trackableId)) { trackedBodies.Remove(trackableId); Debug.Log($"Body Removed: [{trackableId}] (currently {trackedBodies.Count} bodies)."); } } }
但实际测试时我发现,哪怕有其他人在玩家身后移动,ARHumanBodyManager始终只会返回1个追踪到的人体。更糟的是,有时候LiDAR会错误追踪到身后的人,但返回的trackableId还是同一个,导致原本追踪的骨骼突然跳转到身后位置,严重打乱了游戏体验。我还录了一段视频,能直观看到当身后有人走动时,追踪的骨骼突然向后跳的问题。
我现在想搞清楚:这个问题是ARHumanBodyManager本身的限制导致的,还是iPad上的ARKit 6的问题?有没有什么办法可以缓解这个问题的影响?
麻烦各位帮忙解答一下,非常感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

