参照https://blog.csdn.net/weixin_38239050/article/details/88983249
需要的问题大致如图
1.首先新建一个canvas,将官方扫描框fit_to_scan加入其中
2.选中要识别的图片,右键Create > GoogleARCore > AugmentedImageDatabase.
3.右键Create > GoogleARCore > SessionConfig 并命名为ImageSessionConfig
4.将创建的ImageSessionConfig赋值给ARCore Device(从官方实例复制的)
5.创建脚本AugmentedImageVisualizerOverride.cs,代码如下:挂载到对应预制体上
namespace GoogleARCore.Examples.AugmentedImage
{
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using GoogleARCore;
using GoogleARCoreInternal;
using UnityEngine;
public class AugmentedImageVisualizerOverride : MonoBehaviour
{
public AugmentedImage Image;
public void Update()
{
if (Image == null || Image.TrackingState != TrackingState.Tracking)
{
return;
}
}
}
}
6.创建ARCoreImageController.cs 挂载到创建的空物体ARCoreImageController上
namespace GoogleARCore.Examples.AugmentedImage
{
using System.Collections.Generic;
using System.Runtime.InteropServices;
using GoogleARCore;
using UnityEngine;
using UnityEngine.UI;
public class ARCoreImageController : MonoBehaviour
{
[Header("Drag Augmented Image prefab to this")]
public List<AugmentedImageVisualizerOverride> AugmentedImageVisualizerPrefab;
[Header("Drag FitToScanOverlay to this")]
public GameObject FitToScanOverlay;
private Dictionary<int, AugmentedImageVisualizerOverride> m_Visualizers
= new Dictionary<int, AugmentedImageVisualizerOverride>();
private List<AugmentedImage> m_TempAugmentedImages = new List<AugmentedImage>();
public void Update()
{
if (Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}
if (Session.Status != SessionStatus.Tracking)
{
return;
}
Session.GetTrackables<AugmentedImage>(m_TempAugmentedImages, TrackableQueryFilter.Updated);
foreach (var image in m_TempAugmentedImages)
{
Debug.Log("name1111111" + image.Name);
Debug.Log("index1111111" + image.DatabaseIndex);
AugmentedImageVisualizerOverride visualizer = null;
m_Visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
if (image.TrackingState == TrackingState.Tracking && visualizer == null)
{
Debug.Log("name" + image.Name);
Debug.Log("index" + image.DatabaseIndex);
Anchor anchor = image.CreateAnchor(image.CenterPose);
visualizer = AugmentedImageVisualizerPrefab[image.DatabaseIndex];
visualizer.gameObject.SetActive(true);
visualizer.transform.parent = anchor.transform;
visualizer.Image = image;
m_Visualizers.Add(image.DatabaseIndex, visualizer);
}
}
foreach (var visualizer in m_Visualizers.Values)
{
if (visualizer.Image.TrackingState == TrackingState.Tracking)
{
FitToScanOverlay.SetActive(false);
return;
}
}
}
//重置位置方法
public void OnclickRe(int index)
{
AugmentedImageVisualizerOverride visualizer = null;
m_Visualizers.TryGetValue(index, out visualizer);
if (visualizer != null)
{
m_Visualizers.Remove(index);
visualizer.gameObject.SetActive(false);
FitToScanOverlay.SetActive(true);
}
}
}
}
物体太大了有点飘,后续继续修改