欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3D游戏编程作业8

程序员文章站 2022-07-13 09:57:20
...

作业目标

  • 简单粒子制作

    • 按参考资源要求,制作一个粒子系统,参考资源
    • 使用 3.3 节介绍,用代码控制使之在不同场景下效果不一样

实现过程

1、制作魔法球

首先,我们按照参考资料的步骤来设计一个魔法球粒子,这里我将魔法球分解为三个部分:最里面的光球、中间的光晕和最外面的星光。

所以一共需要设计3个粒子系统,它们的层次结构如下:

3D游戏编程作业8
其中光球是主粒子系统,而光晕和星光都是光球的子粒子系统。

然后要设计各个粒子系统的状态参数,这里直接按照参考资料中给出的参数进行调整,要根据实际情况来,不能一味按参考资料的值进行设计,否则做出来的魔法球效果会很差。

1.1 光球

光球是魔法球的主体,是魔法球的发光处,其粒子系统设计如下:

3D游戏编程作业8

3D游戏编程作业8

3D游戏编程作业8

3D游戏编程作业8

1.2 光晕

光晕是光球散发出来的光环,颜色相对光球会比较淡比较模糊,其粒子系统参数设计如下:

3D游戏编程作业8

3D游戏编程作业8

3D游戏编程作业8

3D游戏编程作业8

1.3 星光

星光可以看作是光球发出来的光线,从无到有再到无,其粒子系统参数设计如下:

3D游戏编程作业8

3D游戏编程作业8

3D游戏编程作业8

3D游戏编程作业8

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#文件,只是简单的粒子系统。

3D游戏编程作业8

然后是挂载了控制器的魔法球的效果展示:

3D游戏编程作业8

代码地址

传送门