码蚁君AR实战-圣诞礼物EasyAR+Unity

Posted antgan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码蚁君AR实战-圣诞礼物EasyAR+Unity相关的知识,希望对你有一定的参考价值。

文章目录


AR实战-圣诞礼物[EasyAR+Unity]

hey yo,圣诞节又快到了,哎!又在为送什么礼物而头疼!!
当我准备打开淘宝搜“圣诞音乐盒”送给女盆友时,AR礼物成功引起了我的注意……

看这效果图!!卧槽!!酷炫吊炸天!!

她肯定会喜欢的!(?)

想学吗!码蚁君教你如何把AR圣诞礼物送给她!!


Demo项目下载地址:
https://pan.baidu.com/s/1LQVJJ8y5KAP45_wgzsi0Dw
提取码: 9m3q


一、准备工作

在开发前,需要准备一些环境,本案例用的是EasyAR+Unity。

1.1 开发环境

名称版本下载地址
Easy AREasyARSense_3.0.1-final_BasicEasyAR3.0.1官网下载
Unity中国增强版 2018.4.8c3Unity Hub中国增强版下载

1.2 打包工具

Unity有打包安卓apk的功能,但是前提是有Java开发环境和安卓的SDK,我这里用到的是java1.8,如果不会的请戳菜鸟教程-Java安装

1.3 EasyAR注册

因为要使用到EasyAR提供的AR云识别功能,所以首先需要注册一个新的账号,每个新账号可以免费使用一个月的云识别功能

先到EasyAR官网注册一个账号,登录后点开发者中心,新建一个应用,获取License Key

新建云识别图库,刚开始是免费一个月试用,够学习玩耍了~
该图库拿来上传你需要识别的目标卡片,当应用的摄像头拍到该物体就会回调会Unity的脚本里,后面会详细讲解~

新建完图库,得到了这三样东西,是调起AR Camera的必要参数:

  1. Cloud Key
  2. Cloud Secret
  3. Cloud URLs

1.4 一个对象

如果没有对象的话,可以关掉这个教程了!!不适合你!!

哼唧,开个玩笑!嘻嘻。
至此,准备工作已经全部做完啦~准备制作圣诞礼物啦!!


二、Unity开发

2.1 新建工程

打开Unity,新建一个3d工程,双击导入EasyAR的UnityPackage(EasyARSense_3.0.1-final_Basic.unitypackage).
然后把事先准备好的模型统统导进去!

DEMO内含模型有[\\ar-gift\\Assets\\Resources],DEMO下载地址在最上面!!:

  1. HatsuneMikuModel(初音)
  2. KTK_Effect_Samples(粒子爆炸)
  3. ChristmasCustomizationBox(圣诞礼物)

初音换成你喜欢的任何模型都可以~】

我不会告诉你最初我想捏一个这样的3d模型,可惜手法不行,捏得太丑了就放弃了。

什么???你问我为什么比中指??看清楚好吗!! 这是

Fuck爆炸无敌+喜欢你)的意思!!哼!!

回归正题,导入完毕,目录结构如下:

2.2 搭建场景Scene

找到EasyAR提供的官方Sample,找到这个HelloAR_ImageTarget_Cloud.unity.
在项目根目录下,新建自己的Scene,把刚刚EasyAr场景下的所有组件复制到自己的场景中。

  • Main Camera
  • Directional Light
  • EasyAR_Setup
  • CloudRecognizer

2.3 配置License Key和云识别授权

配置License Key

把刚刚从EasyAR那得到的SDK License Key复制一下,粘贴到Assets/EasyAR/Common/Resources/EasyARKey.asset


配置云识别参数

复制Cloud Key、Cloud Secret、Cloud URLs中的Client-end地址(因为应用是作为客户端)到场景中的CloudRecognizer组件中。

2.4 初跑demo

PC上运行应用需要有摄像头,如果是笔记本自带没问题,如果是台式机,可以像我一样,花了19块买了个超级渣的摄像头。

云识别图库那上传一张目标识别卡片,这个宽度是指现实卡片的宽度,填个差不多的就行了。

回来Unity初跑一下demo,用摄像头拍着你的目标卡片,如果不出意外的话,会出现这个玩意儿。

如果出现了这个预设模型,已经成功了一半啦!!


2.5 编写脚本,控制模型

