1.EasyAR SDK
2.DoTween插件
3.EasyTouch插件
![](https://img.haomeiwen.com/i5117842/48ce88e9b683839f.png)
1.EsayAR 基本操作请参考EasyAR文档。
2.将 EasyAR_Startup 与ImageTarget预设体放入场景。
在ARCamera下新建Cube命名“zhenF”,Mesh去掉。
在zhenF下新建空物体GreatTransform,用于脱卡时的最佳位置。
在TargetTarget下新建空物体TargetTransform,用于扫描卡片时物体的最佳位置。
将物体放入ImageTarget下,场景中调整位置。
3.tuoka 挂载脚本ZSetactive
用于脱卡时显示
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
public class ZSetactive : MonoBehaviour
{
public Button Btn_Back;
public Transform GreatTransfrom; //脱卡后最佳位置
public GameObject zhenf; //模型脱卡时存放位置
public Transform[] TargetTransfrom; //模型在卡片上的最佳位置
public GameObject[] Target; //卡片
public GameObject[] zhen; //模型
Tweener tw1, tw2;
void Start()
{
for (int i = 0; i < zhen.Length; i++)
{ //所有模型初始化全部不显示
zhen[i].SetActive(false);
}
}
public void tiaozheng() //模型倾斜时调整最佳位置
{
GreatTransfrom.localPosition = new Vector3(0f, 0f, 0f);
GreatTransfrom.localRotation = Quaternion.identity;
for (int i = 0; i < zhen.Length; i++)
{
zhen[i].transform.localPosition = GreatTransfrom.localPosition;
//zhen[i].transform.localRotation = GreatTransfrom.localRotation;
}
}
private void OnEnable()
{
Btn_Back.onClick.AddListener(clickBtn_Back);
}
private void OnDisable()
{
Btn_Back.onClick.RemoveListener(clickBtn_Back);
}
void Update()
{
WhoShouldShow(); //哪个模型应该显示
TargetT(); //有卡片时
TargetF(); //无卡片时
}
int index = -1;
void WhoShouldShow() //哪个模型应该显示
{
for (int i = 0; i < Target.Length; i++)
{
if (Target[i].activeSelf == true)
{
zhen[i].SetActive(true);
index = i;
}
if (i != index)
{
zhen[i].SetActive(false);
}
}
}
void TargetT() //不脱卡
{
for (int i = 0; i < Target.Length; i++)
{
tw1 = zhen[i].transform.DOMove(TargetTransfrom[i].position, 1f).SetAutoKill(false);
tw1.Pause();
if (Target[i].activeSelf == true)
{
zhen[i].transform.parent = Target[i].transform;
//zhen[i].transform.position = TargetTransfrom[i].position;
tw1play();
}
}
}
void TargetF() //脱卡
{
for (int i = 0; i < Target.Length; i++)
{
tw2= zhen[i].transform.DOMove(GreatTransfrom.position, 1f).SetAutoKill(false);
tw2.Pause();
if (Target[i].activeSelf == false)
{
zhen[i].transform.parent = zhenf.transform;
//zhen[i].transform.localPosition = GreatTransfrom.localPosition;
tw2play();
}
}
tiaozheng();
}
void clickBtn_Back()
{
for (int i = 0; i < Target.Length; i++)
{
if (Target[i].activeSelf == true)
{
zhen[i].transform.rotation= TargetTransfrom[i].rotation;
zhen[i].transform.localScale = TargetTransfrom[i].localScale;
}
}
for (int i = 0; i < Target.Length; i++)
{
if (Target[i].activeSelf == false)
{
zhen[i].transform.rotation = GreatTransfrom.rotation;
zhen[i].transform.localScale = GreatTransfrom.localScale;
}
}
}
void tw1play()
{
tw1.PlayForward();
}
void tw2play()
{
tw2.PlayForward();
}
}
4.物体挂载ScaleAndRotate
用于物体旋转缩放查看(简单)
具体请参考Unity 旋转和缩放模型
网友评论