unity期末:从AR的角度观察与实现粒子系统效果

2023-10-27

一、前言

本次项目为本学期unity游戏编程的最后一次制作内容,同时也是期末大作业的考查内容。本次大作业的要求如下:

  1. 内容(请参考以下技术主题,但不限于这些主题):
  • 运用手机拍若干全景图,贴到天空盒或球型天空,做一个简单校园漫游功能。
  • 粒子系统效果制作,必须带一个控制组件,控制粒子呈现效果。
  • UI系统制作,包括展开式公告牌,背包系统。不包括血条等简单应用。
  • DoTween 组件仿写与实践
  • 坦克大战,必须包含3D导航技术
  • Vuforia组件与AR游戏创作

通过在潘老师的汇总博客中以及网络上的查找,发现往届有不少的师兄师姐做粒子系统的效果实现或者AR简单游戏制作,但是将两者结合起来的却没有找到相应的范例。

在AR现实的角度观察一些3D模型的效果其实是很有趣的事情,可以突破电脑屏幕的限制。而作为灵活多变的粒子系统,能从现实的角度去观察更是一种享受,因此本篇文章将结合粒子系统的效果制作与AR创作,从AR的角度观察与实现粒子系统效果。

接下来本篇文章将依次从AR创作粒子系统效果制作以及AR与粒子系统结合三个角度进行阐述。总体流程图设计如下:

在这里插入图片描述




二、基本AR效果创作流程

1. 什么是vuforia插件

对于我们小白要想快速上手AR创作,作为当下流行的AR开发工具vuforia是不二的选择,它能够快速帮助我们生成简单的AR程序,详细的内容可以到vuforia官网进一步了解。

2. 如何安装vuforia

方法一
从网上搜集的资料看,Unity2017.2版本开始已经vuforia engine整合进unity项目中,我们可以在Window->Package Manager中直接找到它,然后直接点击Install安装即可

方法二
令我比较疑惑的是在我的unity版本(2021.3.10)中却并没有发现vuforia插件,不知道是否是官方后来将其移除了,因此只能手动下载。
我们首先打开unity资源商店然后搜索vuforia,将第一个搜索结果(如下图),将其添加至我的资源。
图1
随后我们打开项目,打开Window->Package Manager,切换到My Assets,即可找到Vuforia Engine,我们直接下载安装即可。(如下图所示)
在这里插入图片描述


3. 安装其他插件

除了安装vuforia engine外,我们还需要安装其他几款插件,这几款插件在unity的官方包里都可以找到。我们还是一样打开Window->Package Manager,切换到Unity Registry,将下图中打勾的四款插件下载并安装。
在这里插入图片描述


4. 注册vuforia账号并创建许可证与数据库
  • 步骤1:登陆Vuforia官网,点击Register注册账号,如下图

在这里插入图片描述

  • 步骤2:登陆后在官网上依次点击Develop->License Manager->Get Basic,输入License Name(名字可以随便输入),即可创建许可证,点开刚刚创建的许可证即可看到Key(后面有用)

请添加图片描述

  • 步骤3:切换到Target Manager,点击Add Database,输入Database Name即可创建数据库。

请添加图片描述

  • 步骤4:单击进入刚刚创建好的数据库,点击Add Target,按其内容填写好后,即可添加目标检测图片

请添加图片描述

  • 步骤5:添加完图片后,点击下载数据库,选择Unity Editor下载即可,然后将下载好的unitypackage文件拖入unity项目中即可引进目标图片

请添加图片描述
请添加图片描述

至此vuforia的准备工作就算完成了。


5. 创建ARCamera并导入许可证

打开unity项目,在上方工具栏中依次选择GameObject->Vuforia Engine->AR Camera,即可创建ARCamera摄像机。随后我们打开ARCamera的Inspector,找到下面这个组件并点击。

在这里插入图片描述
我们在跳转的界面粘贴之前获得的许可证密钥并点击添加。

请添加图片描述

这样我们就已经成功导入了许可证。

6. 创建ImageTarget并导入目标图片

同样地,我们打开unity项目,在上方工具栏中依次选择GameObject->Vuforia Engine->Image Target,即可创建Image Target物体。随后我们打开Image Target的Inspector,找到下面这个组件,给成自己数据库的配置,然后添加即可导入目标图片。
请添加图片描述

之后我们在目标图片上添加各种预制件,即可在AR中看到效果了。
接下来我们进行粒子效果的制作。



三、粒子系统效果制作

1. 什么是粒子系统

