百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

10.Unity粒子系统

bigegpt 2024-08-20 10:56 2 浏览

10.粒子系统

本节我们来学习 Unity 的 Shuriken 粒子系统。

10.1 粒子系统

粒子系统是一个组件或对象,可以发射其他对象,我们称之为粒子(particle)。粒子通过设置可以实现非常多的效果。如可以创建喷射的火焰、滚滚的浓烟、萤火虫、雨水、雾气等。这些效果通常称为粒子效果。

10.1.1 粒子

粒子是由粒子系统发射的单个实体。大多数粒子是 2D 广告牌,广告牌是一种总是面向摄像机的平面图像。

10.1.2 Unity 粒子系统

要在场景中创建一个粒子系统,可以添加一个粒子系统对象,或者给现有的对象添加一个粒子系统组件。可以通过 GameObject -> Effects -> Particle System 来添加,添加组件可以使用 Add Component -> Effects -> Particle System 来添加。

Unity 中的粒子默认是小白色的球体,它们会逐渐消退成透明的。

10.1.3 控制选项

当向场景中添加粒子系统后,在场景视图中开始发射粒子,同时显示粒子系统控制选项,如下图所示:

控制选项允许在场景中暂停、停止和重新开始粒子动画。

  • Playback Speed - 播放速度
  • Playback Time - 播放时长

要创建复杂的效果,通过多个粒子系统协同工作来实现。当多个粒子系统协同工作时称之为粒子效果。

在 Unity 中,创建粒子效果是通过把粒子系统嵌套在一起实现的。

10.2 粒子系统模块

粒子的外观、行为及它们产生的效果都是由模块决定的。模块是定义某种行为的多个属性。在 Shuriken 粒子系统中,模块是一个集成的、必要的组件。默认情况下,所有模块都是可见的,只启用 Emission、Shape 和 Renderer 模块。单击模块名称可展开该模块。

10.2.1 默认模块

默认模块为 Particle System。该模块包含每个粒子系统都需要的所有属性。

  • Duration - 粒子系统的运行时长,单位为秒
  • Looping - 持续时间达到后是否重新开始
  • Prewarm - 在开始运行时就好像已经从前一个周期发射了粒子一样
  • Start Delay - 系统在发射粒子前将等待的时长,单位为秒
  • Start Lifetime - 每个粒子的存活时长,单位为秒
  • Start Speed - 粒子的初始速度
  • Start Rotation - 粒子的初始旋转角度
  • Start Color - 发射的粒子的颜色
  • Gravity Modifier - 给粒子应用的重力
  • Inherit Velocity - 在粒子上表现出了多快的系统速度
  • Simulation Space - 在本地空间还是游戏世界空间里模拟粒子
  • Play On Walk - 是否在创建粒子系统时立即开始发射粒子
  • Max Particles - 一个系统每次可以存在的粒子总数。如果到达该数系统就会停止发射

10.2.2 Emission 模块

Emission 模块用于确定发射粒子的速率。使用该模块可以指定粒子以恒定的速率或脉冲方式还是以它们二者之间的某种方式发射。其属性如下:

  • Rate - 在一段时间或距离内发射的粒子数
  • Bursts - 如果选择速率的时间选项,它将用于指定脉冲次数。

10.2.3 Shape 模块

Shape 模块确定由发射的粒子构成的形状。形状选项包括:Sphere、Hemisphere、Cone、Box、Mesh 等。每个形状具有一组用于定义它的属性。

10.2.4 Velocity over Lifetime 模块

Velocity over Lifetime 模块通过对每个粒子应用 x 轴、y 轴和 z 轴的速度,直接制作每个粒子的动画。属性如下:

  • xyz - 应用于粒子的速度,可以是一个常量、曲线或者常量与曲线之间的一个随机数
  • Space - 在本地空间还是游戏世界空间添加速度

10.2.5 Limit Velocity over Lifetime 模块

可以用于抑制或固定粒子的速度。本质上它会阻止粒子超过某轴或所有轴上的速度阈值,或降低它们的速度。属性如下:

  • Separate Axis - 不选中该属性表示每个轴都使用相同的值。选中则会显示每个轴的速度属性以及用于本地或世界空间的属性
  • Speed - 速度阈值
  • Dampen - 如果粒子的速度超过阈值,会把它的速度减慢这个值,取值为 0~1,值 0 表示不会减慢,值 1 表示减慢 100%

10.2.6 Force over Lifetime 模块

该模块类似于 Velocity over Lifetime 模块,差别是该模块给每个粒子应用一个力而不是速度。

10.2.7 Color over Lifetime 模块

Color over Lifetime 模块允许随着时间的流逝更改粒子的颜色。可用于创建火花效果。

10.2.8 Color by Speed 模块

Color by Speed 模块允许基于粒子的速度更改其颜色。属性如下:

Color - 指定粒子颜色的渐变

Speed Range - 映射到颜色渐变的最低和最高速度值,也就是低速粒子的颜色映射到渐变的左边,高速粒子的颜色映射到渐变的右边。

10.2.9 Size over Lifetime 模块

Size over Lifetime 模块允许指定粒子的大小变化,其值是一条曲线,并且将指定随着时间的消逝,粒子将增大或收缩。

