当前位置:   article > 正文

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

unity 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中补充下载,这个写代码会更方便一些。)

  1. using UnityEngine;
  2. using Vuforia;
  3. public class tryaha : MonoBehaviour, ITrackableEventHandler
  4. {
  5. public GameObject[] objects; // 要在跟踪目标上显示的模型数组
  6. private GameObject activeObject; // 当前活动的模型
  7. private TrackableBehaviour trackableBehaviour; // Vuforia跟踪器
  8. private void Start()
  9. {
  10. // 获取Vuforia的TrackableBehaviour并注册事件处理程序
  11. trackableBehaviour = GetComponent<TrackableBehaviour>();
  12. if (trackableBehaviour != null)
  13. trackableBehaviour.RegisterTrackableEventHandler(this);
  14. }
  15. private void OnDestroy()
  16. {
  17. // 解除事件处理程序的注册
  18. if (trackableBehaviour != null)
  19. trackableBehaviour.UnregisterTrackableEventHandler(this);
  20. }
  21. public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
  22. {
  23. if (newStatus == TrackableBehaviour.Status.DETECTED ||
  24. newStatus == TrackableBehaviour.Status.TRACKED ||
  25. newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
  26. {
  27. // 找到了跟踪目标
  28. Debug.Log("Trackable " + trackableBehaviour.TrackableName + " found");
  29. OnTrackingFound();
  30. }
  31. else
  32. {
  33. // 丢失了跟踪目标
  34. Debug.Log("Trackable " + trackableBehaviour.TrackableName + " lost");
  35. OnTrackingLost();
  36. }
  37. }
  38. private void OnTrackingFound()
  39. {
  40. // 首先清除前一个模型
  41. OnTrackingLost();
  42. // 随机选择一个模型并将其放置在跟踪目标下方
  43. int index = Random.Range(0, objects.Length);
  44. activeObject = Instantiate(objects[index], trackableBehaviour.transform);
  45. activeObject.transform.localPosition = Vector3.zero;
  46. activeObject.transform.localRotation = Quaternion.identity;
  47. activeObject.SetActive(true);
  48. }
  49. private void OnTrackingLost()
  50. {
  51. // 如果有一个模型正在显示,则销毁它
  52. if (activeObject != null)
  53. {
  54. Destroy(activeObject);
  55. activeObject = null;
  56. }
  57. }
  58. }

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/626312
推荐阅读
相关标签
  

闽ICP备14008679号