3D游戏编程作业8
程序员文章站
2022-07-13 09:57:20
...
作业目标
-
简单粒子制作
- 按参考资源要求,制作一个粒子系统,参考资源
- 使用 3.3 节介绍,用代码控制使之在不同场景下效果不一样
实现过程
1、制作魔法球
首先,我们按照参考资料的步骤来设计一个魔法球粒子,这里我将魔法球分解为三个部分:最里面的光球、中间的光晕和最外面的星光。
所以一共需要设计3个粒子系统,它们的层次结构如下:
其中光球是主粒子系统,而光晕和星光都是光球的子粒子系统。
然后要设计各个粒子系统的状态参数,这里直接按照参考资料中给出的参数进行调整,要根据实际情况来,不能一味按参考资料的值进行设计,否则做出来的魔法球效果会很差。
1.1 光球
光球是魔法球的主体,是魔法球的发光处,其粒子系统设计如下:
1.2 光晕
光晕是光球散发出来的光环,颜色相对光球会比较淡比较模糊,其粒子系统参数设计如下:
1.3 星光
星光可以看作是光球发出来的光线,从无到有再到无,其粒子系统参数设计如下:
2、代码设计
这里一共设计了3个控制器来控制不同的粒子系统,其中光球的控制器使得整个魔法球可以在屏幕中左右移动,而光晕和星光的控制器则分别使得光晕和星光随着时间流逝慢慢变得微弱。
GuangQiuController.cs:
public class GuangQiuController : MonoBehaviour
{
ParticleSystem exhaust;
int direction;
void Start() {
exhaust= GetComponent<ParticleSystem>();
direction = 0;
}
void Update() {
int minX = -10, maxX = 10 ;
if (direction == 0 && exhaust.transform.position.x > minX)
exhaust.transform.position += Vector3.left * Time.deltaTime * 10;
else if (direction == 1 && exhaust.transform.position.x < maxX)
exhaust.transform.position += Vector3.right * Time.deltaTime * 10;
else direction = 1 - direction;
}
}
GuangYunController.cs:
public class GuangYunController : MonoBehaviour {
ParticleSystem exhaust;
float size = 2f;
// Use this for initialization
void Start () {
exhaust = GetComponent<ParticleSystem> ();
}
// Update is called once per frame
void Update () {
size = size * 0.999f;
var main = exhaust.main;
main.startSize = size;
}
}
XingGuangController.cs:
public class XingGuangController : MonoBehaviour {
ParticleSystem exhaust;
float size = 5f;
// Use this for initialization
void Start () {
exhaust = GetComponent<ParticleSystem> ();
}
// Update is called once per frame
void Update () {
size = size * 0.999f;
var main = exhaust.main;
main.startSize = size;
}
}
效果展示
首先是魔法球的效果展示,这里没有挂载任何C#文件,只是简单的粒子系统。
然后是挂载了控制器的魔法球的效果展示: