【JEコマンド講習会】第1回、ハートのパーティクルで渦を作ってみる & ちょっとした効果音をつける【マインクラフト】

スポンサーリンク

ようこそぷっこ村へ、ししゃもです。

(・∀・)ノ

はい、と言うわけで、唐突に始まったコマンド講習会第1回で、これはその資料です。まぁ、始まった理由をざっくり言うと、猫の恩返しです。はい、意味わかんないですね。でもいいんです、人類の知り得た知識なんて、宇宙全体の砂粒にも満たない程度なんですから。

パーティクルと効果音で簡単な仕掛けを作る

今回の仕掛け

今回は導入編と言うことで、簡単な仕掛けを作ってコマンドは怖くないよ、ということを感じてもらいたいと思います。作ってみるのは以下の動画のような仕掛け↓

感圧板を踏むと、一定時間ハートのパーティクルがクルクルと渦を巻いて発生し、シャラシャラと効果音が出ます。時間の設定はコマブロの場合は回路で行い、仕掛け自体に使っているコマンドは3つ

  • tp …テレポートさせる
  • particle …パーティクルを発生させる
  • playsound …効果音の再生

字面的にどんなコマンドなのかっていうのは、何となくわかりますが、こんなことができるっていうのをもうちょい詳しくかつ簡単に書いときます。書き溜まったら、各コマンドごとにこんなことできるんやでってまとめた方がいいかな?まぁおいおい。

あえてゴチャっと書きますが、今は [] とかわからなくていいし、へーって思うくらいで全然おっけー。

tp をざっくり

文字通り、テレポートさせるコマンド。向きの指定や、別の対象の〇マス前とかも可能。いずれ出る execute コマンドと組み合わせることが多い。ぶっちゃけ一番難しいです。

一例
/tp @s @e[type=zombie,limit=1,sort=nearest]
コマンドを実行した対象を一番近いゾンビにテレポート

/tp @p[x=24,y=64,z=-24,dx=0,dy=0,dz=0] 10 64 -10
コマンド実行者の一番近くで、座標(24, 64, -24) にいるプレイヤーを 座標(10,64,-10)にテレポート

particle をざっくり

ゲーム内で使われるパーティクルを発生させるコマンド。実はブロック破壊時とか、アイテム使用時(りんご食べた時とか)に発生する、飛び散るやつも呼び出せるので、かなり使い勝手がよく、幅が広いです。ゾンブレラの出血とか骨折はアイテムのパーティクルを使ってます。

基本の書き方
/particle 呼び出したいパーティクル x座標 y座標 z座標 x発生範囲 y発生範囲 z発生範囲 パーティクルのスピード 発生数

発生範囲がちょっと特殊で、各軸1で8マスに分布します。じゃあ 0.1 なら 0.8 かって言われると自信ないし、そこまで困ったことがないよ。分布の仕方はガウス分布って言って、中央に近いほど多く発生します。

一例
/particle minecraft:item minecraft:apple ~ ~1.5 ~ 0.2 0.2 0.2 0 30
リンゴ食べた時のパーティクルを、足元から1.5高い位置にプレイヤーの幅くらいの範囲に、スピードゼロで30個発生させる。

/execute as @e[tag=aaa,distance=..16] at @s anchored eyes run particle minecraft:heart ^ ^ ^1 0 0 0 1 1 force
コマンド実行者の16マス以内にいる、aaa ってタグを持ったエンティティの1マス目の前にハートを1つ出す。

anchored eyes はエンティティが目の位置を持ってる場合起点がそこになる構文で、通常は足の位置。この場合は座標で調整すればいいけど、厳密にしたい時もあるので、あるってことだけ覚えとくといいです。

最後の force は発生場所から離れても表示するかどうか。force とnormal があって、何も書かないとデフォルトの normal になります。normal だと2チャンク離れると見えなくなるので試してみてね。

playsound をざっくり

音を鳴らすコマンド。ピッチと音量を変えれるので便利。リソパとあわせれば、自前の効果音とかBGMも使えます

一例
playsound minecraft:entity.ender_eye.death block @a[distance=..16] ~ ~ ~ 1 1
コマンド実行者の座標でエンダーアイが消える時の音を鳴らし、16マス以内にいる全プレイヤーに聞こえるようにする。ただ、音の範囲は16マスなので、この書き方はあんまり意味はない。パフォーマンスのためならあってもいいと思うよ。

最後の 1 1 は音量とピッチで、音量は2以上でも実行されるけど変わってるか?ピッチは0.0~2.0までです。

