一、前言
本次项目为本学期unity游戏编程的最后一次制作内容,同时也是期末大作业的考查内容。本次大作业的要求如下:
- 内容(请参考以下技术主题,但不限于这些主题):
- 运用手机拍若干全景图,贴到天空盒或球型天空,做一个简单校园漫游功能。
- 粒子系统效果制作,必须带一个控制组件,控制粒子呈现效果。
- 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,将第一个搜索结果(如下图),将其添加至我的资源。
随后我们打开项目,打开Window->Package Manager
,切换到My Assets,即可找到Vuforia Engine,我们直接下载安装即可。(如下图所示)
3. 安装其他插件
除了安装vuforia engine外,我们还需要安装其他几款插件,这几款插件在unity的官方包里都可以找到。我们还是一样打开Window->Package Manager,切换到Unity Registry,将下图中打勾的四款插件下载并安装。
4. 注册vuforia账号并创建许可证与数据库
- 步骤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. 冲天炮粒子特效的制作
由于细节的个性化的设计较多,所以我们只需要了解核心的设置,其余部分读者可以自行把握。
成品的效果图如下所示:
4. 烟花粒子特效的制作
同样地,由于细节的个性化的设计较多,所以我们只需要了解核心的设置,其余部分读者可以自行把握。
- 首先是main属性的设置,读者可以直接抄下面的作业
- 然后需要注意的是,为模拟烟花往上窜的效果,Emission里的
Rate over Time
需要设置为1,如下图所示
- 为模拟烟花上升时的颜色变化,我们还需要对
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版粒子效果演示
六、参考资料
- 粒子系统介绍
- AR生成详细教程
- unity官方文档