先看下要最终实现的效果:
代码如下:
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
。 - 这一步确保脚本可以访问并操作粒子系统。
- 获取挂载在当前 GameObject 上的
-
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)
:- 一个无限循环,确保喷射和暂停逻辑反复执行。
- 每次循环包含两步操作:
- 喷射粒子:调用
_particleSystem.Play()
开始粒子喷射。 - 暂停粒子:调用
_particleSystem.Stop()
停止粒子喷射。
- 喷射粒子:调用
-
yield return new WaitForSeconds(duration)
:- 暂停协程的执行,等待指定时间
duration
后继续。 - 第一次
yield
等待粒子喷射的持续时间(burstDuration
)。 - 第二次
yield
等待粒子暂停的持续时间(pauseDuration
)。
- 暂停协程的执行,等待指定时间
运行流程
-
开始时:
- 获取粒子系统组件。
- 启动协程控制粒子系统喷射逻辑。
-
循环逻辑:
- Step 1: 开始喷射粒子,持续
burstDuration
秒。 - Step 2: 停止粒子喷射,暂停
pauseDuration
秒。 - 重复上述步骤,直到停止脚本或销毁 GameObject。
- Step 1: 开始喷射粒子,持续
使用场景
- 需要一个周期性喷射和暂停的粒子效果,例如:
- 爆炸效果分批喷射。
- 火山喷发间歇冒烟。
- 闪烁的灯光粒子特效。