MCBE通通nx指令范围随机粒子的操作方法
/execute as @e[c=2]那一串嵌套九层的东西,就是在范围内随机取点,每层as @e[c=2]把选择器展开成一批实体,下一层再从这批里随机挑,最里面用rotated as @r[name=nx,type=armor_stand]随机转朝向,然后positioned ^0.03125^^沿随机朝向走一小段,再随机转再走,反复叠上去位置就散开了。^后面三个空的意思是朝向和侧向不偏移,只在前方偏移指定量,第一轮用0.03125当步长,后面每轮翻倍,0.0625、0.125、0.25、0.5、1、2、4、8,八轮下来横向散布半径大概是0.03125*(2^8-1),差不多8格范围,精度从0.03125开始是因为有人指出来0.0625不是一像素精度,0.03125才是。
rotated as @r[name=nx,type=armor_stand]和positioned ^^^0.03125交替出现两组,前一组沿朝向走横向随机,后一组^^^三个位置分别对应朝向、侧向、垂直,只填第三个就是在垂直方向走随机步长,这样随机范围从平面变成体积,做空间粒子云的时候两组都要留,只做地面法阵之类的可以去掉垂直那组,反正@r每次执行都会重新随机选一个朝向,所以同一个指令里出现多少次rotated as @r就相当于走了多少次随机方向。
最内层的run /particle minecraft:cherry_leaves_particle ~~~是最后在算出来的随机位置上出粒子,~~~相对坐标不偏移,粒子就落在当前随机定位的位置,粒子类型换什么都可以,minecraft:end_rod、minecraft:flame、minecraft:dust带颜色的都行,但注意基岩版particle命令的粒子和Java版不一样,不是靠delta和speed参数来散开的,只能靠外部execute先把位置散好。
@r[name=nx,type=armor_stand]和@r[name=nx,type=boat]两组各走了一遍完整的位置偏移序列,armor_stand是垂直轴方向随机,boat是另一个轴向,两个实体类型分开写是因为name=nx标签下可能同时挂了多种实体,用type筛选避免随机选到不该用的实体上去。实际做的时候nx标签下挂几个armor_stand摆好基准点就行,不用摆很多,@e[c=2]的嵌套会自己把数量扩出来。

c=2这个数量参数在每层as @e里都写了,意思是选择器最多选两个实体,嵌套九层理论上最多能出2^9=512个随机分支,实际执行时每个分支都会跑一遍最内层的particle命令,所以512个粒子同时出,服务器或者低配手机可能会卡,减层数或者把c=2改成c=1能降负载,但随机精度会降低,1层c=1就是线性随机不是范围随机了。
执行的时候在聊天栏或者命令方块里跑,命令方块要循环保持开启,conditional和红石控制都不用勾,@r每次执行都会重新随机,所以循环跑起来粒子位置每次都不一样,如果想让粒子固定位置只出一次,把最前面as @e[c=2]换成as @e[limit=1]然后加个tag控制执行次数,不过做范围随机粒子的时候基本都挂循环命令方块,每tick刷一次,粒子看起来是持续弥散的,不循环就一闪就没了。
做好的指令想改范围就调最后那个步长倍数,8改成4范围减半,16范围加倍,但精度会跟着变粗,因为每轮翻倍是固定的,要同时保精度和范围就得加层数,加到12层步长还是0.03125开始,2^12*0.03125=128格,代价是2^12=4096个粒子分支,手机端基本带不动,电脑端看CPU,跑起来卡的话优先减层数再加步长,或者换用rotated as @r[type=armor_stand,name=nx]在中间插随机yaw角度限制,不过那是另一个做法了,B站通通那个opus里面第一版到第二版改的就是精度起始值,0.0625改0.03125,改完粒子密度明显细了,我做的时候直接按他第二版的参数来,九层,0.03125起,步长翻倍到8止,实体用armor_stand,粒子搭minecraft:end_rod,执行频率循环命令方块调2tick一次
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删