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

Unity WebGL中Zappar插件AR开发问题:追踪丢失后网格消失

解决Zappar Image Tracker追踪丢失后网格消失的问题

问题原因

Zappar的ImageTracker组件默认会在追踪丢失时自动禁用自身GameObject,导致挂载在其下的网格等内容随之隐藏。要解决这个问题,核心是将显示内容与Tracker对象解耦,手动控制内容的显示状态和姿态。

解决方法

1. 解耦内容与Tracker对象

不要将网格直接作为ImageTracker对象的子物体,而是单独创建一个GameObject放置网格。通过脚本同步网格与Tracker的姿态,且在追踪丢失时不隐藏网格。

2. 手动控制追踪状态与姿态同步

编写C#脚本监听Tracker的追踪事件,或在Update中判断追踪状态,保留最后一次有效姿态并维持网格显示:

using UnityEngine;
using Zappar;

public class PersistMeshOnLostTracking : MonoBehaviour
{
    [SerializeField] private ZapparImageTracker m_imageTracker;
    [SerializeField] private GameObject m_targetMesh;
    
    private Vector3 m_lastValidPosition;
    private Quaternion m_lastValidRotation;

    private void Start()
    {
        // 初始化最后有效姿态为网格初始位置
        m_lastValidPosition = m_targetMesh.transform.position;
        m_lastValidRotation = m_targetMesh.transform.rotation;
        
        // 订阅Tracker的追踪事件
        m_imageTracker.OnTracked.AddListener(OnTrackingFound);
        m_imageTracker.OnNotTracked.AddListener(OnTrackingLost);
    }

    private void OnTrackingFound()
    {
        // 追踪到目标时,同步网格到Tracker姿态并记录
        m_lastValidPosition = m_imageTracker.transform.position;
        m_lastValidRotation = m_imageTracker.transform.rotation;
        UpdateMeshPose();
        m_targetMesh.SetActive(true);
    }

    private void OnTrackingLost()
    {
        // 追踪丢失时,保持网格显示并使用最后有效姿态
        UpdateMeshPose();
        m_targetMesh.SetActive(true);
    }

    // 同步网格到最后有效姿态
    private void UpdateMeshPose()
    {
        m_targetMesh.transform.SetPositionAndRotation(m_lastValidPosition, m_lastValidRotation);
    }

    // 可选:用Update实时同步(适合需要更流畅姿态过渡的场景)
    // private void Update()
    // {
    //     if (m_imageTracker.IsTracking)
    //     {
    //         m_lastValidPosition = m_imageTracker.transform.position;
    //         m_lastValidRotation = m_imageTracker.transform.rotation;
    //     }
    //     UpdateMeshPose();
    //     m_targetMesh.SetActive(true);
    // }
}

3. 注意事项

  • 将脚本挂载到任意活跃的GameObject上,赋值ImageTracker组件和目标网格对象。
  • 若需在追踪丢失后让网格保持在视野中,可根据需求调整最后姿态的更新逻辑(比如加入平滑过渡)。
  • WebGL环境下需确保脚本逻辑轻量化,避免频繁计算影响性能。

内容的提问来源于stack exchange,提问作者João Pedro S. Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:11