EasyAR物品展示、脱卡(简)

1.EasyAR SDK
2.DoTween插件
3.EasyTouch插件


image.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 旋转和缩放模型

你可能感兴趣的:(EasyAR物品展示、脱卡(简))