Unity3D+EasyAR实现模型脱卡效果

      最近做的实验,最终选定用EasyAR主要是因为它比Vuforia更快捷一些,从我之前写的两篇文章能明显对比出来,而且EasyAR是开源免费的,没有水印。

研究了一下模型如何脱卡实现VR效果,接下来给大家分享一下:

        首先要明白一点就是所谓的脱卡并不是真正意义上的脱卡,什么意思呢?就是说并不是你手机从图片上移开之后,3D模型跟着移动,而是你在unity3D的Camera下预设了一个几乎不可见的物体,当手机从图片上移开的时候,程序记录下3D模型的属性,同时将这个属性赋予给预设物体,这样预设物体就变成了3D模型,从而来实现脱卡的效果。

        大致思路:当卡片离开摄像头时间,ImageTarget-Image的SetActive (false),所以其子物体(model)也就不显示了,因此解决的办法就是在Target (false)时间将模型放到一个合适的位置,这样就能实现脱卡,当Target (true)时,再回到原来位置。

步骤如下:

1、新建一个项目或者scenes,删除Main Camera,将EasyAR_Startup拖入到Hierarchy处,并在Inspector处加入密钥(前面的文章已经说了如何做,可以去看详情);

2、将ImageTarget拖入Hierarchy处(可在如下图处寻找ImageTarget);

            

3、为ImageTarget创建Target图片(此步骤看上述超链接的文章);

4、在ImageTarget处添加一个GameObject(Cube),坐标大小调整好,直接Ctrl+D复制一个相同的,然后拖入到AR Camera下,重命名为CubeT,此时不需要调整任何坐标和大小,因为在复制的时候,它就已经自动调整好了;

            

5、如下图,在ImageTarget同级处创建一个GameObject(我建立的是一个球,将其scale设置到0.001,肉眼几乎不可见),我起名为NoImageTargetShow,CubeT是脱卡后的最佳位置,这个位置的模型不会移动,永远都在屏幕固定位置。此空物体用来保存模型的最佳位置和角度 ,NoImageTargetShow是模型在卡片上的最佳位置 );

            

6、建立C#脚本代码如下:

using UnityEngine; 
using System.Collections; 
public class NoImageTargetShow : MonoBehaviour { 
    public GameObject ModelOfAugmenter; 
    public GameObject ImageTarget;
    private bool HasFound = false; // Use this for initialization 
    void Start () {
        ModelOfAugmenter.SetActive (false);
    } // Update is called once per frame 
   void Update () { 
         if (ImageTarget.activeSelf == true) {
            HasFound = true;
            ModelOfAugmenter.SetActive (false);
        } 
        if (ImageTarget.activeSelf == false && HasFound == true) {
            ModelOfAugmenter.SetActive (true);
        }
    }
}

7、将脚本绑定至NoImageTargetShow上,单击NoImageTargetShow,如下图Inspector红框处,需要将CubeT和ImageTarget拖入其中即可。

            

8、演示结果:有卡片的时候,模型在卡片上,脱卡后,模型在固定的屏幕位置。

               

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值