粒子系统(Particle System)是unity的一个强大的特效,用它可以实现各种炫酷的粒子效果,比如烟花、地涌金莲、爆炸等等,粒子系统提供了优秀的功能组件,只要想象力足够丰富就可以实现各种各样的特效。


2.粒子系统生成及基本使用介绍

打开unity项目,在上方的工具栏中依次选择GameObject->Effects->Particle System,即可生成一个粒子系统。随后我们单击生成的粒子系统物体,在Inspector中即可看到粒子系统的各种属性,如下图所示。
在这里插入图片描述
这里简单罗列一下常用的一些模块的作用:

  • Particle System:初始化模块
  • Emission:发射模块
  • Shape:发射器形状模块
  • Velocity over Lifetime:生命周期内速度变化模块
  • Limit Velocity over Lifetime:生命周期内速度约束模块
  • Inherit Velocity:继承父对象的速度,粒子速度会受到其父对象移动的影响
  • Force over Lifetime:生命周期内受力变化模块
  • Color over Lifetime:生命周期内颜色变化模块
  • Color by Speed:颜色受速度的影响模块
  • Size over Lifetime:生命周期内粒子大小变化模块
  • Size by Speed:粒子大小受速度影响模块
  • Rotation over Lifetime:生命周期内方向变化模块
  • Rotation by Speed:方向受速度影响模块
  • External Forces:粒子受外力影响模块
  • Noise:粒子受到随机噪声影响模块
  • Collision:碰撞模块
  • Triggers:触发器模块,如粒子雨,使粒子不会达到屋内
  • Sub Emitters:子发射器模块,多个粒子系统并行或串行发射粒子
  • Texture Sheet Animation:纹理层动画模块,可以控制将一张图片分割成多个部分,每次将其中的一个部分取出作为粒子贴图
  • Lights:光照模块
  • Trails:拖尾模块,可以给粒子添加拖尾效果
  • Custom Data:自定义模块,为粒子自定义数据
  • Renderer:渲染模块,可以设置渲染材质球、拖尾材质球等

我们只需要更改粒子系统的各项属性的值,就可以制作出各式各样的粒子效果。了解制作粒子特效的原理之后,我们接下来着手进行本次所用的两种粒子特效的制作。


3. 冲天炮粒子特效的制作

由于细节的个性化的设计较多,所以我们只需要了解核心的设置,其余部分读者可以自行把握。

  • 首先是shape的设置,要选择Rectangle
    在这里插入图片描述

  • 其次是main属性的设置,可以直接按照下图进行设置
    在这里插入图片描述

成品的效果图如下所示:
在这里插入图片描述

4. 烟花粒子特效的制作

同样地,由于细节的个性化的设计较多,所以我们只需要了解核心的设置,其余部分读者可以自行把握。

  • 首先是main属性的设置,读者可以直接抄下面的作业

在这里插入图片描述

  • 然后需要注意的是,为模拟烟花往上窜的效果,Emission里的Rate over Time需要设置为1,如下图所示

在这里插入图片描述

  • 其次是Shape我们需要设置成Box,如下图所示

在这里插入图片描述

  • 为模拟烟花上升时的颜色变化,我们还需要对Color over Lifetime进行修改,如下图所示

在这里插入图片描述

  • 单单只有粒子的上升是不够的,如果能给粒子增加一些拖尾效果,就更加完美了,因此需要对Trails模块进行设置,如下图所示

在这里插入图片描述
注:如果拖尾设置无效,一直显示粉色,这是由于没有采用拖尾材质所导致的,正确的做法是打开Renderer模块,在Trail Material里选择一款自己喜欢的材质

  • 最后当然就是烟花绽放的效果制作了,这里我们采用了Sub Emitters模块来实现,首先是添加一个子粒子系统,如下图所示,模式设置成Death表明需要等到主粒子系统的粒子消亡之后,子粒子系统的粒子才能诞生,从而达到无缝衔接烟花绽放的效果

在这里插入图片描述

  • 然后在子粒子系统里设置Shape和Color over lifetime如下图所示,就能模拟烟花粒子效果啦

在这里插入图片描述

成品的效果图如下所示:
在这里插入图片描述

到此为止我们就已经完成了本次项目所用到的所有粒子特效了,接下来我们看看如何将AR与粒子系统结合在一起。



四、AR与粒子系统相结合

在前文中我们已经提及过:在目标图片上添加各种预制件,即可在AR中看到效果。因此一个简单有效的结合方法就是将粒子系统提前先设置好,然后将其加入到目标图片中,这样当相机检测到目标图片时,就能够自动呈现出粒子效果。但这样仍然有一些问题:我们设计了两个粒子效果,如果直接放在目标图片上,两种粒子效果会同时展示,这样就会形成混乱。为了解决这个问题,我们需要引入vuforia自带的一个控制组件——虚拟按钮。总的来说,我们想达成的效果可以用一个表格表示:

