第一部分:前言
实现功能:打开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. Scala学习-02-方法

    算数和操作符重载 所有的操作符都是方法. a + b 是一种缩写形式  :  a .+ b “+”是方法名(操作符重载) ++和—— Scala中并没有“++”和“——”.需要使用“+=”和“-=” ...

  3. Timus 1329. Galactic History。LCA最近公共祖先或dfs递归离线处理!

    1329. Galactic History 比赛的时候看到学弟A了这题然后跟榜做,结果在LCA的道路上一去不复返,这个题是很像LCA求最近公共祖先的,不过三个人都没学过LCA,只能拿着资料看着像然后 ...

  4. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

    题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...

  5. 【Luogu】P2445动物园(最大流)

    题目链接 题目本身还是比较水的吧……容易发现是最大流套上dinic跑一遍就好了,并不会超时. 比较不偷税的一点是关于某动物的所有目击报告都符合才能连边……qwqqwqqwq #include<c ...

  6. 【Luogu】P4358密钥破解(Pollard Rho)

    题目链接 容易发现如果我们求出p和q这题就差不多快变成一个sb题了. 于是我们就用Pollard Rho算法进行大数分解. 至于这个算法的原理,emmm 其实也不是很清楚啦 #include<c ...

  7. yield的概念及使用姿势

    概念: 当调用Thread.yield方法时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示. 代码演示: public class YieldDemo impl ...

  8. 面试题之redis单线程为什么性能很高

    原因是,使用了多路复用技术. 什么是多路复用技术:多个客户端使用一个信道,并且通过一个信道进行传输

  9. 重置css样式

    如果有第三方插件或者想要覆盖css的样式的话,给他的样式设置auto就好了

  10. 线段树懒标记好题 HDU4578

    (1)"1 x y c",代表 把区间 [x,y] 上的值全部加c (2)"2 x y c",代表 把区间 [x,y] 上的值全部乘以c (3)"3 ...