首先,思考一下,当你摄像头拍到目标卡片后,请求EasyAR服务,成功识别后,应该会回调到一个地方,初始化你的模型代码。

修改扫描后首次出现的模型

打开 /Assets/EasyAR/Scripts/CloudRecognizeBehaviour.cs 文件:
在Open方法下有初始化模型的代码,把它替换成圣诞礼物盒的模型路径

现在再扫目标卡片,出现的就是圣诞礼物盒子啦!~

圣诞礼物盒添加点击事件

我也是刚学Unity,点击事件用的是最简单的,给GameObject添加Collider,然后监听OnMouseDown,可能也很多种方式添加点击事件哈!!

找到礼物盒的预设,点击打开,给礼物添加Box Collider Component。
/Assets/Resources/ChristmasCustomizationBox/Gifts/Prefabs/Box01
缩放成和盒子差不多大小,如图

新建脚本,/Assets/Scripts/GiftController.cs,编写点击礼物盒后的效果。

GiftController.cs代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class GiftController : MonoBehaviour


    void OnMouseDown()
    
        //爆炸粒子效果1加载
        var explosion1 = Instantiate(Resources.Load("KTK_Effect_Samples/Prefab/Eff_Burst_2_oneShot", typeof(GameObject)) as GameObject);
        explosion1.transform.SetParent(this.transform.parent);
        explosion1.gameObject.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        explosion1.gameObject.transform.localPosition = new Vector3(0, 0, 0);
        explosion1.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);
        
        //爆炸粒子效果2加载
        var explosion2 = Instantiate(Resources.Load("KTK_Effect_Samples/Prefab/Eff_Heal_2_oneShot", typeof(GameObject)) as GameObject);
        explosion2.transform.SetParent(this.transform.parent);
        explosion2.gameObject.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        explosion2.gameObject.transform.localPosition = new Vector3(0, 0, 0);
        explosion2.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);

        //延迟1s销毁粒子
        Destroy(explosion1, 1f);
        Destroy(explosion2, 1f);

        //初音模型加载
        var hatsuneRumba = Instantiate(Resources.Load("HatsuneMikuModel/HatsuneRumbaPrefab", typeof(GameObject)) as GameObject);
        hatsuneRumba.transform.SetParent(this.transform.parent);
        hatsuneRumba.gameObject.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f);
        hatsuneRumba.gameObject.transform.localRotation = Quaternion.Euler(90, 180, 0);
        hatsuneRumba.gameObject.transform.localPosition = new Vector3(0, 0, 0);

        //二维码加载
        var wechatCode = Instantiate(Resources.Load("WechatCode/WechatCode", typeof(GameObject)) as GameObject);
        wechatCode.transform.SetParent(this.transform.parent);
        wechatCode.gameObject.transform.localScale = new Vector3(0.04f, 0.04f, 0.04f);
        wechatCode.gameObject.transform.localRotation = Quaternion.Euler(-90, 0, 0);
        wechatCode.gameObject.transform.localPosition = new Vector3(0.5f, 0, -0.5f);

        //隐藏箱子
        Destroy(this.transform.gameObject);
    


(我觉得礼物盒静止不动很丑,我自己添加了些动画在里面,所以会有个Animator在那)

把脚本添加到Box01预设上,大功告成!!运行扫描目标卡片,就会出现漂亮的圣诞礼物盒啦!


三、打包成可运行程序

Unity打包安卓,这里就不赘述啦!网上很多教程,简单来说步骤为:
Build Setting -> 切换成Android -> 填写好Package Name(这里的包名要和License Key那的包一样的名) -> Build

  • 前提是已经有Java和安卓SDK的环境哦!

最后,我拿着我的手机,让女盆友去扫她的工牌,她说她很喜欢
我很满意


如果觉得有用好玩的话,关注码蚁君,更多好玩等着你~

以上是关于码蚁君AR实战-圣诞礼物EasyAR+Unity的主要内容,如果未能解决你的问题,请参考以下文章

EasyAR 开发实例---AR礼物(简单demo)

Android插件式开发+unity3d+EasyAr完成android实现ar插件式功能

EasyAR实战项目图像识别+模型交互(全网首发,保姆级教程)

Unity Vuforia(高通)AR

EasyAR 开发教程系列1--小试牛刀

Unity - 将 Unity 更新到 2021.1.18f1 后,EasyAR 3.1.0 网络摄像头黑屏