ARFoundation多图识别的一个脚本

使用ARFoundation的图像识别发布出来的安卓应用存在一个令初学者挠头的问题——模型始终是背对用户的,虽然可以在3ds Max等软件中调整其轴心,终归是麻烦。受汪祥春老师《AR开发权威指南基于AR Foundation》一书的启发,编写如下MultiImageTracking脚本:

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

public class MultiImageTracking : MonoBehaviour
{
    ARTrackedImageManager ImgTrackedManager;
    private Dictionary<string, GameObject> mPrefabs =  new Dictionary<string, GameObject>();
    public GameObject[] gameObjects;

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

    void Start()
    {        
        foreach(var go in gameObjects)
        {
            mPrefabs.Add(go.name, go);
        }

    }

    private void OnEnable()
    {
        ImgTrackedManager.trackedImagesChanged += OnTrackedImagesChanged;
    }
    void OnDisable()
    {
        ImgTrackedManager.trackedImagesChanged -= OnTrackedImagesChanged;
    }
    void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
    {
        foreach (var trackedImage in eventArgs.added)
        {
            OnImagesChanged(trackedImage);
        }
    }

    private void OnImagesChanged(ARTrackedImage referenceImage)
    {
        GameObject go = Instantiate(mPrefabs[referenceImage.referenceImage.name], referenceImage.transform);
#if UNITY_ANDROID
        go.transform.Rotate(new Vector3(0, 180, 0));
#endif

    }
}

用法:

  1. 为参考图像库添加参考图像时,须要保证参考图像的命名和三维模型实例的命名完全一致。
  2. 对AR Session Orgin对象挂载AR Tracked Image Manager脚本和MultiImageTracking脚本。
  3. AR Tracked Image Manager脚本组件中的Tracked Image Prefab设置为None。
  4. MultiImageTracking组件中的Game Objects数组用来存储三维模型实例,其个数根据需要设置。如下图所示

猜你喜欢

转载自blog.csdn.net/weixin_42350593/article/details/128061882