Unity官方文档解读之如何使用粒子系统创建汽车尾气

  • 粒子的时间线
  • 操作实现
  • 使用方式
  • 知识进阶

  小汽车等许多其它车辆在将燃料转化成动能的过程中都会排出尾气。你可以使用粒子系统来创建一个尾气排放的效果,作为一辆车的完美收尾。
图1 取自Unity官方文档

粒子的时间线

  尾气非常快速地从尾气喷管中发出,在与大气接触的过程中速度会快速降低。随着速度降低,粒子会向四周扩散,变得非常微弱,不久就会消散在空中。因为排出的废气是热的,所以在周围空气较冷的环境中它还会缓慢上升。
  尾气粒子在开始的时候大小一定不能超过发动机喷管的宽度,但是在短暂的生存期内,它可以适当地进行扩大。通常情况下,它在刚开始的时候是部分透明的,随着与周围空气混合它最终会完全透明并消失。考虑到动力学因素,粒子在起初会被快速发出随后缓慢减速,同样还会缓慢向上移动。

操作实现

  在Shape模块中,选择Cone,并将其Angle属性设为0;Cone实际上是一个圆柱形的管道。管道的Radius设置取决于车辆的大小,但是通常可以通过在场景视图中匹配半径Gizmo来设置到车辆模型中(例如,在一个汽车模型的后面通常会有一个排气管或者一个洞,其大小可以自己调整)。半径实际上决定了很多的属性,比如说粒子大小和发射速率。为了实现本案例中的目标,我们设定模型就是一辆小汽车,它遵循一个世界单位就是一米的Unity标准单位转换规则;因此半径就被设为0.05或者5cm。参数设定如图2所示。

图2

  尾气粒子使用的材质是在标准组件中提供的Smoke4标准材质。如果你之前没有安装标准材质,就从菜单栏中选择Asset > Import Package > Particles,然后找到粒子系统的Render模块,设置Material属性为Smoke4
(注:笔者在此处只是照文档进行翻译,但是笔者没有找到名为Smoke4的材质,所以采用了标准材质中的ParticleSmokeWhite材质进行替代,如图3所示。另外,在新版的Unity中并没有提供标准材质的安装包,自己可以到AssetStore中找到标准材质包进行下载和导入即可)

图3

  缺省的生命时间是5秒,通常这对于汽车尾气时间太长。因此需要打开Particle System模块,设置Start Lifetime约为2.5秒。同样在这个模块中,设置Simulation SpaceWorldGravity Modifier设为一个很小的负数,比如说-0.1。使用世界仿真空间可以使尾气即便是在车辆移动的时候也能够悬浮在产生烟雾的地方。负的重力效应会使得烟雾粒子上升,好像它们是由热气体组成的。使用Start Rotation旁边的小菜单箭头,并选择Random Between Two Constants。将两个值各自设置为0和360,烟雾粒子将会随着它们被发射而随机旋转。有许多排列一致的粒子是非常明显的,这会降低随机的、不成形的烟迹的效果。最终设置如图4所示。

图4

  在下面这个阶段,烟雾粒子将开始看起来更加真实,默认的粒子发射速率创造了非常棒的发动机引擎间歇工作(chugging)的效果。然而到现在来看尾气烟雾并没有向外翻腾和消散。打开Color OverLifeTime模块,点击梯度条的上端并将指针放到梯度条的最右边(这控制了颜色的透明度设定)。将alpha的值设为0,你将会发现烟雾粒子最终会消退不见。如图5所示。你也可能想要在开始时刻就减少alpha的值,这取决于汽车发动机的干净程度,黑色的烟雾通常表示发动机脏和燃烧不充分。

图5

  同消退一样,随着烟雾粒子的扩散,烟雾粒子也应该适当地增大,这种效果可以通过Size Over Lifetime进行设置。打开该模块,选中该曲线并滑动曲线的左端点,使粒子在开始时刻较小。大小的选择取决于尾气喷管的尺寸,比喷管尺寸稍大一些会产生很好的效果。(这是因为,如果将粒子在启动时刻的大小设成同尾气管道大小一样的话,就会表明尾气的外形是由管道设定的,但是,气体并没有一个特定的外形)。在场景视图中使用粒子系统仿真模块进行观察可以得到非常好的视觉效果。如果烟雾的分散达不到你想要的效果,可以在Partical System模块中增大Start Size的值。如图6所示。

图6

  最后,烟雾随着扩散,其速度也应该会降低。一种简单的方法是通过Force Over Lifetime模块进行设置。打开该模块,将Space选项设置为Local,Z设置为一个负值,表示粒子被该力推回(系统在物体局部坐标系中沿Z轴正方向发射粒子)。将该值设为-0.75将获得非常好的效果。如图7所示。

图7

使用方式

  可以通过将粒子系统放到汽车主体的子物体上来对其进行定位。对于简单的游戏来说,可以直接打开Play On AwakeLooping属性来让粒子系统运行。然而在大多数情况下,在汽车移动的时候可能会去更改粒子系统的参数。首先这是为了更加真实(比如说,在汽车发动机加速工作的时候引擎会产生更多烟雾),它还有助于防止烟雾粒子在车辆行驶时散开。一个快速移动的汽车带着发射速率非常慢的烟雾粒子,将会产生十分与众不同的烟雾,这其实是非常不真实的。

  脚本中可以非常容易的改变粒子发射速率。脚本中如果有表示发动机转速或者汽车速度的变量,那么就可以非常简单的将该值乘以一个常数,再将结果赋值给粒子系统的emissionRate属性。

C#

using UnityEngine;
using System.Collections;public class PartScriptTestCS : MonoBehaviour {public float engineRevs;        public float exhaustRate;ParticleSystem exhaust;void Start (){exhaust = GetComponent<ParticleSystem>();}void Update (){exhaust.emissionRate = engineRevs * exhaustRate;}}

