使用Unity引擎制作一款烟花特效 第二部分:爆炸四散光雨 、烟花主体

呆呆敲代码的小Y 发表于 2022/03/31 19:25:03 2022/03/31
【摘要】 💚Explore2:爆炸四散光雨我们的烟花在爆炸之后不仅要有一个球形的光雨,还应该有一个四散的效果。创建Explore2: 层级面板右键 → Effects → Particle System 创建一个新的粒子系统,然后我们给它取名为 Explore2。设置粒子的渲染图片为Twinkle: 打开Explore2的粒子系统面板,打开 Render 选项,并改变material为Twink...

💚Explore2:爆炸四散光雨

我们的烟花在爆炸之后不仅要有一个球形的光雨,还应该有一个四散的效果。

  • 创建Explore2: 层级面板右键 → Effects → Particle System 创建一个新的粒子系统,然后我们给它取名为 Explore2。

  • 设置粒子的渲染图片为Twinkle: 打开Explore2的粒子系统面板,打开 Render 选项,并改变material为Twinkle。

  • 设置粒子的发射方向: 打开Explore2的粒子系统面板,勾选 Shape 选项。并选择shape为 sphere ,即以球型发射粒子。其他不用改动;

  • 设置粒子动态旋转: 打开Explore2的粒子系统面板,勾选 Rotation over lifetime 选项即可,不需要特意改动什么值;

  • 设置粒子运动: 打开Explore2的粒子系统面板,勾选 Velocity over lifetime 选项。设置如下:
    在这里插入图片描述

  • 给粒子在运动中添加重力:打开Explore2的粒子系统面板,勾选 Force over lifetime 选项。并将z轴的力设为-20,使得粒子受到重力,在爆发后向地面坠落,模拟自然的重力;

  • 设置trail: 打开Explore2的粒子系统面板,勾选 Sub Emitters 选项。将一个制作完成的trail子部件加入到Explore2中,成为Explore2的子部件。然后将trail设置为Explore2子粒子系统,设置如下:
    在这里插入图片描述

  • 设置Emission和粒子系统主模板
    在这里插入图片描述


💙Firework :烟花主体

烟花的几个部分都讲完了,下面在添加一个主体,将前面的几个粒子特效添加到一起就好了!

  • 创建Firework: 右键 → Effects → Particle System 创建一个新的粒子系统,然后我们给它取名为 Firework

  • 将粒子特效合在一起。
    在这里插入图片描述

  • 设置粒子的发射方向: 打开Firework的粒子系统面板,勾选 Shape 选项。并选择shape为 box ,即以正方形发射粒子。由于box的默认发射方向在z轴正方向,将Firework进行旋转如下所示:
    在这里插入图片描述

  • 设置粒子不渲染: 由于Firework的粒子并不需要渲染,所以,我们在 Render 选项中设置渲染模式为 None ;
    在这里插入图片描述

  • 设置子粒子系统: 和Explore2类似,我们要勾选 Sub Emitters 选项,然后将Firework的所有子粒子系统加入到里面,设置如下:
    在这里插入图片描述
    其中 Death 参数是在粒子周期结束的时候才会触发的事件。

  • 设置Emission和粒子系统主模板
    在这里插入图片描述


🔔制作放烟花场景

一个简单的烟花特效已经制作好了,接下来用一个脚本来控制鼠标点击就开始放烟花就好了。

脚本代码如下:

public class FireFirework : MonoBehaviour
{
    public ParticleSystem _firework;
    public ParticleSystem.Particle[] m_Particles;

    void Start()
    {
        _firework.Stop();

        if (m_Particles == null)
        {
            m_Particles = new ParticleSystem.Particle[_firework.main.maxParticles];
        }
    }
    [System.Obsolete]
    void Update()
    {       
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出到点击坐标的射线  
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                Debug.Log("鼠标点的位置:"+hit.point);
                _firework.Emit(1);
                // 获取场景中属于firework[id]的运行中的粒子;
                int count = _firework.GetParticles(m_Particles);
                // 根据鼠标点击位置计算烟花的飞行时间;
                float life_time = (hit.point.y - gameObject.transform.position.y) / _firework.startSpeed;
                // 根据鼠标点击位置和烟花飞行时间计算烟花的水平速度;
                float x_v = (hit.point.x - gameObject.transform.position.x) / life_time;
                // 设置刚刚发射的粒子的飞行时间;
                m_Particles[0].lifetime = life_time;
                // 设置刚刚发射的粒子的速度;
                m_Particles[0].velocity = new Vector3(x_v, m_Particles[0].velocity.y, m_Particles[0].velocity.z);
                // 将改动应用到场景中;
                _firework.SetParticles(m_Particles, count);
            }
        }
      }
    }

🎁效果展示

将脚本挂到场景中,然后将我们的烟花特效拖上去运行即可!

效果如下所示,源码工程可以在文末的小卡片中回复【烟花资源】获取哦。
请添加图片描述

请添加图片描述


💬总结

  • 本文使用Unity的粒子系统简单制作了一款烟花特效。
  • 看着流程挺多,其实这种就是体力活,有艺术细胞的制作的肯定就更好看!
  • 烟花的大小、颜色、飞行轨迹等等都可以自己定制,看完了有没有自己制作一款烟花的冲动哈哈。
  • 如果觉得还不错记得点个赞哦,大家可以自己去制作一款更好看的!!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。