1. Wiki
  2. /粒子
  3. /发射器组件

发射器组件

所有 Minecraft Bedrock 粒子发射器组件汇总:设置、生成速率、生命周期和形状,附带字段说明和简短示例。

发射器是每个粒子效果背后那个看不见的生成器。它的组件决定它何时运行、产生多少粒子以及粒子从哪里出发。它们都写在粒子文件的 components 块中,与粒子组件放在一起。

刚接触粒子?请从你的第一个粒子开始,它会一步步带你做出一个完整的红宝石闪光效果。

每个发射器都需要什么

发射器需要一个生命周期组件和一个速率组件,否则它什么都不会生成。形状是可选的:没有形状时,粒子从发射器的中心出发。每一类组件只能使用一个。

本页大多数数值字段既可以填普通数字,也可以填 Molang 字符串,比如 "math.random(1, 3)"。表格中会标明字段何时被计算:发射器启动时计算一次、每次循环计算,或者每生成一个粒子时逐粒子计算。

设置

这些组件在任何东西生成之前运行。它们可以与其他任何组件一起使用。

组件作用关键字段
minecraft:emitter_initialization在发射器上运行 Molang,主要用来设置你自己的变量,供其他字段稍后读取creation_expression:发射器启动时运行一次。per_update_expression:每次更新时运行
minecraft:emitter_local_space用于附加在生物身上的效果:选择粒子是跟着生物移动,还是留在它们诞生的地方position、rotation、velocity(都是 true 或 false,默认 false)

设置变量

emitter_initialization 是掷一次随机数并让每个粒子共享它的地方:

RP/particles/ruby_sparkle.json (inside components)
"minecraft:emitter_initialization": {
  "creation_expression": "variable.ruby_hue = math.random(0.2, 0.4);"
}

现在,这个发射器产生的每个粒子都可以读取 variable.ruby_hue,比如在它的着色中使用。

局部空间

默认情况下,粒子从发射器出发,之后就在世界中独立存在。如果生物走开了,它之前的粒子会留在原地,像一条尾迹。

  • position: true 让粒子跟着生物移动。适合需要一直环绕在生物周围的光晕。
  • rotation: true 还会让它们跟着生物一起转动。它只能与 position: true 一起使用。
  • velocity: true 把生物的速度加到每个新粒子上,这样奔跑的生物甩出的火花会向前飞。
RP/particles/ruby_aura.json (inside components)
"minecraft:emitter_local_space": {
  "position": true,
  "rotation": true
}

仅用于附加的效果

对于通过 /particle 或脚本在世界中某个位置播放的效果,局部空间不起任何作用。只有当生物或附着物播放这个效果时,它才有意义。

速率

速率决定粒子出现多少以及出现多快。选一个即可。

组件作用关键字段
minecraft:emitter_rate_instant在同一时刻生成一批粒子,就像一次爆发num_particles(默认 10,每次循环)
minecraft:emitter_rate_steady以均匀的节奏一个接一个地生成粒子spawn_rate:每秒粒子数(默认 1)。max_particles:同时存在的最大数量(默认 50)
minecraft:emitter_rate_manual自己什么都不生成。由游戏在需要时逐个生成粒子max_particles(默认 50)

瞬时:一次爆发

components 内部
"minecraft:emitter_rate_instant": {
  "num_particles": 12
}

如果发射器是循环的,每次循环开始时它都会再爆发一次。

稳定:一股粒子流

components 内部
"minecraft:emitter_rate_steady": {
  "spawn_rate": 20,
  "max_particles": 40
}

这会每秒产生 20 个粒子,但当已有 40 个存活时就停止添加新粒子。max_particles 是一道安全上限:请把它设得低一些,因为成百上千的粒子会让性能较弱的手机变卡。

手动:用于事件

emitter_rate_manual 用于游戏一次生成一个粒子的内置效果,比如雨滴溅起的水花。在你自己的效果中,它主要用于由其他效果通过 particle 类型事件生成的小效果(参见事件)。你自己播放的效果,请使用瞬时或稳定速率。

生命周期

生命周期决定发射器持续工作多久。选一个,如有需要再加上生命周期事件。

组件作用关键字段
minecraft:emitter_lifetime_once运行一次,然后移除自己active_time:生成持续的秒数(默认 10)
minecraft:emitter_lifetime_looping运行、暂停、再运行,直到被某个东西移除active_time:运行的秒数(默认 10)。sleep_time:循环之间暂停的秒数(默认 0)
minecraft:emitter_lifetime_expression由 Molang 控制开关,每帧检查一次activation_expression:不为 0 时生成(默认 1)。expiration_expression:一旦不为 0 就移除发射器(默认 0)
minecraft:emitter_lifetime_events在发射器生命中的某些时刻触发你的事件creation_event、expiration_event、timeline、travel_distance_events、looping_travel_distance_events

一次

用命令或脚本播放一次性效果时的最佳选择:

components 内部
"minecraft:emitter_lifetime_once": {
  "active_time": 1
}

配合 emitter_rate_instant 时,爆发发生在开头,所以 active_time 可以很短。

循环

components 内部
"minecraft:emitter_lifetime_looping": {
  "active_time": 2,
  "sleep_time": 3
}

这会闪烁 2 秒,休息 3 秒,然后重复。循环适用于附加在生物身上或由动画控制器播放的效果,当生物或状态消失时,游戏会替你移除发射器。

表达式

非常适合跟随生物、能自己开关的效果:

