第一部分:前言
实现功能:打开APP或运行该demo后,会从天而降红包,有些红包是空的(大一点的),抖动的红包里面“有钱”,点击之后会产生相应的交互。
 
第二部分:预览
所用到的资源:
 
红包模型:链接: https://pan.baidu.com/s/1pKWvqsj 密码: x4h2
粒子特效:链接: https://pan.baidu.com/s/1eSxIbmi 密码: 5suh
 
NGUI插件:链接: https://pan.baidu.com/s/1hsMa0Ig 密码: uh3a
 
第三部分:开发环境搭建
首先我们设置下开发环境,我们最终导出的是 APK文件,所以我们playSetting为Android,并修改屏幕大小为480x800。
接着我们下载EasyAR SDK (unity版本)并导入到unity中,并到官网申请开发时所用到的Key值,在unity中,删除原有的Camera,将EasyAR_Startup 拖入到面板中,并将key之填入。注意:在这里我们并没有用到图像的识别,因此没必要用ImageTarget。
 
<ignore_js_op> 
 
接下来,我们准备红包模型,有些人在导入红包模型的过程中可能会遇到贴图丢失的情况,在这里,我们只需将红包贴图重新挂到材质上即可。
 
<ignore_js_op> 
 
在这里,我们准备两个红包预制体,来实现不同的交互。并修改它们的大小以便区分。在这里我给他们命名分别为Hong,HongBao。具体详细参数如下
Hong:
 
 
HongBao:
 
<ignore_js_op> 
 
<ignore_js_op> 
 
接下来,我们给两个红包添加Tag,分别为Hong,HongBao。
<ignore_js_op> <ignore_js_op> 
 
为两个红包预制体添加BoxCollider,并勾选Trigger。大小自己调节。
 
最后,我们为我们所交互的那个红包HongBao添加个动画。选中它,并在菜单栏Window-,打开后,点击Create,并保存命名。
 
<ignore_js_op> 
 
接着点Add Property,选Transfrom-Scale
<ignore_js_op> 
接下来,在中间某一帧选中,并改变大小,值应该大一点,这样才会有抖动的效果:
 
<ignore_js_op> 
 
 
第四部分:编写代码产生AR红包
首先我们先创建几个随机点,分别命名point1,point2,point3,这是红包所降落的位置。参考数值如下:大家可以自行设置
point1:
 
<ignore_js_op> 
 
point2:
<ignore_js_op> 
 
point3:
<ignore_js_op> 
接下来,我们创建一段代码来使得红包可以降落,在这里用Translate来实现,当然大家可以用其他方法,比如添加Rigidbody,给个受力也可以,不过那样有点麻烦。(补充:当红包的Z坐标小于-8时,就销毁)
 
[AppleScript] 纯文本查看 复制代码
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Move : MonoBehaviour {
        public GameObject par;
        // Use this for initialization
        void Start () {
                 
        }
         
        // Update is called once per frame
        void Update () {
                transform.Translate (-transform.forward*2f*Time.deltaTime);
                if (transform.position.z < -8f) {
                        Destroy (this.gameObject);
                }
        }
}
接下来,创建CreateHong空物体,在上面挂上CreateHong.cs脚本,实现随机产生红包。
[AppleScript] 纯文本查看 复制代码
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using UnityEngine;
using System.Collections;
 
public class CreateHong : MonoBehaviour {
        public Transform[] points;
        public GameObject[] hongbaos;
        private int index;
                 
        // Use this for initialization
        void Start () {
                 
                InvokeRepeating ("CreateHongbao",1f,1f);
        }
         
        // Update is called once per frame
        void Update () {
         
        }
        void CreateHongbao(){
                 
                        int i = Random.Range (0, 10);
                        if (i > 1) {
                                index = 0;
                        } else {
                                index = 1;
                        }
                        GameObject go = GameObject.Instantiate (hongbaos [index], points [Random.Range (0, points.Length)].position + new Vector3 (Random.Range (-0.5f, 0.5f), 0, 0), Quaternion.identity) as GameObject;
                        go.transform.Rotate (new Vector3 (270, 180, 0));
                         
                }
        }
                 
         
}
第五部分:实现交互
我们实现当点击普通红包时由于时间关系我没做任何处理,当点击抖动红包时我们产生炫酷的粒子特效,将如下方法添加到Move.cs中
[AppleScript] 纯文本查看 复制代码
 