粒子效果 虚拟按钮
冲天炮 虚拟按钮一
烟花 虚拟按钮二

首先我们点击Hierarchy中的Image Target,然后在Inspector中找到Advanced,然后点击添加虚拟按钮即可生成虚拟按钮,如下图所示:

在这里插入图片描述

这里我们生成了两个虚拟按钮,分别用来控制两种粒子效果。随后我们在工具栏依次选择GameObject->3D Object->Legacy->TextMesh,为两个虚拟按钮打上文字。然后我们再打开两个虚拟按钮的Inspector,将Turn Off Behaviour取消勾选,这样才能在相机中显式观察到虚拟按钮,不然是显示不了的,如下图所示:

在这里插入图片描述

调节好虚拟按钮和粒子系统的位置后,效果图如下所示:

在这里插入图片描述

接下来我们需要对两个虚拟按钮的监听事件以及对应的功能函数进行代码编写,从而实现两种粒子系统效果的分开展示控制。具体代码如下,关键部分已经进行注释:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class VirtualButtonControl : MonoBehaviour
{
    public ParticleSystem PS1;//粒子系统1
    public ParticleSystem PS2;//粒子系统2
    // Start is called before the first frame update
    void Start()
    {
        ParticleSystem.MainModule main1 = PS1.main;
        ParticleSystem.MainModule main2 = PS2.main;
        main1.maxParticles = 50;
        main2.maxParticles = 0;
        GameObject left = GameObject.Find("left");
        left.GetComponent<VirtualButtonBehaviour>().RegisterOnButtonPressed(pattern1);//监听按钮点击事件
        GameObject right = GameObject.Find("right");
        right.GetComponent<VirtualButtonBehaviour>().RegisterOnButtonPressed(pattern2);//监听按钮点击事件
    }

    private void pattern1(VirtualButtonBehaviour obj)//换成第一种粒子效果
    {
        ParticleSystem.MainModule main1 = PS1.main;
        ParticleSystem.MainModule main2 = PS2.main;
        main1.maxParticles = 50;
        main2.maxParticles = 0;
        Debug.Log("open!!!!");
        
    }

    private void pattern2(VirtualButtonBehaviour obj)//换成第二种粒子效果
    {
        ParticleSystem.MainModule main1 = PS1.main;
        ParticleSystem.MainModule main2 = PS2.main;
        main1.maxParticles = 0;
        main2.maxParticles = 50;
        Debug.Log("close!!!!");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

至此我们已经完成了所有的制作过程,我们最终的游戏物体结构层次如下:

在这里插入图片描述

接下来我们来看看怎样在手机上运行该AR项目。




五、运行方法与效果展示

由于我的手机是鸿蒙系统,在unity中是与安卓系统兼容的,所以这里我以安卓手机的运行方法举例,苹果手机也是一样的流程。

  • 步骤1:首先我们先为当前使用的unity版本添加安卓系统的相关包,如下图所示:
    在这里插入图片描述
    安装过程比较漫长,耐心等待即可。

  • 步骤2:安装完毕后,我们打开unity项目,选择File->Build Settings,选择当前场景,平台更改为安卓。然后将手机与电脑用数据线连接,并将运行设备更改为自己的手机,如下图所示:
    在这里插入图片描述

  • 步骤3:打开左下角的Player Settings,更改公司名和产品名,并相应地在下方的Other Settings中更改包名,如下图所示:
    在这里插入图片描述
    在这里插入图片描述

最后,我们返回原页面,点击右下角的Build And Run,即可将项目打包到手机上,安装完毕后用手机打开程序,运行效果如下:
在这里插入图片描述


项目地址:AR Game

演示视频:AR版粒子效果演示




六、参考资料

  1. 粒子系统介绍
  2. AR生成详细教程
  3. unity官方文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity期末:从AR的角度观察与实现粒子系统效果 的相关文章

随机推荐

  • sublime text3 python 代码提示_Sublime Text3+Anaconda插件实现智能提示python IDE

    导读 前言上期给你们介绍装Sublime Text3和Python环境 可以编写简单的python类库sublime text3 python 可是却不能像其它IDE一样智能提醒 这样用这个意义也就不大了 今天就给你们推荐python智能提
  • jeecg boot笔记(一)-使用模糊查询

    1 引入 JInput import JInput from components jeecg JInput vue 2 使用
  • NOIP2004 火星人(全排列)

    题目来源 http acm wust edu cn problem php id 1074 soj 0 题目描述 火星人共有N个手指 每个手指分别代表着1 N共N个数 可以通过改变这个这N个手指的顺序来改变值的大小 但是人类想要和火星人交流
  • docker安装 镜像检索、本地下载上传、重命名

    安装docker wget https mirrors aliyun com docker ce linux centos docker ce repo O etc yum repos d docker ce repo yum y inst
  • 基于GPRS的无线视频监控系统

    1 引言 目前 远程视频监控系统已经广泛应用于工矿企业生产现场监控 电信机房监控 城市交通管理等领域 常见的远程视频监控系统大多是通过架设专用的有线媒介 或者租用电信运营商的通信线路传输视频信号 前者工程工期长 前期投入比较大 传输距离有限
  • 学生成绩管理系统

    一个年级 相当链表A 该年级5个班 每个班5个人 相当于链表B1 B5 做一个学生成绩管理系统 include
  • C/C++操作文件

    1 C 给字符数组内文件名排序 假设我们获得到的文件名列表是一个二维字符数组 给这样的数据排序首先要获得排序所需的关键字 如下 void getNum char dstChar int num 首先要知道字符串长啥样 用字符串中的哪几个位置
  • cartographer 处理IMU(激光,里程计等)流程

    1 cartographer ros 入口文件 node main cc 入口函数main 如下图 ros init argc argv cartographer node ros start cartographer ros Scoped
  • hduoj 2014

    青年歌手大奖赛 评委会打分 Problem Description 青年歌手大奖赛中 评委会给参赛选手打分 选手得分规则为去掉一个最高分和一个最低分 然后计算平均得分 请编程输出某选手的得分 Input 输入数据有多组 每组占一行 每行的第
  • Android8.1 Settings中恢复出厂设置中添加一个清除数据的按钮

    1 packages apps Settings res layout master clear confirm xml b res layout master clear confirm xml
  • 【Ubuntu22使用过程问题记录】

    Ubuntu22 04 使用过程问题解决方案 1 系统基本设置 1 1 输入法 增加中文输入 1 Settings gt Region Language gt Manage Installed Languages gt 选中chinese
  • jmeter压测报错Non HTTP response code: java.net.ConnectException/Non HTTP response message: Connection ti

    最近在做性能测试过程中遇到了高并发时 后台监控各项指标都很正常 但是测试结果中很多Non HTTP response code java net SocketException Non HTTP response message Permi
  • 签名服务器调用接口

    package teste import java io UnsupportedEncodingException import java net URLEncoder import cn com infosec netsign agent
  • html前端技术开发,CSS标准文档流,建议收藏

    开始 我大学读的是大专 在学校学的是机电一体化 临近毕业的时候选择了学习web前端技术 因为做机电实在又累工资又低 而我更喜欢坐办公室的工作 有空调吹 我很现实 就是想多赚一点钱 到现在做了两年前端的小程序员 月薪是13K 经历过两次跳槽
  • GitLab WorkFlow

    在团队开发中 为了更好的协作 通常会采用一些工作流来最大程度提升效率 生产一个软件工序是比较复杂的 如果通过一个好的逻辑顺序去应用到一个软件开发的生命周期过程是非常重要的 GitLab WorkFlow 从构思到上线的十步 想法 每一个新建
  • 初学react(七):if 判断

    思路 先定义一个state里的一个状态 因为如果状态改变都会重新执行render 所以在render写上判断动态的赋值 也可以使用三目运算 import React from react import App css import Pers
  • jeesite框架介绍

    1 jeesite框架介绍 http wenku baidu com view 7e543c24e45c3b3567ec8baf html 2 jeesite开发环境搭建及部署 http wenku baidu com link url L
  • python3 题解(34 棋盘放麦子)

    棋盘放麦子 问题 国际象棋的棋盘有共有64格 传说国王为奖励它的发明人 答应了他的一个 小 要求 在棋盘的第1格放1粒小麦 第2格放2粒 第3格放4粒 第4格放8粒 每一格是前一格数目的2倍 这一共是多少小麦呢 是个天文数字 请你利用计算机
  • 【Linux篇】父子进程间的数据共享

    include
  • unity期末:从AR的角度观察与实现粒子系统效果

    一 前言 本次项目为本学期unity游戏编程的最后一次制作内容 同时也是期末大作业的考查内容 本次大作业的要求如下 内容 请参考以下技术主题 但不限于这些主题 运用手机拍若干全景图 贴到天空盒或球型天空 做一个简单校园漫游功能 粒子系统效果