0基础小白用unity+vuforia实现AR随机抽卡/盲盒功能

unity+Vuforia实现海洋动物随机AR盲盒

目录

Vuforia

一、在vuforia上注册许可证

二、添加识别目标图像数据

三、搭建AR程序

四、随机盲盒的进阶AR程序


Vuforia

这是一种AR平台,由PTC公司开发,允许开发人员在线完成图像数据处理,支持识别单个或多个图片(image target)、圆柱形图案(Cylinder)、多边形图案(Multi)、模型(Object)。不需要编程知识也能轻松实现基础的AR效果。

一、在vuforia上注册许可证

1、打开https://developer.vuforia.com/vui/auth/login,邮箱注册并登录
2.点击 Get Basic
 3.自定义填写许可证名字(license Name),勾选复选框,点击confirm
4.此时出现了刚刚申请的许可证,并点击此行
5.恭喜获得AR敲门砖——许可证密码(复制保存备用)

二、添加识别目标图像数据

1、点击Target Manager,点击Add Databaset

2.点击新添加的数据库
3.点击Add target
4.选择的需要扫描识别的目标类型,上传相关内容,点击添加
 (图片要求:Only 8 bit gray scale or 24 bit RGB of file type JPG or PNG are allowed.最大不超过2Mb。尽可能选择特征明显的图片)

5.点击先添加的数据库,可以查看它识别的特征点。(Rating评分越高,代表越容易识别成功)
如果你需要同时识别多个图像,那么你需要在这个数据库添加多个图像数据库,如图添加了图片1和图片2
6.下载数据库:点击Download Database---选择unity editor----Download
你可以勾选特定的图片,再点击下载。如果你需要识别多张图片,务必全部勾选上,或直接download all。

至此,vuforia网站上的所有准备工作已就绪,接下来打开unity,新建3d project

三、搭建AR程序

1.点击顶部菜单栏window---package Manager---在右上方搜索栏搜索Vuforia Engine AR(注意:我用的是unity2019.4.31f1c1版本,其他版本可能会搜索不到)----点击右下角install

2.安装好后,点击左边Hierarchy侧栏下的“+”号,会出现Vuforia Engine---点击AR Camera
 

3.同样的位置Vuforia Engine---点击Image,我们添加一个需要识别的图像(你需要识别多少个就添加多少个,或者复制也可以),添加好后Hierarchy和scene都会出现对应的物品。在Hierarchy双击,画面会放大对应物品。

4.点击AR Camera,在右侧属性栏中点 Open Vuforia Configuration,把之前在Vuforia网站上获取的一串许可证密码(见一、5)粘贴在对应位置。如果你需要同时识别多个图形,还需在同一面板下方修改识别的最大数量(如图)

 5.将之前在Vuforia网站上下载的图像数据库包导入unity,点击import

6.此时再点击左方的image target,右侧属性栏中的Database就可以选择你导入的图片数据库,在Image Target中选择你需要的图片
 

7.添加识别需要生成的模型
举一个简单的例子:如果需要生成系统自带的几何体模型,则在Hierarcht下的“+”号点击3D object---选择你想要添加的几何体。点击生成的几何体,可以在右侧Transform那里调整位置,大小,角度。(在场景中显示模型和图像的相对大小和位置就是实际扫描后的情况)

假如你需要显示其他的模型,首先将模型导入unity(方法和导入图像数据库一样,拖入unity下方project库就可以,但是注意是否有关闭演示),然后找到prefab文件(是模型或者绑定了动画的模型),拖进场景中即可,后续步骤与上述相同。

8.最关键的一步:将cube拖入Image Target中,使Image Target成为它的子物体,就大功告成啦,点击上方的播放按键,就会打开电脑摄像头,放置你设置的目标图案,就可以看见对应的模型啦。如果预设模型有绑定动画的话,扫描后也会动噢。(注意:任何操作只有关闭演示的状态下改变才会有效,就是再点击一下播放按钮)

恭喜你完成了入门操作,现在我们来做一个随机盲盒的进阶AR程序:

四、随机盲盒的进阶AR程序

首先我们先来了解一下基础的知识点:每一个物体的主要功能都是由一个个组件进行控制,比如transform组件控制它的大小,角度,位置。animator组件控制它的动画,而sripts(脚本)是用来控制物体更复杂的功能

基础准备:按照上述教程把许可证密码和图像数据库准备好并导入unity

1、点击你需要识别的目标图像,右键右边属性栏中的Default Trackable Event Handler,点击Remove Component。(删除这个脚本)

2、在右侧属性栏中点击Add Component---输入script---点击New script---输入tryaha(脚本名字,可以自己换一个)---点击Creat and Add

 3、在project处双击打开刚刚新建的脚本,输入代码(我这里是用visual studio打开的,前提是你安装unity的时候有安装visual studio,没装的可以去unityhub中补充下载,这个写代码会更方便一些。)

using UnityEngine;
using Vuforia;

public class tryaha : MonoBehaviour, ITrackableEventHandler
{
    public GameObject[] objects;  // 要在跟踪目标上显示的模型数组
    private GameObject activeObject;                 // 当前活动的模型
    private TrackableBehaviour trackableBehaviour;   // Vuforia跟踪器

    private void Start()
    {
        // 获取Vuforia的TrackableBehaviour并注册事件处理程序
        trackableBehaviour = GetComponent<TrackableBehaviour>();
        if (trackableBehaviour != null)
            trackableBehaviour.RegisterTrackableEventHandler(this);
    }

    private void OnDestroy()
    {
        // 解除事件处理程序的注册
        if (trackableBehaviour != null)
            trackableBehaviour.UnregisterTrackableEventHandler(this);
    }

    public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            // 找到了跟踪目标
            Debug.Log("Trackable " + trackableBehaviour.TrackableName + " found");
            OnTrackingFound();
        }
        else
        {
            // 丢失了跟踪目标
            Debug.Log("Trackable " + trackableBehaviour.TrackableName + " lost");
            OnTrackingLost();
        }
    }

    private void OnTrackingFound()
    {
        // 首先清除前一个模型
        OnTrackingLost();

        // 随机选择一个模型并将其放置在跟踪目标下方
        int index = Random.Range(0, objects.Length);
        activeObject = Instantiate(objects[index], trackableBehaviour.transform);
        activeObject.transform.localPosition = Vector3.zero;
        activeObject.transform.localRotation = Quaternion.identity;
        activeObject.SetActive(true);
    }

    private void OnTrackingLost()
    {
        // 如果有一个模型正在显示,则销毁它
        if (activeObject != null)
        {
            Destroy(activeObject);
            activeObject = null;
        }
    }
}

 4、在unity中,点击要识别的图像,在右侧面板中的tryaha中,size代表要随机的模型数量,将需要随机出现的模型预设一个个从project拖入场景中,同时,也把这些模型一个个拖入Element中。

5、选中这些模型,在面板中取消勾选,这样运行的时候才会识别到目标图像之后才出现。大功告成啦,试试运行看看!

 PS:此方法不一定是最优解,欢迎各位大佬评论讨论、纠错

创作不易,如果有帮助的话希望得到您的点赞收藏,支持一下噢!

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值