自学内容网 自学内容网

【Unity高级】如何实现粒子系统的间歇式喷射

先看下要最终实现的效果:
在这里插入图片描述
代码如下:

using UnityEngine;
using System.Collections;

public class ParticleBurstController : MonoBehaviour
{
    private ParticleSystem _particleSystem; // 获取粒子系统
    public float burstDuration = 2f;       // 每次喷射持续时间(秒)
    public float pauseDuration = 2f;       // 每次暂停时间(秒)

    void Start()
    {
        _particleSystem = GetComponent<ParticleSystem>();
        StartCoroutine(ControlParticleBurst());
    }

    private IEnumerator ControlParticleBurst()
    {
        while (true)
        {
            _particleSystem.Play(); // 开启喷射
            yield return new WaitForSeconds(burstDuration); // 等待喷射持续时间

            _particleSystem.Stop(); // 停止喷射
            yield return new WaitForSeconds(pauseDuration); // 等待暂停时间
        }
    }
}

这段代码实现了一个简单的粒子系统 间歇喷射机制,通过控制粒子系统的 Play()Stop() 方法实现了 喷射和暂停交替运行 的效果。

以下是代码的详细解释:


代码结构

1. 类定义与变量声明
private ParticleSystem _particleSystem; // 获取粒子系统实例
public float burstDuration = 2f;       // 每次喷射持续时间,单位为秒
public float pauseDuration = 2f;       // 每次暂停时间,单位为秒
  • _particleSystem:保存当前 GameObject 上的 ParticleSystem 组件实例,用于控制粒子的喷射行为。
  • burstDuration:粒子系统处于“喷射”状态的持续时间。
  • pauseDuration:粒子系统处于“停止”状态的持续时间。

2. 初始化方法
void Start()
{
    _particleSystem = GetComponent<ParticleSystem>(); // 获取当前 GameObject 的粒子系统组件
    StartCoroutine(ControlParticleBurst());           // 启动协程控制粒子喷射逻辑
}
  • GetComponent<ParticleSystem>()

    • 获取挂载在当前 GameObject 上的 ParticleSystem 组件,赋值给 _particleSystem
    • 这一步确保脚本可以访问并操作粒子系统。
  • StartCoroutine(ControlParticleBurst())

    • 启动一个名为 ControlParticleBurst 的协程,用于控制粒子的喷射和暂停循环逻辑。

3. 协程:ControlParticleBurst()
private IEnumerator ControlParticleBurst()
{
    while (true) // 无限循环,持续间歇控制粒子系统
    {
        _particleSystem.Play(); // 开启粒子喷射
        yield return new WaitForSeconds(burstDuration); // 等待喷射时间

        _particleSystem.Stop(); // 停止粒子喷射
        yield return new WaitForSeconds(pauseDuration); // 等待暂停时间
    }
}
  • while (true)

    • 一个无限循环,确保喷射和暂停逻辑反复执行。
    • 每次循环包含两步操作:
      1. 喷射粒子:调用 _particleSystem.Play() 开始粒子喷射。
      2. 暂停粒子:调用 _particleSystem.Stop() 停止粒子喷射。
  • yield return new WaitForSeconds(duration)

    • 暂停协程的执行,等待指定时间 duration 后继续。
    • 第一次 yield 等待粒子喷射的持续时间(burstDuration)。
    • 第二次 yield 等待粒子暂停的持续时间(pauseDuration)。

运行流程

  1. 开始时

    • 获取粒子系统组件。
    • 启动协程控制粒子系统喷射逻辑。
  2. 循环逻辑

    • Step 1: 开始喷射粒子,持续 burstDuration 秒。
    • Step 2: 停止粒子喷射,暂停 pauseDuration 秒。
    • 重复上述步骤,直到停止脚本或销毁 GameObject。

使用场景

  • 需要一个周期性喷射和暂停的粒子效果,例如:
    • 爆炸效果分批喷射。
    • 火山喷发间歇冒烟。
    • 闪烁的灯光粒子特效。

原文地址:https://blog.csdn.net/tealcwu/article/details/144277314

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!