You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:14:55