升级Vuforia至11.3.4结合ARFoundation时遇ARTrackablesChangedEventArgs找不到错误
Assets/Vuforia/Test/com.ptc.vuforia.engine@961073a467cc/Vuforia/Scripts/Internal/ARFoundationIntegration/ARFoundationFacade.cs(250,31): error CS0246: The type or namespace name 'ARTrackablesChangedEventArgs<>' could not be found (are you missing a using directive or an assembly reference?)
环境配置
- Unity版本:2022.3.62f1
- Vuforia:11.3.4
- ARFoundation:4.2.10
- ARSubsystems:4.2.10
- Unity.XR.ARFoundation和Unity.XR.ARSubsystems已添加至VuforiaScripts.asmdef
- 已清理并重建Library文件夹
触发错误的代码片段
void OnAnchorsChanged(ARTrackablesChangedEventArgs<ARAnchor> eventArgs) { var removed = new List<Tuple<string, Transform>>(); foreach (var (trackable, anchor) in eventArgs.removed) { var uuid = anchor.trackableId.ToString(); if (mAnchors.ContainsKey(uuid)) { removed.Add(Tuple.Create(uuid,anchor.transform)); mAnchors.Remove(uuid); } } var updated = new List<Tuple<string, Transform>>(); foreach (var anchor in eventArgs.updated) { var uuid = anchor.trackableId.ToString(); if (mAnchors.ContainsKey(uuid)) { updated.Add(Tuple.Create(uuid,anchor.transform)); } } AnchorsChangedEvent.Invoke(removed, updated); }
已尝试的解决措施
- 确认Unity.XR.ARFoundation和Unity.XR.ARSubsystems已正确安装并引用
- 验证ARTrackablesChangedEventArgs应存在于ARFoundation 4.2+版本中
- 重建项目并清理Library文件夹
- 添加必要的using指令:
using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems;
问题分析与解决方案
核心原因
Vuforia 11.x版本对ARFoundation有明确的兼容性要求,ARFoundation 4.2.x不在Vuforia 11.3.4的兼容列表内。Vuforia 11.x官方推荐搭配ARFoundation 5.x及以上版本(对应Unity 2021.3+),而ARFoundation 4.2.x的API结构与Vuforia 11.x的集成层不匹配,导致ARTrackablesChangedEventArgs<>这类泛型事件参数无法被正确识别。
另外需检查VuforiaScripts.asmdef的引用配置:确保添加的Unity.XR.ARFoundation和Unity.XR.ARSubsystems与项目实际安装的版本一致,避免版本不匹配引发的引用失效。
解决步骤
升级ARFoundation/ARSubsystems到兼容版本:
根据Vuforia官方兼容性文档,Vuforia 11.3.4推荐搭配ARFoundation 5.1.0+。直接在Package Manager中升级ARFoundation和ARSubsystems到符合要求的版本,升级后重新生成项目文件。修复asmdef引用(升级后仍有问题时):
打开VuforiaScripts.asmdef文件,确认以下引用已正确添加且无版本冲突:Unity.XR.ARFoundationUnity.XR.ARSubsystems
保存后让Unity重新编译脚本。
临时兼容方案(不推荐长期使用):
若无法升级ARFoundation,可将ARTrackablesChangedEventArgs<ARAnchor>替换为ARFoundation 4.2.x对应的非泛型事件参数ARAnchorsChangedEventArgs,同时调整方法内逻辑适配旧API:void OnAnchorsChanged(ARAnchorsChangedEventArgs eventArgs) { var removed = new List<Tuple<string, Transform>>(); foreach (var anchor in eventArgs.removed) { var uuid = anchor.trackableId.ToString(); if (mAnchors.ContainsKey(uuid)) { removed.Add(Tuple.Create(uuid, anchor.transform)); mAnchors.Remove(uuid); } } var updated = new List<Tuple<string, Transform>>(); foreach (var anchor in eventArgs.updated) { var uuid = anchor.trackableId.ToString(); if (mAnchors.ContainsKey(uuid)) { updated.Add(Tuple.Create(uuid, anchor.transform)); } } AnchorsChangedEvent.Invoke(removed, updated); }注意:此方案仅为临时修复,长期仍建议升级到兼容版本以避免后续更多API兼容性问题。
额外注意事项
- 升级ARFoundation后,需检查项目中其他依赖ARFoundation的脚本,确保适配新版本API变化。
- 每次升级后务必清理Library文件夹并重新编译,避免缓存导致的异常。
内容的提问来源于stack exchange,提问作者Ooi Chia Hau

