第一部分:前言
实现功能:打开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. 模拟 - BZOJ 1510 [POI2006] Kra-The Disks

    BZOJ 1510 [POI2006] Kra-The Disks 描述 Johnny 在生日时收到了一件特殊的礼物,这件礼物由一个奇形怪状的管子和一些盘子组成. 这个管子是由许多不同直径的圆筒(直径 ...

  2. Selenium WebDriver-判断页面中某一元素是否已经显示,通常用于断言

    判断界面中某一元素是否已经呈现,多用于断言,代码如下: #encoding=utf-8 import unittest import time from selenium import webdriv ...

  3. 设计模式之工厂模式 Factory实现

    simpleFactory //car接口 public interface Car { void run(); } //两个实现类 public class Audi implements Car{ ...

  4. Hadoop全分布式模式安装

    一.准备 1.准备至少三台linux服务器,并安装JDK 关闭防火墙如下 systemctl stop firewalld.service systemctl disable firewalld.se ...

  5. EF知识和经验

    AsNoTracking提高查询性能 AsNoTracking的作用就是在查询的时候不做追踪,这样会查询的更快,但是这样做会有一个缺陷(不能对查询的数据做修改操作). var student2 = d ...

  6. iOS--自定义相册---对象数组按照时间戳排序

    将对象按照时间戳排序,这里典型的一个例子是登录账户的排序:本地客户端可能保存了多个账户信息,在登录窗口用户可以选择已经登陆过的账户直接登录,现在的需求是要时刻让最近登陆过的账户排在前面,对于每个账户, ...

  7. 【bzoj3210】花神的浇花集会 旋转坐标系

    题目描述 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花 ...

  8. 配置 MySQL 服务器容器

    本文介绍在单一宿主机上如何配置自动备份.建议使用两个容器,其中一个容器作为 MySQL 的服务器,用来处理数据:另一个容器用于自动备份.这样保证隔离,避免备份的容器影响到 MySQL Server 的 ...

  9. js对象的扁平化与反扁平化

    Object.flatten = function(obj){ var result = {}; function recurse(src, prop) { var toString = Object ...

  10. [USACO12DEC]第一!First! (Trie树,拓扑排序)

    题目链接 Solution 感觉比较巧的题啊... 考虑几点: 可以交换无数次字母表,即字母表可以为任意形态. 对于以其他字符串为前缀的字符串,我们可以直接舍去. 因为此时它所包含的前缀的字典序绝对比 ...