death の後にある block は音が発生するソースの指定です。この場合、サウンド設定でブロックの音を切ってると再生されません。状況によって変えるといいけど、めんどいので master を使っとけば大体はええんちゃう?

実際に仕掛けを作る

準備

解説が長くなって飽きてきたので、手を動かしましょう。用意するのは、アマスタとコマンドブロック、レバーの3つ。それらをこんな風に置きます。今回は全部で7個並べましょう。

第1回ししゃものマイクラコマンド講習会、簡単なパーティクルと効果音の仕掛けを作ってみる1

1個目をリピート、無条件、動力が必要に設定、後はチェーンにします。

第1回ししゃものマイクラコマンド講習会、簡単なパーティクルと効果音の仕掛けを作ってみる2

↑1個目の設定

第1回ししゃものマイクラコマンド講習会、簡単なパーティクルと効果音の仕掛けを作ってみる3

↑それ以外の設定

使うコマンド

今回は以下のコマンドを使ってみます。

execute as @e[type=minecraft:armor_stand,distance=..16] at @s run tp @s ~ ~ ~ ~21 ~
execute as @e[type=minecraft:armor_stand,distance=..16] at @s run particle minecraft:heart ^ ^1.6 ^1 0 0 0 1 1 force
execute as @e[type=minecraft:armor_stand,distance=..16] at @s run particle minecraft:heart ^ ^1.2 ^-0.8 0 0 0 1 1 force
execute as @e[type=minecraft:armor_stand,distance=..16] at @s run particle minecraft:heart ^ ^0.8 ^0.6 0 0 0 1 1 force
execute as @e[type=minecraft:armor_stand,distance=..16] at @s run particle minecraft:heart ^ ^0.4 ^-0.4 0 0 0 1 1 force
execute as @e[type=minecraft:armor_stand,distance=..16] at @s run particle minecraft:heart ^ ^ ^0.2 0 0 0 1 1 force
playsound minecraft:block.amethyst_block.chime master @a[distance=..16] ~ ~ ~ 2 1

1行目はアマスタの向きを簡単に変えるためのコマンドで、位置は今のまま右に21度回転させます。

2~6行目まではハートのパーティクルの発生位置の指定

7行目が効果音ですね。

順番に入れ終わったら、レバーをオン!!アマスタがクルクル回りながらハートを巻き散らしていれば成功です。簡単やね。

後は、リピーターで制御したり、感圧板に変えたりすれば、好きな時間再生されるわけですね。ほーら、もう1つ仕掛けが作れました、コマンドは怖くないよー。

より詳しく細かい所を解説

いきなりコマンドをぶちこめって言われて、これ何?ってところがあると思います。 as ? at ? ~(チルダ) ^(キャレット) が混じるけど何なん?上の動画だと、右に写ってるアマスタは回ってるのにハート出てないやん?あたりが気になるかもなので、ちょっと触れていきましょう。

as と at

as、at はエンティティを指定する時に付けるもので execute を使うときに(状況によって)必要になります。 execute はコマンド実行者とか実行位置を変える時に使うコマンドと思ってもらえばおけ。後々必要性が分かります。

で、as はコマンド実行者を指定する時に付けるもの。例えば、as @e[type=zombie] にするとゾンビが実行者になります。分かんない?フーンでいいです。

at は実行位置の指定に使います。 例えば as @e[type=zombie] at @s だと、実行位置がゾンビの足元になります。コマブロで実行する場合、無いと位置がおかしくなります。試しに、仕掛けに書き込んだコマンドの at @s だけ消してみましょう。どうなったかな?

これもいずれ、嫌でも痛感するんでフーンでいいです。まぁ、今はあるってことが分かればモーマンタイ。

~(チルダ) と ^(キャレット)

どちらも座標指定に使う記号です。

  • ~ …xyz軸方向にどれだけずらすかを指定する時に使う
  • ^ …エンティティの向いてる方に、左右、上下、前後を指定する時に使う。
execute at @s run tp @e[type=minecraft:armor_stand,distance=..16,limit=1,sort=nearest] ~ ~ ~10
execute at @s run tp @e[type=minecraft:armor_stand,distance=..16,limit=1,sort=nearest] ^ ^ ^10

試しにアマスタを置いて、上のコマンドを順番に実行してみましょう。アマスタが飛ぶ位置が違いますよね。1行目はプレイヤーの南10マスの所に、2行目はプレイヤーの10マス目の前にワープします。こんな感じで、飛ばす位置を変えたいときなんかに使い分けます。

右のアマスタ、ハート出ない問題。実行者と実行位置の概念は理解しとこう

