3D游戏编程与设计作业八
粒子光环
- 作业要求:参考 http://i-remember.fr/en 这类网站,使用粒子流编程控制制作一些效果, 如“粒子光环”
制作过程
-
新建一个粒子系统对象:Create->Effects->Particle System
-
对粒子系统属性面板进行参数设置,如下图:
这里,对其中属性做一下简单解释,如下:
-
Duration:发射器发送粒子持续的时间。比如设置为5,就是5秒后不再发送新的粒子
-
Looping:循环发射粒子,如果勾选了Looping,Duration就相当于无穷大
-
Prewarm:在Looping勾选之后才能使用,意思是发射粒子时不是从0开始
-
Start Delay:发射延迟时间,暂停x秒后开始发射粒子
-
Start Lifetime:粒子的生命周期,有Constant,Curve,Random Between Two Constants和Randow Between Two Curves四种类型可以选择,作业中只实践了常数
-
Start Speed:初始速度,粒子被创建时具有的速度,也可以有上面提到的四种类型
-
Start Size:初始大小,类似Speed
-
3D StartRotation:需要往一个方向旋转粒子时候使用
-
Start Rotation:粒子初始旋转
-
RandomizeRotation:随机旋转粒子方向
-
Start Color:初始颜色
-
Gravity Modifier:修正重力
-
Simulation Space:发射坐标,Local是默认的,也可以选择World或者Custom。选择Local,粒子属于本地粒子发射器;选择World,移动粒子发射器,已经发射的粒子不会随着发射器移动;选择Custom,粒子跟着指定的物体移动
-
Simulation Speed:模拟Update
-
Delta Time
-
Scaling Mode:三种选择,Local:忽略父级的缩放;Hierarchy:跟随父级缩放;Shape:跟随初始位置
-
Play On Awake:是否Awake时就播放
-
Emitter Velocity
-
Max Particles:一个duration内最多发射的粒子数目
-
Auto Random Seed:随机种子
-
Rate over Time:单位时间生成粒子的数量
-
Rate over Distance:随着距离增加而产生的粒子数量
-
Time:从第几秒开始
-
Count:粒子数目
-
Cycles:在一个周期中循环的次数
-
Interval:两次两次Cycles的间隔时间。
由于图片长度问题,上一张图片未能展示出所有改动的相关属性,其中renderer组件的参数设置及部分属性解释如下:- Billboard:粒子总是面对相机。
- StretchedBillboard:可以根据相机,速度,长度来调节粒子的缩放。
- HorizontalBillboard:粒子平面平行于Floor平面,即粒子都是水平朝向
- VerticalBillboard:粒子平面平行于世界坐标的Y轴,但是面向相机,粒子都是竖直朝向
- Mesh:将粒子渲染到网格上去,这个会和Texture Sheet Animation发生冲突
- Custom Vertex Streams:在材质的顶点着色器中配置哪些粒子属性可用
- Receive Shadows:规定阴影是否可以投射到粒子上,只有Opaque(不透明)的材质可以接受阴影
- 用代码控制粒子的生成和运动
这里参照了 http://www.manew.com/thread-47123-1-1.html(文章源代码:https://github.com/RafalWilinski/Particle-Sea )中的方法。 - 通过正态分布生成粒子运动半径,通过极坐标的方式确定位置,在Update里让粒子旋转
这里,为了使所有粒子整体运动看起来比较自然,我创建了三个粒子系统并标号,分别设置属性参数后都将HaloController.cs挂上去,使粒子的运动速度、半径等与其序号有关。
Halo1
Halo2
Halo3