Unity引擎学习笔记之【粒子系统操作】

粒子系统Particle System

一、粒子系统基础属性

Unity 的粒子系统(Particle System)包含许多属性和功能,下面是一些常见的属性及其用途:

  1. 发射模块(Emission Module):控制粒子的发射速率、发射角度、初始速度等,可以用来控制粒子的产生方式和速度。

  2. 形状模块(Shape Module):定义了粒子发射的区域形状,可以是球体、盒子、圆锥等,也可以通过贴图来定义不规则的发射形状。

  3. 大小模块(Size over Lifetime):控制粒子大小随时间变化的曲线,可以实现粒子从产生到消失过程中大小渐变的效果。

  4. 颜色模块(Color over Lifetime):控制粒子颜色随时间变化的曲线,可以实现粒子从产生到消失过程中颜色渐变的效果。

  5. 旋转模块(Rotation over Lifetime):控制粒子旋转角度随时间变化的曲线,可以实现粒子自旋转的效果。

  6. 纹理动画(Texture Sheet Animation):通过设置纹理帧数和播放模式,实现粒子的纹理帧动画效果。

  7. 碰撞模块(Collision Module):定义了粒子与碰撞器之间的交互效果,如碰撞后的反弹、消失等行为。

  8. 外部力场(External Forces):允许外部力场对粒子系统施加影响,如重力、风等。

  9. Start Lifetime(开始寿命):定义了粒子的初始生命周期,即粒子被发射后存在的时间。

  10. Start Speed(初始速度):确定了粒子被发射时的初速度,影响了粒子移动的距离和速度。

  11. Start Size(初始大小):设定了粒子被发射时的初始大小,可以影响粒子的显示效果。

  12. Start Color(初始颜色):确定了粒子被发射时的初始颜色。

  13. Start Rotation(初始旋转):定义了粒子被发射时的初始旋转角度。

这些属性共同决定了粒子的初始状态,而在粒子系统中,还可以通过曲线或颜色过渡等方式来调整粒子在生命周期内的变化情况,比如:

  1. Size over Lifetime(大小随生命周期变化):控制了粒子在生命周期内大小的变化,可以实现粒子渐变消失的效果。

  2. Color over Lifetime(颜色随生命周期变化):控制了粒子在生命周期内颜色的变化,可以实现颜色渐变消失的效果。

二、自定义脚本操作粒子系统

1.自定义脚本获取组件

        using UnityEngine;

    public class ParticleController : MonoBehaviour
    {
        private ParticleSystem particleSystem; // 粒子系统组件

        private void Start()
        {
            particleSystem = GetComponent<ParticleSystem>(); // 获取粒子系统组件
        }

        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                // 在空格键按下时播放粒子效果
                PlayParticleEffect();
            }
        }

        private void PlayParticleEffect()
        {
            particleSystem.Play(); // 播放粒子效果
        }
    }
  • 创建了一个名为 ParticleController 的脚本类,用于控制粒子系统。在 Start 方法中,通过 GetComponent 方法获取当前对象上的 ParticleSystem 组件,以便在后续代码中对其进行操作。

  • 在 Update 方法中,检测到用户按下空格键时,调用 PlayParticleEffect 方法来播放粒子效果。PlayParticleEffect 方法中,我们调用 ParticleSystem 的 Play 方法来启动粒子效果。

  • 使用以上代码,可以将该脚本组件添加到场景中的一个游戏对象上,并将粒子系统组件拖拽到脚本组件的相应字段中。然后,在运行游戏时按下空格键,就能播放粒子效果了。

2.脚本实现火焰效果

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Frame : MonoBehaviour
{
    public float maxParticles = 1000f; // 最大粒子数
    public float emissionRate = 300f; // 发射速率
    public float lifetime = 1f; // 粒子生命周期
    public float startSize = 0.2f; // 初始大小
    public float endSize = 0.01f; // 结束大小
    public float startSpeed = 1f; // 初始速度
    public float endSpeed = 0f; // 结束速度
    public Color startColor = new Color(1f, 0.5f, 0f); // 初始颜色
    public Color endColor = new Color(1f, 0f, 0f); // 结束颜色

    private ParticleSystem particleSystem; // 粒子系统组件

    private void Start()
    {
        particleSystem = GetComponent<ParticleSystem>(); // 获取粒子系统组件

        // 设置粒子系统属性
        var main = particleSystem.main;
        main.maxParticles = (int)maxParticles;
        main.startLifetime = lifetime;
        main.startSize = startSize;
        main.startSpeed = startSpeed;

        // 设置粒子发射器属性
        var emission = particleSystem.emission;
        emission.rateOverTime = emissionRate;

        // 设置粒子形状属性
        var shape = particleSystem.shape;
        shape.shapeType = ParticleSystemShapeType.Cone;
        shape.angle = 30f;
        shape.radius = 0.1f;

        // 设置粒子渲染器属性
        var renderer = particleSystem.GetComponent<ParticleSystemRenderer>();
        renderer.material = new Material(Shader.Find("Particles/Additive"));
        renderer.material.color = startColor;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 在空格键按下时播放粒子效果
            PlayParticleEffect();
        }
    }

    private void PlayParticleEffect()
    {
        particleSystem.Play(); // 播放粒子效果

        // 使用协程在一定时间后停止粒子效果
        StartCoroutine(StopParticleEffect());
    }

    private IEnumerator StopParticleEffect()
    {
        yield return new WaitForSeconds(lifetime); // 等待一段时间

        // 停止粒子效果并清空粒子
        particleSystem.Stop();
        particleSystem.Clear();
    }
}
  • 上述代码中,我们创建了一个名为 FlameEffect 的脚本类,用于控制火焰粒子效果。我们定义了一些公共的属性变量,可以在 Inspector 界面中进行设置,以便调整粒子系统的各项属性。

    在 Start 方法中,我们通过 GetComponent 方法获取当前对象上的 ParticleSystem 组件,并设置其各项属性,包括最大粒子数、粒子生命周期、大小、速度、颜色等。

    在 Update 方法中,我们检测到用户按下空格键时,调用 PlayParticleEffect 方法来播放粒子效果。PlayParticleEffect 方法中,我们调用 ParticleSystem 的 Play 方法来启动粒子效果,并使用协程在一定时间后停止粒子效果。

    StopParticleEffect 方法中,我们使用 WaitForSeconds 方法等待粒子生命周期的时间后,停止粒子效果并清空粒子。

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老师好我差点叫何同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值