ハートが出てないアマスタについて触れておきます。まず、今回の仕掛けを取り巻く環境を俯瞰したのが以下の画像

第1回ししゃものマイクラコマンド講習会、簡単なパーティクルと効果音の仕掛けを作ってみる4

赤い円は、紫のコマブロから15マス分距離が離れた位置にあります。自身の位置を入れると16マス。distance に入れた16とあいますね。撮影時は仕掛けが起動していて、円の上下左右に置いたアマスタも仕掛けに反応してます。

が、右のやつだけハートが出てません。回ってはいます。この現象が意図せず発生している場合、バグってやがるってことです。原因を追究して、意図したとおり動くように直さないといけません。

で、究明の結果、実行者と実行位置が噛み合ってないよねってことがわかりました。

コマンドの実行者とは

文字通り、コマンドを実行する者のことですが、コマンドをやり始めた時(主にデタパとか始めた時)に結構引っかかるポイントです。コマンドブロックの場合は、実行者はコマンドブロックです。(実際はサーバーなんだろうけど、良く分からんし、この認識でいいです。)

なので、仕掛けに使ったコマンドの1つを execute 無しの

particle minecraft:heart ^ ^1.6 ^1 0 0 0 1 1 force

と入れて、動かしてみると、コマンドブロックの近くにハートが出ますよね。コレだと困るので、execute と as を使って、実行者をアマスタにしてあげたわけです。この実行者は常に意識しないと、わけわかめな挙動を直せず禿げあがります。

そして、もう1つ、ある意味一番大事な注意点!!データパックで mcfunction という、コマンド群を1まとめにした関数を作ります。(いずれ一緒にやります)。大事なのは、この実行者は常にサーバーとなります。これ、マジで困惑するし、禿げるので、今のうちに知っといてください。

リピートアフターミー!! mcfunction の実行者はサーバー!!

今はわからなくてもイイ、ただ、デタパ作りでアマスタがどこかに飛んでって行方不明になった!!って時は思い出して下さい。あぁ、座標 0, 0, 0 に飛んでったんだな……と。

コマンドの実行位置とは

こちらも文字通り、コマンドを実行する位置です。実行位置が指定できてないと、コマンドブロックを起点に実行します。あれ、書くこと無いや……。見つけ次第加筆します。

どうしたらいいの?

以上の実行者と実行位置から考えると、ようするにコマンドブロックから右のアマスタまでが遠いよねってことです。

[]の中の distance の値を24くらいにしてみましょう。ハート出たでしょ?

第1回ししゃものマイクラコマンド講習会、簡単なパーティクルと効果音の仕掛けを作ってみる5

右のアマスタもハートを振りまくようになったの図。こんな感じで、実行者と位置は常に気を付けましょう。

作り方は開発者の数だけあるよって話

大体、今回の大枠は解説できたかな。ここ以降は、時間がありそうなら触れる概念部分の解説になります。

もしかしたら気付いたかもしれませんが、今回の仕掛けって実行位置が指定できてれば、実行者がだれでも良くね?せやねん、実はこんな感じでも全然おっけー↓

execute at @e[type=minecraft:armor_stand,distance=..16] run particle minecraft:heart ^ ^1.6 ^1 0 0 0 1 1 force

更に言うと、距離お構いなしで↓

execute at @e[type=minecraft:armor_stand] run particle minecraft:heart ^ ^1.6 ^1 0 0 0 1 1 force

でも全然オッケー。最適解はあるかもしれないけど、やり方は1つではないし、やりたいことによって変えた方がいい場合も多々あります。唯一気を付けるべきは、より軽くできる書き方にすることと、楽に実行できる方法があるならそちらを採用すること。オッケー2つだな!!

今回の書き方は、自分がデタパ作る時によく使う記法なのと、将来の拡張性がある(と思ってる)から。この辺は戦犯級の重い書き方じゃなければ好みで決めていいと思います。

[] 内に書かれた type とか distance は、セレクタって呼ばれるんですけど、distance の軽量化効果がとても高いので、固定マップじゃないゾンブレラとかだと、脳死で入れるくらいでいいです。固定マップでエンティティ数が限られるとか、常時実行じゃないとかなら、抜けても大丈夫と思います。

というわけで、内容の濃さもボリュームも手探りな、第1回コマンド講習会でした。わからないこと、間違い、やって欲しい内容などありましたら、コメント、お問い合わせフォーム、など何でも使ってください。

それではこの辺で、お帰りの際はお気をつけて~(・∀・)ノシ

コメント