场景搭建:
你可以把我的代码发给AI,去理解
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
using TMPro;
using UnityEngine.Events;
public class ImageARmanager : MonoBehaviour
{
[Header("定义一个回调函数入口,会在外部面板显示")]
public UnityEvent Youhanshul;
#region
// 实现识别图库中的某张图后,克隆对应模型
[Header("存储AR图像识别组件")]
public ARTrackedImageManager oneImageARmanager;
[Header("存储AR图像库")]
public XRReferenceImageLibrary oneARLibra;
public GameObject[] OneAMuban;
public TextMeshProUGUI onetip;
private void OnEnable()
{
oneImageARmanager.trackedImagesChanged += OneImageARmanager_trackedImagesChanged;
}
void OnDisable()
{
oneImageARmanager.trackedImagesChanged -= OneImageARmanager_trackedImagesChanged;
}
#endregion
private void OneImageARmanager_trackedImagesChanged(ARTrackedImagesChangedEventArgs obj)
{
GameObject Tempobj;
onetip.text = "识别到图";
Youhanshul.Invoke();
foreach (var oneImage in obj.added)
{
onetip.text = "开始遍历进入摄像头的图"+ obj.added[0].name+ oneImage.referenceImage.name;
if (oneImage.referenceImage.name == "A")
{
onetip.text = "识别到A图,开始克隆";
Debug.Log("我找到一张名字叫A的图片,在所有进入摄像头的图片中");
Tempobj= GameObject.Instantiate(OneAMuban[0], oneImage.transform.position, oneImage.transform.rotation,oneImage.transform);
onetip.text = "克隆完毕";
onetip.text = "克隆的物体坐标"+ Tempobj.transform.position;
Tempobj.transform.localPosition = Vector3.zero; // 重置位置
Tempobj.transform.localRotation = Quaternion.identity; // 重置旋转
}
if (oneImage.referenceImage.name == "B")
{
onetip.text = "识别到B图,开始克隆";
Debug.Log("我找到一张名字叫B的图片,在所有进入摄像头的图片中");
Tempobj = GameObject.Instantiate(OneAMuban[1], oneImage.transform.position, oneImage.transform.rotation, oneImage.transform);
onetip.text = "克隆完毕b";
Tempobj.transform.localPosition = Vector3.zero; // 重置位置
Tempobj.transform.localRotation = Quaternion.identity; // 重置旋转
}
}
//更新图片位置
foreach (var updatedImage in obj.updated)
{
bool isVisible = updatedImage.trackingState == TrackingState.Tracking;
if (updatedImage.transform.childCount > 0)
{
updatedImage.transform.GetChild(0).gameObject.SetActive(isVisible);
}
}
//销毁离开图片的子物体
foreach (var OneLeaveImage in obj.removed)
{
//销毁离开的那个图片子物体
onetip.text = "销毁离开的那个图片子物体";
if (OneLeaveImage.transform.childCount > 0)
{
Destroy(OneLeaveImage.transform.GetChild(0).gameObject);
}
}
}
}