ARFoundation多图识别的一个脚本
(2022-11-27 11:48:30)
标签:
it |
分类: 虚拟现实 |
使用ARFoundation的图像识别发布出来的安卓应用存在一个令初学者挠头的问题——模型始终是背对用户的,虽然可以在3ds
Max等软件中调整其轴心,终归是麻烦。受汪祥春老师《AR开发权威指南基于AR
Foundation》一书的启发,编写如下MultiImageTracking脚本:
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
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);
go.transform.Rotate(new Vector3(0, 180,
0));
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
public class MultiImageTracking : MonoBehaviour
{
#if UNITY_ANDROID
#endif
}
用法:
- 为参考图像库添加参考图像时,须要保证参考图像的命名和三维模型实例的命名完全一致。
- 对AR Session Orgin对象挂载AR Tracked Image Manager脚本和MultiImageTracking脚本。
- AR Tracked Image Manager脚本组件中的Tracked Image Prefab设置为None。
- MultiImageTracking组件中的Game Objects数组用来存储三维模型实例,其个数根据需要设置。