/particle:delta 和 speed 的真正含义,以及 count=0 的妙用
位置后面的四个数字并非方向。本文将解释 delta 和 speed 的作用、为何 count=0 的行为截然不同,以及如何精确控制粒子方向。
/particle flame ~ ~1 ~ 0.5 0.5 0.5 0.01 20
└─ delta ─┘ spd count
这四个数字是命令中最容易被误解的部分。
delta 是扩散范围,而非方向
dx dy dz 描述了粒子围绕其位置的高斯扩散(Gaussian spread)——即粒子在每个轴上的散射距离。0.5 0.5 0.5 会产生一个模糊的球体;2 0 0 则会沿着 X 轴产生一条线。
它们不是速度矢量。正负值没有区别;-2 0 0 和 2 0 0 会产生相同的线条。
除非 count 为 0
将 count 设置为 0 后,前面所有数字的含义都会改变:
| count | delta 含义 | speed 含义 |
|---|---|---|
| ≥ 1 | 随机扩散 | 随机速度大小 |
| 0 | 方向矢量 | 沿该方向的速度 |
/particle flame ~ ~1 ~ 0 1 0 0.5 0 → one particle shot straight up at 0.5
这是唯一能够精确控制粒子方向的方法。所有关于“如何制作光束”的问题,最终都会归结到这里。代价是每条命令只能生成一个粒子,所以要制作光束需要循环或链式命令。
speed 并非总是速度
对于大多数粒子,speed 是一个速度乘数。但对于少数粒子,它的用途被完全改变了:
dust— 大小是一个参数,speed 不起作用note— speed 选择颜色,0到24映射到色相环上entity_effect— 颜色取自 alpha-RGB 参数
所以,一个带有 speed 1 的 note 粒子并非速度快,而是颜色不同。
带有独立参数的粒子
/particle dust{color:[1.0,0.0,0.0],scale:1} ~ ~ ~ 0 0 0 0 1
/particle block{block_state:"minecraft:stone"} ~ ~ ~ 0.3 0.3 0.3 0 10
/particle dust_color_transition{from_color:[1,0,0],to_color:[0,0,1],scale:1} ~ ~ ~ 0 0 0 0 1
参数块紧随粒子名称之后,在坐标之前。将其放在末尾是常见的语法错误。
force 和观察者
命令以可选的模式和玩家结束:
/particle flame ~ ~ ~ 0 0 0 0 1 force @a
normal 遵循每个客户端的粒子设置和 32 格的可见性限制。force 则无论如何都会显示粒子,并且可见范围可达 512 格。对于玩家必须看到的内容——例如 Boss 预警、任务标记——force 是必需的,这也是为什么你的粒子对你有效,而对那些减少了粒子设置的玩家无效的原因。
性能
粒子是客户端渲染,所以开销落在玩家身上,而不是服务器。每个玩家每刻 count 达到 200 个粒子,即使服务器 TPS 不受影响,也会在配置一般的硬件上降低帧率。请将粒子发射分散到多个刻中,而不是一次性发出大量粒子。
在粒子与音效库中浏览所有粒子类型和 1,900 多个音效 ID,并附带现成的命令。