10.2.10 Size by Speed 模块

Size by Speed 模块将基于粒子的速度(在最小值和最大值之间的速度值)更改其大小。

10.2.11 Rotation over Lifetime 模块

Rotation over Lifetime 模块允许指定粒子本身的旋转角度,其值可以是一个常量、曲线或者随机数。

10.2.12 Rotation by Speed 模块

Rotation by Speed 模块基于粒子的速度改变旋转角度。旋转将基于最小和最大速度值而改变。

10.2.13 External Forces 模块

External Forces 模块允许对存在于粒子外部的任何力应用一个系数,比如模拟场景中存在风力。属性如下:

  • Multiplier - 依赖于力的值增大或减少力。

10.2.14 Collision 模块

Collision 模块允许为粒子设置碰撞。用于各种碰撞效果。

Collision 模块的公共属性:

  • Type - 碰撞类型,选项:Planes 将碰撞预定的平面,World 将碰撞场景中的任何对象
  • Dampen - 当粒子发生碰撞时速度的降低值,取值 0 ~ 1
  • Bounce - 确保保留了多少速度的分量,只影响粒子弹跳的轴,取值 0 ~ 1
  • Lifetime Loss - 确定粒子在碰撞中失去多少寿命,取值 0 ~ 1
  • Min Kill Speed - 粒子在被碰撞销毁前的最低速度
  • Send Collision Messages - 确定是否把碰撞消息发生给粒子发生碰撞的对象

Planes 选项的属性:

  • Planes - 确定粒子可以碰撞什么位置的变换集合。所提供的变换的 y 轴确定了平面的旋转方式
  • Visualization - 确定如果在 Scene 视图中绘制平面,它们可以是实心的或者网格
  • Scale Plane - 调整平面的可视化区域的大小
  • Particle Radius - 可用于使粒子看似更大或更小
  • World 选项的属性:
  • Collides With - 确定粒子碰撞的是哪些层。默认为 Everything
  • Collision Quality - 碰撞的质量,值为 High、Medium 和 Low
  • Voxel Size - 用于确定在媒介和低质量设置中使用的 Voxel 的密度

示例:

1.创建一个新项目或场景,然后添加一个粒子系统,位置为(0,0,0)。
2.在 Inspector 视图中选中 Collision 模块启用。
3.单击 Planes 旁边的加号,这时会出现一个平面,并且粒子已经弹跳到平面上,改变视角观察粒子。
4.向场景中添加一个立方体,定位于(0,4,0),缩放(5,1,5)。
5.观察粒子如何直接经过立方体。
6.将 Collision 模块设置为 World 模式,这时粒子开始弹跳到立方体上。

10.2.15 Sub Emitter 模块

Collision 模块能够在某些事件中为当前系统的每个粒子再生一个新的粒子系统。当创建粒子或粒子死亡或发生碰撞时,可以创建一个新的粒子系统。

可以用于生成复杂的、难以理解的效果(如:烟花)。

属性:

  • Birth - 创建粒子时创建粒子系统的数量
  • Death - 死亡时创建粒子系统的数量
  • Collision - 碰撞时创建粒子系统的数量

10.2.16 Texture Sheet 模块

Texture Sheet 模块允许更改在粒子的寿命中用于粒子的纹理坐标。可以把用于一个粒子的多种纹理放在一幅单独的图像中,然后在粒子寿命内在它们之间切换。其属性如下:

  • Tiles - 确定纹理的拼贴方式
  • Animation - 确定时整幅图像还是只有单独一排包含用于粒子的纹理
  • Cycles - 指定动画的速度

10.2.17 Renderer 模块

Renderer 模块指定绘制纹理的具体方式。其属性如下:

Render Mode - 渲染模式,包括 Billboard、Stretched Billboard、Horizontal Billboard、Vertical Billboard、Mesh。

Normal Direction - 粒子在多大程度上面向摄像机,值 1 将导致粒子直接面向摄像机

Meterial - 用于绘制粒子的材质

Sort Order - 绘制粒子的顺序

Sorting Fudge - 确定绘制粒子系统的顺序。值越小,则越有可能在其他对象和粒子的顶部绘制粒子系统

Cast Shadows - 确定粒子是否会投射阴影

Recieve Shadows - 确定粒子是否会接收阴影

Max Particle Size - 设置最大的相对大小,取值 0 ~ 1

10.3 曲线编辑器

在不同的模块中设置时,有些属性可以选择 Constant 或 Curse。Constant 选项需要提供一个值,而 Curse 选项则可以使属性值在经过一段时间后发生变化,这时就需要曲线系统来设置。

当选择 Curse 时,在 Inspector 视图的底部可以看到曲线编辑器,如下图所示:

右击曲线,可以选择 Add Key 来增加关键点,每个关键点都可以用鼠标拖拽。

示例:

1.创建新项目或场景,然后添加一个粒子系统,位置为(0,0,0)。
2.单击 Start Size 属性旁边的下列箭头后选择 Curse。
3.在数轴上将 1 修改成 2,使曲线的范围设置为 2。
4.在中点附近右击添加关键点,把这个关键点拖拽到顶部。
5.观察粒子系统产生的粒子的大小变化。



相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...