Javascript

var engineRevs: float;
var exhaustRate: float;var exhaust: ParticleSystem;function Start()
{exhaust = GetComponent.<ParticleSystem>();
}function Update ()
{exhaust.emissionRate = engineRevs * exhaustRate;
}

知识进阶

  本节的基本任务是创建一个逼真的汽车烟雾效果,但是我们可能会发现随着参数变化,发动机的属性也会随着改变。一个调校不当、效率低下的发动机往往不能完全燃烧燃料,会导致黑沉的烟雾长时间停留在空中。这种效果对于老式的农用拖拉机是非常好的,但对于高性能运动汽车绝不是一个很好的效果。对于一个清洁的发动机来说,应该使用较小的生命周期值,透明度和大小增加的颗粒。对于一个并不清洁的发动机来说,应该增加这些值或者使用Emission模块中的Burst属性,来创建发动机向外喷射气体的效果。

Unity官方文档解读之如何使用粒子系统创建汽车尾气相关推荐

  1. gateway的官方文档解读

    之前公司用了springcloud的gateway.被一个伙伴留下了一堆的坑,没办法只能从头梳理. 第一步就是确定架构, gateway+consul+springboot 第二步就是确定一个flag ...

  2. torch.unsqueeze官方文档解读

    文章目录 前言 1. 功能介绍 2. 参数说明 3. 代码举例 前言 本文是对torch.unsqueeze官方文档的解读,加入部分代码示例,方便理解. 1. 功能介绍 torch.unsqueeze ...

  3. Mybatis官方文档解读

    跟着Mybatis的官方文档总结一下.~ 简介 什么是mybatis? mybatis是一款优秀的持久层框架,它支持自定义SQL,存储过程以及高级映射.Mybatis免除了所有的JDBC代码以及 设置 ...

  4. splash官方文档解读(翻译)

    安装 splash是一个类似于selenium的自动化浏览器,不过它与selenium还是有很大区别的:比如splash是异步的,splash暴露httpAPI来自动化操作. 安装很简单,需要先安装d ...

  5. 蓝牙MESH 官方文档解读 翻译(1)

    已从事两年的物联网无线通信相关应用开发,但在接触蓝牙MESH相关技术时,一般都需要查询官方机构的文档,规范等,但发现网络上相应的中文资料较少,故对相关官方文档结合自身开发经验进行了翻译. 此部分摘自官 ...

  6. Unity官方文档笔记(一)在Unity中操作

    前言:本系列文档基于Unity 2019.4版本进行整理 一 系统要求 1.1 Unity Editor Windows 需要Win7(SP1+)及以上系统,仅限64位版本:CPU要求X64架构:GP ...

  7. 华为服务器BMC方式安装系统-官方文档解读

    华为服务器BMC方式安装系统 1 写作目的 本篇文档的目的是帮助读者能够完成掌握华为服务器操作系统的安装方式,以应对我们日常运维工作中某些应用场景. 2 实验环境 使用华为RH5885 V3 服务器为 ...

  8. UE4学习(一)C++编程官方文档解读

    文档地址:https://docs.unrealengine.com/zh-CN/Programming/Introduction/index.html 文档详细介绍了C++编程的基础,一些宏和常用变 ...

  9. Spring官方文档解读(五)之自定义 bean 的性质

    Spring 框架提供了许多接口,可用于自定义 Bean 的性质.本节将它们分组如下: Lifecycle Callbacks ApplicationContextAware 和 BeanNameAw ...

  10. LLMs:OpenAI 官方文档发布提高 GPT 使用效果指南—GPT最佳实践(GPT best practices)翻译与解读

    LLMs:OpenAI 官方文档发布提高 GPT 使用效果指南-GPT最佳实践(GPT best practices)翻译与解读 导读:为了获得优质输出,需要遵循几点基本原则: >> 写清 ...

最新文章

  1. Hadoop -- ES -- CURD
  2. F - 娜娜梦游仙境系列——多民族王国
  3. CVS/SVN/GIT
  4. 永久更改R包的安装目录 #R语言
  5. pe_xscan做了几个改动
  6. 2019年规划与目标
  7. 阿里云服务器中目录的简单介绍及简单使用
  8. Greedy search 和 beam search
  9. C++Primer Excise Ch1
  10. 51单片机学习笔记之数码管1显示数字0以及使用蜂鸣器
  11. 微信小程序动态倒计时
  12. 5G-NR非连续接收DRX参数配置详解
  13. @Valid使用详解
  14. ViewPager嵌套ViewPager,内层ViewPager
  15. IDEA配置远程debug调试
  16. 卓开发中必备的那些神器APP
  17. 在线播放音乐AVPlayer的使用
  18. ssh免密登录和阿里云epel安装
  19. 【趣味程序】输入一行字符,统计其中有多少个单词,单词之间用空格隔开
  20. ASP 、PHP 代码加密的安全性逻辑思考

热门文章

  1. 玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏
  2. 2014微软open day 51CTO讲师、博主、版主~
  3. 伯努利-欧拉装错信封问题
  4. 计算机专业职业适应性考试包括什么内容,2020年分类招生《职业适应性测试(职业技能测试)》大纲...
  5. 奥的斯服务器状态显示,OTIS服务器(TT)查看故障及清除故障的方法
  6. 有一种努力叫“凌晨四点”
  7. 买菜总结之三--水果篇
  8. moss2007升级到moss2010之准备
  9. 双机互联攻略之超强、完全篇!
  10. 吴恩达深度学习笔记——改善深层神经网络:超参数调整,正则化,最优化(Hyperparameter Tuning)