components 内部
"minecraft:emitter_lifetime_expression": {
  "activation_expression": "query.ground_speed > 0.1",
  "expiration_expression": 0
}

这只会在生物行走时闪烁,并且永远不会移除自己。像 query.ground_speed 这样的查询读取的是效果所附加的那个生物。

事件

emitter_lifetime_events 指向同一文件中 events 块里的名字。每个字段可以填一个事件名,也可以填一个名字列表。

components 内部
"minecraft:emitter_lifetime_events": {
  "creation_event": "flash",
  "expiration_event": "pop",
  "timeline": {
    "0.5": "twinkle",
    "1.0": ["twinkle", "chime"]
  },
  "travel_distance_events": {
    "4.0": "dust"
  },
  "looping_travel_distance_events": [
    { "distance": 1.0, "effects": ["dust"] }
  ]
}
字段触发时机
creation_event发射器启动时
expiration_event发射器结束时。它不会等待粒子消失
timeline在这些时间点(单位为秒)。每次循环都会再次运行
travel_distance_events发射器总共移动了这么多格时,触发一次
looping_travel_distance_events每移动这么多格就触发一次,反复进行。非常适合做脚印或弹射物后面的尾迹

形状

形状决定每个粒子从哪里出发,以及它朝向哪个方向。particle_initial_speed 就是沿着这个方向推动粒子的。选一个即可。

组件粒子的出发位置关键字段
minecraft:emitter_shape_point全部从同一个点出发offset、direction
minecraft:emitter_shape_sphere在球体内部或其表面上radius(默认 1)、offset、surface_only、direction
minecraft:emitter_shape_box在盒子内部或其表面上half_dimensions、offset、surface_only、direction
minecraft:emitter_shape_disc在一个平面圆上或其边缘radius(默认 1)、plane_normal、offset、surface_only、direction
minecraft:emitter_shape_custom由你的 Molang 决定offset、direction
minecraft:emitter_shape_entity_aabb在所附加生物周围的盒子内部surface_only、direction

各形状共用的字段

字段作用
offset把出发位置从发射器移开,格式为 [x, y, z],单位是方块。逐粒子计算,所以在这里用 Molang 可以把它们打散
direction新粒子朝向哪里。"outwards"(背离中心,默认值)、"inwards"(朝向中心),或者你自己的 [x, y, z]
surface_onlytrue 只在形状的外表面生成,而不在内部生成。默认为 false

点形状和自定义形状只接受 [x, y, z] 方向,因为它们没有可以背离的中心。

点

components 内部
"minecraft:emitter_shape_point": {
  "offset": [0, 0.5, 0],
  "direction": [0, 1, 0]
}

每个粒子都从发射器上方半格处出发,并笔直朝上。

球体

components 内部
"minecraft:emitter_shape_sphere": {
  "radius": 0.5,
  "surface_only": true,
  "direction": "outwards"
}

一个四散飞开的空心闪光球。试试把方向改成 "inwards" 并配合较短的生命周期,就能做出“聚集力量”的效果。

盒子

components 内部
"minecraft:emitter_shape_box": {
  "offset": [0, 0.5, 0],
  "half_dimensions": [0.5, 0.5, 0.5],
  "direction": [0, 1, 0]
}

half_dimensions 是从中心开始量的,所以每边都是 0.5 时正好填满一个方块。适合覆盖整个方块的效果,比如发光的矿石。

圆盘

components 内部
"minecraft:emitter_shape_disc": {
  "radius": 1.5,
  "plane_normal": "y",
  "surface_only": true,
  "direction": "outwards"
}

plane_normal 是圆盘朝向的轴。"y"(默认值)让它像地毯一样平铺,"x" 和 "z" 让它像墙一样立起来。你也可以填自己的 [x, y, z]。这个例子会在地面上形成一个向外扩散的圆环:一个很棒的落地效果。

自定义

components 内部
"minecraft:emitter_shape_custom": {
  "offset": [
    "math.random(-0.1, 0.1)",
    "math.random(0, 2)",
    "math.random(-0.1, 0.1)"
  ],
  "direction": [0, 1, 0]
}

使用自定义形状时,出发位置由你自己以 [x, y, z] 计算。这里把每个粒子放在最高 2 格的随机高度上,但在水平方向上保持靠近中间:一根细细的闪光柱,就像一道光束。每个值都会为每个粒子重新计算。

实体盒

components 内部
"minecraft:emitter_shape_entity_aabb": {
  "surface_only": false,
  "direction": [0, 0.2, 0]
}

它使用生物自己的碰撞箱,所以同一个效果无需修改就能同时适配鸡和红宝石傀儡。如果效果没有附加在生物身上,粒子就会从发射器所在的点出来。

完整的发射器

把每一类各取一个组合起来。这个光环会在生物存在时循环,并紧贴着它:

RP/particles/ruby_aura.json (inside components)
"minecraft:emitter_local_space": {
  "position": true,
  "rotation": false
},
"minecraft:emitter_lifetime_looping": {
  "active_time": 1
},
"minecraft:emitter_rate_steady": {
  "spawn_rate": 8,
  "max_particles": 20
},
"minecraft:emitter_shape_entity_aabb": {
  "surface_only": true,
  "direction": [0, 1, 0]
}

再从粒子组件中加上粒子部分(生命周期、外观和运动),然后从生物的动画中播放它,具体方法见你的第一个粒子。

We use cookies to improve your experience and analyse site traffic. Learn more