跳转至

粒子

粒子(Particle)是Minecraft基岩版中用于表现短时、轻量视觉特效的图形元素。粒子通常由面向摄像机或特定方向的纹理面片构成,用于表现火焰、烟雾、水花、气泡、魔法光效、爆炸碎片、实体状态反馈和环境氛围等效果。

概述

基岩版的粒子由粒子系统(Particle System)管理。粒子系统负责创建粒子发射器、生成粒子、更新粒子运动、计算Molang表达式、处理碰撞与事件,并在客户端渲染粒子外观。粒子特效本身属于资源包内容,通常以JSON定义文件存放在particles/目录中。

每个粒子特效(Particle Effect)通过赋命名空间标识符引用,例如minecraft:basic_flame_particle。粒子文件的路径不直接决定引用名称;真正的引用名称由定义文件中的particle_effect.description.identifier声明。

粒子特效定义

粒子特效定义描述一个效果的基础渲染参数、组件、曲线和事件。基础渲染参数指定粒子使用的材质与纹理,组件则共同决定粒子如何生成、如何运动、何时过期和如何显示。

粒子定义采用组件化结构。一个效果可以只包含少量组件,例如一次性火焰粒子;也可以组合发射率、发射器形状、粒子寿命、动态运动、碰撞、公告板外观、颜色梯度、翻书动画和事件系统,形成复杂的连锁效果。

粒子发射器

粒子发射器(Particle Emitter)是粒子系统中负责生成粒子的运行时对象。发射器不等同于粒子本身;一个发射器可以在自己的生命周期内生成多个粒子,而每个粒子又拥有独立的年龄、寿命、速度、颜色和随机数。

发射器通常定义以下方面:

  • 发射器的启用、休眠、循环和过期条件;
  • 每秒持续生成粒子、瞬间生成粒子或由事件手动生成粒子的方式;
  • 粒子生成的位置形状,例如点、球体、盒体、圆盘、自定义表达式或实体轴对齐包围盒;
  • 粒子的初始方向,以及实体挂接时是否在实体本地空间中模拟。

详见粒子发射器

粒子属性

单个粒子在其生命周期内具有可计算的状态。常见状态包括:

  • 年龄(Age):粒子已存在的时间;
  • 生命周期(Lifetime):粒子从生成到过期的持续时间;
  • 位置(Position)速度(Velocity)加速度(Acceleration):决定粒子在世界或发射器空间中的运动;
  • 旋转(Rotation)和旋转速度:决定粒子面片的朝向或自转;
  • 大小(Size):决定公告板面片的宽度和高度;
  • 颜色(Color)不透明度(Opacity):决定粒子的着色和透明表现;
  • 与粒子寿命绑定的随机数:用于让同一效果中的各个粒子产生差异。

粒子字段可以广泛使用Molang表达式。粒子上下文提供发射器年龄、发射器寿命、粒子年龄、粒子寿命和多组随机数等变量,使粒子可以随时间自然变化。

纹理与公告板

多数粒子以公告板(Billboard)形式显示,即在三维世界中绘制一个矩形纹理面片。公告板可以始终面向摄像机,也可以只绕世界y轴旋转,或按粒子速度、指定方向、发射器变换来确定朝向。

粒子外观通常由纹理的UV区域决定。粒子还支持翻书动画(Flipbook Animation),即按帧切换同一纹理表中的多个区域,以形成火焰、水花、爆炸等逐帧动画效果。

曲线与事件

曲线(Curve)是粒子定义中用于描述数值随输入变化的插值工具。曲线可将粒子年龄、粒子寿命或其他Molang结果转换为大小、颜色、速度等字段使用的变量。粒子曲线支持线性、贝塞尔、贝塞尔链和Catmull-Rom等形式。曲线的输出被写入Molang变量供粒子组件引用,使得粒子属性能够随时间平滑变化。

粒子事件(Particle Event)是粒子系统中可触发其他动作的事件节点。事件可由多种条件触发:

  • 发射器创建时触发(creation_event
  • 发射器过期时触发(expiration_event
  • 粒子创建时触发(creation_event,位于minecraft:particle_lifetime_events
  • 粒子过期时触发(expiration_event,位于minecraft:particle_lifetime_events
  • 发射器运动到指定距离时触发(travel_distance_events
  • 动画时间轴到达指定时间点时触发(timeline
  • 粒子与地形碰撞时触发(collision_event

事件可执行多种动作:

  • 生成其他粒子特效(particle_effect)——可在事件位置创建新发射器,或在现有发射器上手动发射粒子
  • 播放音效(sound_effect)——播放指定的关卡音效事件
  • 执行Molang表达式(expression)——修改粒子或发射器变量
  • 记录调试信息(log

事件节点可按顺序组合(sequence)或按权重选择(randomize),使复杂的连锁效果(如烟花、爆炸、碰撞火花)能够由粒子JSON自身描述,无需脚本支持。

与实体、命令和脚本的关系

粒子特效是客户端视觉效果。游戏可以通过多种途径触发同一个粒子标识符:

  • /particle命令可在指定坐标播放粒子特效;
  • 客户端实体定义可将粒子特效映射为短名称,动画或动画控制器再按时间点、状态或定位器触发该短名称;
  • 脚本API可在维度中生成粒子特效;
  • 原版机制可在交互、状态变化、天气和环境表现中自动播放粒子。

命令和服务端逻辑只负责请求粒子播放,实际粒子资源需要在客户端启用的资源包中存在。标识符、资源包加载顺序、纹理路径或材质错误都可能导致粒子无法显示。

相关参考