1
2
3
4
5
6
7
8
9
void OnMouseDown()
        {
                if (gameObject.tag == "Hong") {
                        Debug.Log ("ddd");
                } else if(gameObject.tag=="HongBao") {
                        CreateHong._instace.isCreate = false;
                        GameObject go=GameObject.Instantiate (par,gameObject.transform.position,Quaternion.identity) as GameObject;
                        Destroy (go,2f);
                }
        }
并在2s后销毁该粒子
好了,接下来,我们用NGUI插件实现产生优惠卷或红包(这不重要,重要的是实现思路与方法)
效果如下
首先,我们创建Sprite
 
接着添加TweenScale
 
<ignore_js_op> 
 
注意:
 

<ignore_js_op>

 

<ignore_js_op>

 
接下来我们使用单例模式在CreateHong.cs脚本中实现:
首先声明:
public static CreateHong _instace;
接着:
[AppleScript] 纯文本查看 复制代码
 
1
2
3
4
void Awake()
        {
                _instace = this;
                 
        }
然后实现方法供外界调用
[AppleScript] 纯文本查看 复制代码
 
1
2
3
4
public void PlayScale()
        {
                daxiao.gameObject.SetActive (true);
                daxiao.PlayForward ();
        }
在Move.CS中实现:
[AppleScript] 纯文本查看 复制代码
 
01
02
03
04
05
06
07
08
09
10
void OnMouseDown()
        {
                if (gameObject.tag == "Hong") {
                        Debug.Log ("ddd");
                } else if(gameObject.tag=="HongBao") {
                        CreateHong._instace.isCreate = false;
                        GameObject go=GameObject.Instantiate (par,gameObject.transform.position,Quaternion.identity) as GameObject;
                        Destroy (go,2f);
                        CreateHong._instace.PlayScale ();
                }
        }
 
第六部分:完整代码
 
 
Move.cs(挂在红包上):
[AppleScript] 纯文本查看 复制代码
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Move : MonoBehaviour {
        public GameObject par;
        // Use this for initialization
        void Start () {
                 
        }
         
        // Update is called once per frame
        void Update () {
                transform.Translate (-transform.forward*2f*Time.deltaTime);
                if (transform.position.z < -8f) {
                        Destroy (this.gameObject);
                }
        }
        void OnMouseDown()
        {
                if (gameObject.tag == "Hong") {
                        Debug.Log ("ddd");
                } else if(gameObject.tag=="HongBao") {
                        CreateHong._instace.isCreate = false;
                        GameObject go=GameObject.Instantiate (par,gameObject.transform.position,Quaternion.identity) as GameObject;
                        Destroy (go,2f);
                        CreateHong._instace.PlayScale ();
                }
        }
}
CreateHong.cs:
[AppleScript] 纯文本查看 复制代码
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using UnityEngine;
using System.Collections;
 
public class CreateHong : MonoBehaviour {
        public static CreateHong _instace;
        public Transform[] points;
        public GameObject[] hongbaos;
        private int index;
        public bool isCreate;
        public TweenScale daxiao;
        void Awake()
        {
                _instace = this;
                isCreate = true;
        }
                 
        // Use this for initialization
        void Start () {
                 
                InvokeRepeating ("CreateHongbao",1f,1f);
        }
         
        // Update is called once per frame
        void Update () {
         
        }
        void CreateHongbao(){
                if (isCreate) {
                        int i = Random.Range (0, 10);
                        if (i > 1) {
                                index = 0;
                        } else {
                                index = 1;
                        }
                        GameObject go = GameObject.Instantiate (hongbaos [index], points [Random.Range (0, points.Length)].position + new Vector3 (Random.Range (-0.5f, 0.5f), 0, 0), Quaternion.identity) as GameObject;
                        go.transform.Rotate (new Vector3 (270, 180, 0));
                         
                } else {
                        return;
                }
        }
                 
        public void PlayScale()
        {
                daxiao.gameObject.SetActive (true);
                daxiao.PlayForward ();
        }
}

