微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ARCore 对象交互

如何解决ARCore 对象交互

我正在使用 ARCore 跟踪多个图像并在检测到的每个图像上生成多个游戏对象。 我写了类似于此链接内容https://forum.unity.com/threads/ar-foundation-multiple-tracked-image-managers.697625/

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

[RequireComponent(typeof(ARTrackedImageManager))]
public class TrackMultiple : MonoBehavIoUr
{
[Header("The length of this list must match the number of images in Reference Image Library")]
public List<GameObject> ObjectsToPlace;

private int refImageCount;
private Dictionary<string,GameObject> allObjects;
private ARTrackedImageManager arTrackedImageManager;
private IReferenceImageLibrary refLibrary;

void Awake()
{
    arTrackedImageManager = GetComponent<ARTrackedImageManager>();
}

private void OnEnable()
{
    arTrackedImageManager.trackedImagesChanged += OnImageChanged;
}

private void Ondisable()
{
    arTrackedImageManager.trackedImagesChanged -= OnImageChanged;
}

private void Start()
{
    refLibrary = arTrackedImageManager.referenceLibrary;
    refImageCount = refLibrary.count;
    LoadobjectDictionary();
}

void LoadobjectDictionary()
{
    allObjects = new Dictionary<string,GameObject>();
    for (int i = 0; i < refImageCount; i++)
    {
        allObjects.Add(refLibrary[i].name,ObjectsToPlace[i]);
        ObjectsToPlace[i].SetActive(false);
    }
}

void ActivateTrackedobject(string _imageName)
{
    allObjects[_imageName].SetActive(true);
}

public void OnImageChanged(ARTrackedImagesChangedEventArgs _args)
{
    foreach (var addedImage in _args.added)
    {
        ActivateTrackedobject(addedImage.referenceImage.name);
    }

    foreach (var updated in _args.updated)
    {
        allObjects[updated.referenceImage.name].transform.position = updated.transform.position;
        allObjects[updated.referenceImage.name].transform.rotation = updated.transform.rotation;
    }
}

}

然而,我想做的是实现检测到的对象之间的交互。例如,如果检测到猴子和香蕉,“猴子”游戏对象会走向“香蕉”游戏对象。它与 Octagon 4D 应用程序非常相似。 (最多检测到四个游戏对象)

问题是我要生成 30 个游戏对象。如果我使用上面的代码,它必须检查 ARTrackedImageLibrary 中的每个图像,这似乎效率低下。有没有其他方法可以检查是否检测到特定图像?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。