当前位置: 首页 > 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。

使用场景

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

相关文章:

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

先看下要最终实现的效果&#xff1a; 代码如下&#xff1a; using UnityEngine; using System.Collections;public class ParticleBurstController : MonoBehaviour {private ParticleSystem _particleSystem; // 获取粒子系统public float burstDuration 2f; // 每次…...

通过linux命令获取自选股票价格及大盘涨跌幅

技术发展与数据获取需求 互联网与金融数据融合:随着互联网的普及和金融市场的数字化发展,金融数据的获取和分析变得更加便捷和重要。投资者希望能够及时、准确地获取股票价格和市场指数等信息,以便做出合理的投资决策。Linux 作为一种强大的操作系统,为数据获取和处理提供…...

透彻理解并解决Mockito模拟框架的单元测试无法运行的问题

本篇的实例基于Maven IDE (VS Code) 运行 在VS Code 运行的时候&#xff0c; 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮&#xff0c;单击就可以运行使用Mockito 注解 ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。 不使用注…...

vue3字典数据的显示问题(使用hooks解决)

我们在使用 element-plus的时候&#xff0c;经常会使用一些字典数据&#xff0c; 在搜索框的时候&#xff0c;字典数数要使用 el-select el-option 来显示&#xff0c;当在table表格的时候&#xff0c;我们通常记录的是 字典数据的id , 又要把它改变成 字典数据的 name 属性 因…...

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞&#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时&#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤&#xff0c;为单节…...

二分查找(带图详解)

优选算法系列 文章目录 优选算法系列前言一、二分查找的思想二、算法使用小总结 三、代码实现四、二分查找拓展4.1、查找第一次出现的target小总结 4.2、target最后出现的位置小总结 五、代码总结 前言 在这篇博客中&#xff0c;我会给大家分享二分查找及其扩展。 这是链接-&…...

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本&#xff1a;标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样…...

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...

单片机软件工程师前景分析

单片机软件工程师的前景在2024年看起来是积极的。随着物联网&#xff08;IoT&#xff09;、自动化、智能设备等领域的快速发展&#xff0c;对于能够开发基于单片机&#xff08;MCU&#xff09;如STM32、ARM、51等嵌入式系统的软件工程师需求持续增长。这些工程师负责设计和实现…...

在Java中几种常用数据压缩算法的实现及其优劣势

在Java中几种常用数据压缩算法的实现及其优劣势 背景&#xff1a;项目需要引入Redis作为缓存组件&#xff0c;需要考虑到Redis的内存占用&#xff08;机器内存越大&#xff0c;成本越高&#xff09;&#xff0c;因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...

Word——如何打出 符号中的 1、2、3等带圆圈的序号

一、方式1 1.1&#xff1a;点击 插入-符号 1.2&#xff1a;字体 选择 Wingdings 或者 Wingdings 2 二、方式2 带1的圈&#xff1a;输入 2460&#xff0c;然后按 AItX 带2的圈&#xff1a;输入 2461&#xff0c;然后按 AItX 带3的圈&#xff1a;输入 2462&#xff0c;然后按 …...

操作系统之进程与线程

进程 定义&#xff1a; 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的独立单位。 组成&#xff1a; 包括程序代码、程序处理的数据、程序计数器、一组寄存器的值以及系统资源&#xff08;如打开的文件&#xff09;等。 …...

代码随想录算法训练营打卡第35天:背包问题

前言 zaccheo打卡代码随想录第35天 由于这段时间工作太忙了&#xff08;加上我的懒病犯了&#xff09;导致迟打卡了好几天555555.。。。 今天的主要是动态规划中的背包问题&#xff0c;这个真的是蛮难理解的&#xff0c;我把我自己强行按在椅子上半个小时一点一点的看卡哥文章…...

【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…...

vscode(一)安装(ubuntu20.04)

1、更新软件包列表 sudo apt update2、安装依赖包 sudo apt install software-properties-common apt-transport-https wget3、导入Microsoft GPG密钥 wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -4、向系统添加VSCode存储库 sudo…...

利用永恒之蓝对win7进行键盘记录

打开kali中的msfconsole 找到永恒之蓝&#xff0c;设置靶机ip&#xff0c;后可以exploit&#xff0c;也可以run 连接成功 查看进程&#xff0c;选择监听靶机win7上的cmd.exe进程 当前进程不是1484&#xff0c;需要迁移到1484 cmd.exe&#xff0c;进程迁移 键盘监听&#xff0c;…...

万字长文解读深度学习——dVAE(DALL·E的核心部件)

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…...

RL仿真库pybullet

1. 介绍 PyBullet是一个基于Bullet Physics引擎的物理仿真Python接口&#xff0c;主要用于机器人仿真模拟。 1.1 主要特点 提供大量预设的机器人模型&#xff0c;例如URDF(统一机器人描述格式)、SDF、MJCF 格式。适用于训练和评估强化学习算法&#xff0c;提供了大量的强化学…...

file_get_contents函数导致网站卡死响应超时

宝塔控制面板系统下运行包含file_get_contents函数的php文件时候&#xff0c;发生以下报错&#xff1a; PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed: 解决方法&#xff1a; 一&#xff1a;需要检查请求的远程主机是否在本机的/etc/host…...

如何使用C#与SQL Server数据库进行交互

一.创建数据库 用VS 创建数据库的步骤&#xff1a; 1.打开vs&#xff0c;创建一个新项目&#xff0c;分别在搜素框中选择C#、Windows、桌面&#xff0c;然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”&#xff0c;右键单击“数据连接”&#xff0…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...