当前位置: 首页 > news >正文

【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。

使用场景

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

相关文章:

  • 通过linux命令获取自选股票价格及大盘涨跌幅
  • 透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
  • vue3字典数据的显示问题(使用hooks解决)
  • Elasticsearch 单节点安全配置与用户认证
  • 二分查找(带图详解)
  • 【Git】:标签管理
  • 物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉
  • 单片机软件工程师前景分析
  • 在Java中几种常用数据压缩算法的实现及其优劣势
  • Word——如何打出 符号中的 1、2、3等带圆圈的序号
  • 操作系统之进程与线程
  • 代码随想录算法训练营打卡第35天:背包问题
  • 【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
  • vscode(一)安装(ubuntu20.04)
  • 利用永恒之蓝对win7进行键盘记录
  • 万字长文解读深度学习——dVAE(DALL·E的核心部件)
  • RL仿真库pybullet
  • file_get_contents函数导致网站卡死响应超时
  • 如何使用C#与SQL Server数据库进行交互
  • #渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(上)
  • vue3 项目搭建-9-通过 router 在跳转页面时传参
  • Java、python标识符命名规范
  • 高效职场人
  • 深入探索现代 IT 技术:从云计算到人工智能的全面解析
  • 【AI学习】苹果技术报告《Apple Intelligence Foundation Language Models》
  • 深度相机获取实时图像总结
  • Nginx限流实践-limit_req和limit_conn的使用说明
  • Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?
  • 记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug
  • 前端TS基础