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

Unity中如何从远程更新XRReferenceObjectLibrary?

方案1:使用Addressables实现远程更新(推荐新手使用,内置依赖处理,比原生AssetBundle省很多事)
  • 第一步:安装并配置Addressables包
    在Unity Package Manager里搜索Addressables完成安装,安装后打开Window > Asset Management > Addressables > Groups完成初始化配置,把你的XRReferenceObjectLibrary资产直接拖入Groups窗口生成Addressable条目,将该条目所在Group的Build Path设置为RemoteBuildPath,Load Path设置为RemoteLoadPath,在Addressables Settings里勾选Build Remote Catalog,确保更新时能拉取最新资源目录。
  • 第二步:打包与上传资源
    每次更新XRReferenceObjectLibrary后,在Groups窗口工具栏选择Build > New Build > Default Build Script,打包完成后将RemoteBuildPath下的所有文件上传到你的远程文件服务器即可,不需要修改客户端代码即可拉取新的识别库。
  • 第三步:运行时加载代码
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class RemoteARLibLoader : MonoBehaviour
{
    // Inspector中拖入ARSessionOrigin下的ARObjectManager组件
    public ARObjectManager arObjectManager;
    // 填写XRReferenceObjectLibrary在Addressables中的地址
    public string referenceLibAddress;

    void Start()
    {
        LoadRemoteReferenceLib();
    }

    async void LoadRemoteReferenceLib()
    {
        // 更新Addressables目录拉取最新资源信息
        await Addressables.CheckForCatalogUpdates();
        // 异步加载远程XRReferenceObjectLibrary
        AsyncOperationHandle<XRReferenceObjectLibrary> handle = Addressables.LoadAssetAsync<XRReferenceObjectLibrary>(referenceLibAddress);
        await handle.Task;

        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            arObjectManager.referenceLibrary = handle.Result;
            Debug.Log("AR参考库加载成功,当前可识别物体数量:" + handle.Result.count);
        }
        else
        {
            Debug.LogError("AR参考库加载失败:" + handle.OperationException);
        }
    }
}
  • 注意:iOS打包时如果远程服务器用HTTP协议,要在Player Settings里把Allow downloads over HTTP设置为允许,否则iOS会默认阻止请求。

方案2:使用原生AssetBundle实现(适合不想引入Addressables依赖的项目)
  • 第一步:标记资产为AssetBundle
    选中XRReferenceObjectLibrary资产,在Inspector最下方的AssetBundle下拉框新建Bundle,命名为ar_reference_lib即可。
  • 第二步:打包AssetBundle
    把以下编辑器脚本放到项目的Editor文件夹中,运行菜单栏Tools/Build AR AssetBundle完成打包,将生成的ar_reference_lib文件上传到远程服务器。
using UnityEditor;
using System.IO;

public class ARAssetBundleBuilder
{
    [MenuItem("Tools/Build AR AssetBundle")]
    static void BuildARLibBundle()
    {
        string outputPath = Application.streamingAssetsPath + "/../AssetBundles/iOS";
        if (!Directory.Exists(outputPath)) Directory.CreateDirectory(outputPath);
        BuildPipeline.BuildAssetBundles(outputPath, BuildAssetBundleOptions.None, BuildTarget.iOS);
        Debug.Log("AssetBundle打包完成,路径:" + outputPath);
    }
}
  • 第三步:运行时加载代码
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using System.Collections;
using UnityEngine.Networking;

public class AssetBundleARLibLoader : MonoBehaviour
{
    public ARObjectManager arObjectManager;
    // 远程AssetBundle下载地址
    public string bundleUrl;

    void Start()
    {
        StartCoroutine(DownloadAndLoadARLib());
    }

    IEnumerator DownloadAndLoadARLib()
    {
        using (UnityWebRequest request = UnityWebRequest.Get(bundleUrl))
        {
            yield return request.SendWebRequest();
            if (request.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError("下载AR库失败:" + request.error);
                yield break;
            }
            byte[] bundleData = request.downloadHandler.data;
            AssetBundle bundle = AssetBundle.LoadFromMemory(bundleData);
            XRReferenceObjectLibrary lib = bundle.LoadAsset<XRReferenceObjectLibrary>("你的XRReferenceObjectLibrary文件名,不需要后缀");
            arObjectManager.referenceLibrary = lib;
            bundle.Unload(false);
            Debug.Log("AR库加载成功");
        }
    }
}

通用注意事项
  • 每次更新.arobject文件后,都要重新导入到XRReferenceObjectLibrary中,再重新打Addressables包或AssetBundle包上传,客户端不需要重新发版即可识别新物体
  • iOS端要确保Info.plist已经配置了NSCameraUsageDescription相机权限说明,否则AR功能无法正常运行
  • 测试阶段可以用本地简易HTTP服务(比如Python内置HTTP服务)验证加载逻辑,跑通后再替换为线上服务器地址

内容的提问来源于stack exchange,提问作者cellino92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:57:02