新浪博客

ARFoundation多图识别的一个脚本

2022-11-27 11:48阅读:
使用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 mPrefabs = new Dictionary();
public GameObject[] gameObjects;
private void Awake()
{
ImgTrackedManager = GetComponent();
}
void Start()
{
foreach(var go in gameObjects)
{
mPrefabs.Add(go.name, go);
}
}
private void OnEn
able()
{
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数组用来存储三维模型实例,其个数根据需要设置。

我的更多文章

下载客户端阅读体验更佳

APP专享