如何通过Vuforia获取3D模型名称?现有代码仅返回DeviceObserver
正确获取3D模型名称的方法
你当前代码里调用的OnTargetFound()是事件回调方法,它的设计目的是在目标被识别到时触发逻辑,而非返回目标模型的名称。直接调用它得到的“DeviceObserver”其实是Observer组件自身的标识,而非你要的3D模型名称。
核心思路
通过ObserverBehaviour组件的目标关联属性,直接获取目标模型的名称。以常见的AR框架(如Vuforia)为例,ObserverBehaviour会持有Target属性,通过它可以访问目标的名称信息。
修正后的代码示例
方式1:直接获取目标名称
private ObserverBehaviour mObserverBehaviour; void Start() { mObserverBehaviour = GetComponent<ObserverBehaviour>(); if (mObserverBehaviour != null && mObserverBehaviour.Target != null) { Debug.Log("Fetched: " + mObserverBehaviour.Target.Name); } }
方式2:通过回调事件监听目标找到并获取名称
如果需要在目标被识别到的时机获取名称,应该注册回调事件而非直接调用方法:
private ObserverBehaviour mObserverBehaviour; void Start() { mObserverBehaviour = GetComponent<ObserverBehaviour>(); if (mObserverBehaviour != null) { // 注册目标找到的回调 mObserverBehaviour.OnTargetFound += OnTargetDetected; } } void OnTargetDetected() { if (mObserverBehaviour.Target != null) { Debug.Log("Target found: " + mObserverBehaviour.Target.Name); } } void OnDestroy() { if (mObserverBehaviour != null) { // 销毁时取消注册,避免内存泄漏 mObserverBehaviour.OnTargetFound -= OnTargetDetected; } }
注意事项
- 如果是自定义的
ObserverBehaviour组件,需确认组件内是否有公开的目标模型引用(比如public GameObject targetModel;),此时直接访问targetModel.name即可获取名称。 - 确保
ObserverBehaviour组件已正确关联目标模型,否则Target或目标引用会为空。
内容的提问来源于stack exchange,提问作者Matt Jerzzie Sibal
相关产品推荐
相关产品推荐