Unity -- 用EasyAR制作出AR红包的更多相关文章

  1. 支付宝AR红包引出Python中的PIL小试

    这两天支付宝AR红包火了,周围的同学全在玩.可是我一直在想这个原理是什么?通过请教大神和思考,知道了它有两个限定条件:GPS地理位置和图片的识别.所以,只要我们有了这两个限定条件,就不难进行该红包的破 ...

  2. 说一说关于破解支付宝AR红包的事

    当朋友圈的你们才开始分享支付宝AR红包的消息的时候,我已经对它动了一二三四次歪脑筋了,虽然事实证明并不是那么顺利,至今我也只在电脑前识别出5个不知道在哪里的红包,其中一个还因为定位信息不符开不了. 昨 ...

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

    一个节日礼物效果 --显示模型 在本次的案例中,我使用的是unity5.6.3版本,EasyAR 为2.0.(用1.0的版本,在渲染那块有问题) [导入SDK]到EasyAR官网(http://www ...

  4. Unity -- 使用easyAR的基础教程

    “三人行,必有我师焉”,抱着共同学习进步的态度,和大家一起交流下EasyAR的用法.有不足的地方,欢迎指出!大家都知道,今年的QQ,支付宝,都用到了AR的技术,扫描一张图片,就会出现虚拟模型,及其想要 ...

  5. Unity+高通Vuforia SDK——AR

    一.AR概念: 增强现实(Augmented Reality,简称AR),是在虚拟现实的基础上发展起来的新技术,也被称之为混合现实.是通过计算机系统提供的信息增加用户对现实世界感知的技术,将虚拟的信息 ...

  6. unity发布ios高通AR的问题

    1)缺少引用,无法找到vuforiaBehavior 原因:Windows下的工程,直接考到mac下,导致unity自带插件(2017)有问题 解决:首先在playerSettings-xrSetti ...

  7. GJM :Unity使用EasyAR实现脱卡功能

    首先说下大致思路当卡片离开摄像头时间,ImageTarget-Image的SetActive (false),所以其子物体(model)也就不显示了,因此解决的办法就是在Target (false)时 ...

  8. Python + PIL 处理支付宝AR红包

    思路比较简单:1.对图片进行锐化处理:2.设(r_h, g_h, b_h)为支付宝遮罩黑条的RGB值,以此为中心,查找半径为Diff_radius的范围内所有的色值: 3.对每一行符合步骤2的像素点个 ...

  9. 基于Unity的AR开发初探:第一个AR应用程序

    记得2014年曾经写过一个Unity3D的游戏开发初探系列,收获了很多好评和鼓励,不过自那之后再也没有用过Unity,因为没有相关的需求让我能用到.目前公司有一个App开发的需求,想要融合一下AR到A ...

随机推荐

  1. C指针问题

    <!DOCTYPE html> 多级c指针传值问题 /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) / / Au ...

  2. luogu3369 【模板】普通平衡树(Treap/SBT) treap splay

    treap做法,参考hzwer的博客 #include <iostream> #include <cstdlib> #include <cstdio> using ...

  3. 解决debian 9 重启nameserver失效问题

    目录 解决debian 9 重启nameserver失效问题 安装resolvconf 编辑文件 测试 解决debian 9 重启nameserver失效问题 刚安装完debian9,用过之后会发现/ ...

  4. xml了解

    Xml简介 ➢XML指可扩展标记语言(Extensible Markup Language) ➢XML被设计用于结构化.存储和传输数据 ➢XML是一种标记语言,很类似于HTML ➢XML没有像HTML ...

  5. PHP中define()和const定义常量的区别

    在PHP中可以通过define()和const两种方式定义常量可是在开发中我们应该什么时候用define()定义常量,什么时候用const定义常量? 这两种方式定义常量的主要区别是什么? 从5.3版本 ...

  6. mysql使用日常备忘

    批量插入数据时,如果主键是有业务意义的,并非自自增张,那么有可能在插入的数据中有与已存在的键值重复的,可以用如下方式来插入: INSERT IGNORE 当要插入一个数据时,插入的字段值中主键字段或唯 ...

  7. 【Kubernetes】The connection to the server <master>:6443 was refused - did you specify the right host or port?

    不知道怎么用着用着,使用kubectl 时报错,错误如下: root@R740--:~# kubectl get pod The connection to the server 107.105.13 ...

  8. Python3网络爬虫(三):urllib.error异常

    运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article ...

  9. html 文本标签

    文本格式化标签 标签 描述 <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> ...

  10. SOAP UI(ReadyAPI)学习——第一步:资源帖

    SoapUI的参数说明:http://www.soapui.org/Working-with-soapUI/preferences.html 进一步了解可以阅读:http://www.51testin ...