playsound コマンドについて
ちょっと使いづらいなという印象を受けた。
まずは構文
playsoundコマンド 構文
playsound [流したい音] [なんの音として流すか] [誰に流すか] [流す場所] [聞こえる距離]
というのが主な文
一つ一つ説明していこう
[なんの音として流すか]
これはMinecraftの設定部分に関する話。Minecraftの音量設定は主音量、BGM、ジュークボックス、天候、ブロック………って感じで音が分類分けされていてそれぞれの音量を個別で調整できる。
これをどれにするかでどの音として流すか決められる。
例えば、主音量100%、BGM50%の人に流す時、ココをmasterにすると爆音で流れるけど、musicにして流すと半分の音で流れる。
主音量=master、BGM=music、ジュークボックス=record という感じで紐づいている
[誰に流すか]
至ってシンプル。誰に再生するか決めよう。@aとか@pとか入れておこう。
[流す場所]
どこで再生するか位置を決めれる。xyzでの座標を書いておこう。
これを設定すると音の位置を使ったギミックが作れるから嬉しい。
あと、場所から離れるとフェードアウトもしていく。店内BGMとかとして使うならこの要素は便利かも。
[聞こえる距離]
文字通り聞こえる距離を決める。流す場所から聞こえる距離を設定する。1に設定すると半径16マスまで聞こえる。つまるところ設定単位はチャンクやね。
例文
ここまで解説したから例文を1つ。そんな複雑なものでもないけど。
playsound minecraft:entity.wolf.ambient master @a ~ ~ ~ 2
ってやると狼の鳴き声が自分から半径32ブロック以内のプレイヤーに主音量の音量設定を参照して再生する
という感じ。
ここまでなら普通にいい感じの音楽再生コマンドだった。
しかし…このコマンド、失敗することがある。
コマンドの失敗する条件
それは、音楽再生範囲内に対象のプレイヤーがいない場合再生されないというもの。
つまり、店内BGMを流したいなら常に流しっぱという楽な処理ではなく、店に来たタイミングで再生し始めなければならない。
音楽を利用したギミックを作る時にこの仕様にすごい苦労した。
ちなみに、その時解決した方法は、一瞬でもその場にいれば再生できるので
tp 再生したい場所
playsound 音楽
tp 再生したい場所
playsound 音楽
tp 再生したい場所
playsound 音楽
というようなfunctionを用意した。functionなのでその場に居た時間は1tickにも満たないような極小時間だけど、これでもちゃんと再生されたんだから驚きだった。