unity3d 如何将运行时图像添加到Unity中的参考图像库

pgvzfuti  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(197)

我使用的是2020.3.20f1版本的Unity,我想创建一个AR应用程序。在我的应用程序中,参考图像库通过添加项目文件夹中包含的一些图像来更改运行时。
这是我的代码:”

using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
using System;
using System.IO;

public class RuntimeImageLoader : MonoBehaviour
{
    public ARTrackedImageManager trackedImageManager;
    public string imagesFolderName = "RuntimeImages";

    private void Start()
    {
        // Get the runtime reference image library
        var referenceLibrary = trackedImageManager.referenceLibrary;

        // Load images from the specified folder
        var imagesFolder = $"{Application.dataPath}/{imagesFolderName}";
        var imageFiles = System.IO.Directory.GetFiles(imagesFolder);

        foreach (var file in imageFiles)
        {
            // Load the image and add it to the reference library
            var imageData = System.IO.File.ReadAllBytes(file);
            var texture = new Texture2D(2, 2);
            texture.LoadImage(imageData);

            var imageGuid = System.Guid.NewGuid();
            var guidBytes = imageGuid.ToByteArray();
            var serializableGuid = new UnityEngine.XR.ARSubsystems.SerializableGuid(
                BitConverter.ToUInt64(guidBytes, 8),
                BitConverter.ToUInt64(guidBytes, 0)
            );
            var runtimeImage = new XRReferenceImage(
                serializableGuid,
                serializableGuid,
                new Vector2(texture.width, texture.height) / 1000f, // Replace with the actual size of your image
                Path.GetFileNameWithoutExtension(file),
                texture
            );

            
            ((XRReferenceImageLibrary)referenceLibrary).Add(runtimeImage);
        }
    }

但这会产生此错误:
Assets/RuntimeImageLoader.cs(43,57):错误CS1061:“XRReferenceImageLibrary”不包含“Add”的定义,并且找不到接受类型为“XRReferenceImageLibrary”的第一个参数的可访问扩展方法“Add”(是否缺少using指令或程序集引用?)
我也试过referenceLibrary.Add(runtimeImage,但它不工作。
如何纠正此错误?

ljo96ir5

ljo96ir51#

根据Unity文档,XRReferenceImageLibrary在运行时是不可变的集合。这意味着您不能更改数据。
来自文档(here):
映像库在运行时是不可变的。要通过编辑器脚本创建和操作映像库,请参阅XRReferenceImageLibraryExtensions中的扩展方法。如果需要在运行时改变库,请参阅MutableRuntimeReferenceImageLibrary。
看起来有一种类型你可以在运行时修改,叫做MutableRuntimeReferenceImageLibrary。但是你的AR是否支持它并不一定。我建议你查看这些类型的文档,以确定你的AR是否支持它以及如何检索它。

相关问题