第一部分:前言
实现功能:打开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. 关于面试总结-SQL学生表

    前言 每次面试必考SQL,小编这几年一直吃SQ的亏,考题无非就是万年不变学生表,看起来虽然简单,真正写出来,还是有一定难度.于是决定重新整理下关于SQL的面试题,也可以帮助更多的人过SQL这一关. 作 ...

  2. [git 学习篇] 关联github和本地创库

    所以,github和本地创库是通过ssh传送,所以要将公钥拷贝到远程创库上(比如我ssh 远程服务器时,先将本地的公钥,拷贝到远程服务器的某个文件上(http://www.cnblogs.com/li ...

  3. /mnt/sdcard 是什么东西

    关于/mnt/sdcard和sdcard的区别,可以这样理解:其实,安卓系统是从Linux而衍生出来的,而mnt是unix/Linux传统系统下挂载外部设备的专用目录,Linux默认挂载外部设备都会挂 ...

  4. 2018"百度之星"程序设计大赛 - 资格赛

    调查问卷  Accepts: 1546  Submissions: 6596  Time Limit: 6500/6000 MS (Java/Others)  Memory Limit: 262144 ...

  5. Jupyter Notebook与Jupyterhub的安装与配置

    Jupyter Notebook是一个很好用的交互环境,Jupyterhub则在此基础上实现了多用户的管理.最近配置这个环境的时候也遇到了一些坑,想想自己疯狂百度的过程,在此把自己的完整安装配置流程记 ...

  6. 九度oj 题目1361:翻转单词顺序

    题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stu ...

  7. PHPSTORM+Thinkphp3.2模板标签替换Thinkphp5.1公式

    FORMAT: purpose: find: replace 替换<php>标签 <php>(.*)</php> {php}$1{/php} 替换<if &g ...

  8. Spring 依赖注入(二、注入参数)

    注入参数基本分7类: 1.基本类型值 2.注入bean 3.内部bean 4.注入null值 5.级联属性 6.List,Set,Map集合的注入 7.properties文件的注入(和集合注入基本是 ...

  9. iOS开发笔记--UILabel的相关属性设置

    在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard ...

  10. C++单例模式实例

    定义:在某些情况下,我们设计中的对象只需要一个,比方说:线程池(threadpool).缓存(cache).对话框.处理偏好设置和注册表对象.日志对象.充当打印机.显卡等设备的驱动程序的对象等.事实上 ...