Minecraft【テクニック】移動検知で、コントローラーを作ろう。2-3

Java版1.21.4-、統合版v1.21.51-で動作確認。
エンティティを動かす、コントローラーのまとめ。
移動検知で、コントローラーを作ろう。
プレイヤーが移動する事で、エンティティを動かす装置を作ります。動力部品を使ったエンティティの移動、範囲の検知やプレイヤーが基準のコントローラーを紹介します。自機プレイヤーとしての使用はもちろん、選択メニュー、動的な仕掛け(回転や移動で開く扉)、ロックオン機能など、移動できるスイッチとして使う事も出来ます。
共通コマンド
解説で同じコマンドの繰り返しになるものを、まとめて記載しました。操作の対象になる防具立て「スティーブ」は全装置共通となります。
防具立ての召喚。
「スティーブ」と名前を付けて、防具立てを召喚。※Java版と統合版ではコマンドが異なります。
【Java版】
summon armor_stand ~ ~ ~ {CustomName:'"スティーブ"',CustomNameVisible:1b} |
名前を常に表示するように変更。
【統合版】
summon armor_stand スティーブ ~~~ |
名前が表示されない場合、ビデオ設定→ゲーム内プレイヤーの名前の表示を「オン」。
◎サブコマンド(Java版/統合版)
execute at @p align xz run summon armor_stand ~0.5 ~ ~0.5 |
サブコマンドの「align(アライン)」を使うと、整数の座標に防具立てを召喚出来ます。
防具立て「スティーブ」の移動。
防具立て「スティーブ」を左右に移動。「動力部品」、「範囲の検知」で使用する共通コマンドです。番号は、画像と合わせてあります。※「アグレッシブ」はコマンドの内容が変わるため、個別に記載。
◻︎コマンド 例
①execute at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~-1 ~ ~ ②execute at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~1 ~ ~ ------ ③execute at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~-0.1 ~ ~ ④execute at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~0.1 ~ ~ |
◎プレイヤーが北向きの場合
【距離】
①②は1ブロック、③④は0.1ブロック移動。
【方向】
①③は左、②④は右に移動。
動力部品
動力部品を使って、コマンドブロックに直接信号を送り、防具立て「スティーブ」を移動します。3種類の移動方法を紹介しますが、「範囲の検知」や「アグレッシブ」装置と組み合わせる事で、コントローラーの種類を増やす事が出来ます。
インパルス。
感圧版に乗ると信号を一回だけ送ります。連続で動かせたくない場合に使用。選択メニューや動的な仕掛けに作りに向いています。
①②は共通コマンド参照。
クロック回路。
インパルスにクロック回路を挟む事で、信号を連続で送る事が出来ます。「スティーブ」はコマ送りのように動作するので、レトロゲームやブロックアニメーション作りに向いています。スコアボードやスケジュールコマンドでクロック回路を作れば、移動速度も調整可能です。
①②は共通コマンド参照。※ホッパー式のクロック回路。
リピート。
1秒間に20回の信号を繰り返す、高速のクロック回路になります。移動距離を小さくする事で、「スティーブ」が滑らかに移動します。動きの早いシューティングやアクションゲーム、エイム(ロックオン機能)作りに向いています。
③④は共通コマンド参照。
範囲の検知
動力部品の代わりに、範囲の検知を使ったコントローラーを作ります。動力を直接送る必要がないので、コマンドブロックを離れた位置に設置可能。操作出来る範囲も簡単に広げる事が出来ます。
絶対座標。
指定した座標から引数を使いプレイヤーを検知します。引数の数字を大きくすることで、コントローラーの操作範囲を広げる事が出来ます。ギャラリーゲームズの「レトロゲーム!パックマンNo.20」で採用しています。
◻︎絶対座標とは
原点(0,0,0)を設定。そこからの距離を、縦・高さ・横(x,y,z)で数値化したもの。三次元空間内の特定の位置を示すために使用されます。
①②は共通コマンド参照。
◻︎絶対座標 例
⑤⑥execute if entity @p[x=0,y=0,z=0,dx=0,dy=0,dz=0] |
⑤⑥赤にはそれぞれ「左」「右」の座標を入力。青は引数。
※引数は正の数と負の数に対応。小数点も使えます。0は座標と同じ場所。
エンティティ基準。
エンティティを基準に、プレイヤーとの距離で検知します。座標を調べる必要も無く、コントローラーの移動や削除、範囲を広げるのも簡単です。配布ゲーム「ドッキリアクション!イタイワニーNo.30」や「無限パルクールNo.21」で採用しています。
①②は共通コマンド参照。「左」「右」の防具立ても召喚。
◻︎エンティティ基準 例
⑦execute at @e[name="左"] if entity @p[distance=..1] ⑧execute at @e[name="右"] if entity @p[distance=..1] |
※統合版は@p[r=1]。
⑦⑧プレイヤーが防具立てと重なった時、信号を出します。※数字はエンティティを中心とした円の半径。
ブロック検知。
プレイヤーの足元に指定したブロックがあるかを検知。座標を調べる必要も無く、ブロックを置くだけでコントローラーが作れます。移動や削除、範囲を広げるのも簡単です。コントローラーとして使った作品はありませんが、ギャラリーゲームズの「全力おしりアクション!サンクチュアリNo.33」や「テーブル対戦!エアホッケーNo.38」などで、ブロック検知を採用しています。
①②は共通コマンド参照。
◻︎ブロック検知 例
⑨execute at @a if block ~ ~-1 ~ gold_block ⑩execute at @a if block ~ ~-1 ~ emerald_block |
⑨⑩プレイヤーの足元にエメラルド、金ブロックがある時信号を出します。
アグレッシブ
プレイヤーが移動中でも「スティーブ」を操作できる、プレイヤーが基準のコントローラーです。Java版では統計やデータパックを使えば、より高度なコントローラーも作れますが、今回は統合版でも作成可能なコントローラーを紹介します。
防具立て「スティーブ」の追尾。
プレイヤーの動きに合わせて「スティーブ」も移動します。一方向だけ絶対座標を使う事で、前後には動かないようにします。簡単で使い勝手の良い、プレイヤー基準のコントローラー。ギャラリーゲームズの「ドライブロードNo.15」や「レトロゲーム!インベーダーNo.16」で採用しています。
②は動力が必要。
◻︎追尾 例
①execute if entity @e[name="木のシャベル"] ②execute at @p run tp @e[name="スティーブ"] ~ ~ 0 |
【追尾】①② 木のシャベルが落ちている時、「スティーブ」を上下左右に移動。北向きの場合、z軸に絶対座標を入力。
移動式コントローラー。
エンティティ基準のコントローラーを、プレイヤーに追尾します。プレイヤーとは違う動きで「スティーブ」を操作可能。エンティティを頭上に設置すれば、ジャンプ検知にも使えます。ギャラリーゲームズの「レトロゲームDX!イーアルカンフーNo.24」で採用しています。※制作難易度は高め。
【Java版】
①execute at @p run summon armor_stand ~ ~ ~ {CustomName:'"左"',CustomNameVisible:1b} ②execute at @p run summon armor_stand ~ ~ ~ {CustomName:'"右"',CustomNameVisible:1b} ------ ③execute at @p run tp @e[name="左"] ~-5 ~ ~ ~ ~ ④execute at @e[name="左"] at @p[distance=..4.9] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~-0.1 ~ ~ ------ ⑤execute at @p run tp @e[name="右"] ~5 ~ ~ ~ ~ ⑥execute at @e[name="右"] at @p[distance=..4.9] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~0.1 ~ ~ ------ ⑦kill @e[name="左"] ⑧kill @e[name="右"] |
【統合版】③⑤⑦⑧はJava版と同じ。
①summon armor_stand 左 ~~~ ②summon armor_stand 右 ~~~ ------ ④execute at @e[name="左"] at @p[r=4.9] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~-0.1 ~ ~ ------ ⑥execute at @e[name="右"] at @p[r=4.9] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~0.1 ~ ~ |
【召喚】①②
防具立て「左右」を召喚。
【コントローラー】③④⑤⑥
プレイヤーが防具立て「左右」に近づいた時、「スティーブ」を移動。
【停止】⑦⑧
防具立て「左右」を削除して、コントローラーを停止。
※コントローラーで使う防具立ては、同時に召喚してください。またプレイヤーに近いと、アイテムを装備したり、壊れてしまいます。Java版では、防具立て「左右」を「marker」に変更出来ます。
視点検知。
プレイヤーの視点を使ったコントローラーです。使いこなすには慣れが必要ですが、他にはない操作方法となります。視点のリセット装置を一緒に作っておくと、操作しやすくなります。ギャラリーゲームズの「安心!アシスト付き自動車No.18」のFPSモードや「木製ブロックを揃える!ウッドパズルNo.39」に採用しています。
【Java版】
①execute at @p as @p[y_rotation=90..165] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~-0.1 ~ ~ ②execute at @p as @p[y_rotation=-165..-90] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~0.1 ~ ~ ------ ③execute if entity @e[name="木のシャベル"] ④execute at @p run tp @p ~ ~ ~ 180 0 |
【統合版】③④はJava版と同じ。
①execute at @p as @p[rym=90,ry=165] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~-0.1 ~ ~ ②execute at @p as @p[rym=-165,ry=90] at @e[name="スティーブ"] run tp @e[name="スティーブ"] ~0.1 ~ ~ |
◎プレイヤーが北向きの場合
【視点の方向】①②
プレイヤーの見ている方向が、指定の角度になった時、「スティーブ」を移動。※角度が分からない場合は「角度の検知」を参照。
【視点のリセット】③④
木のシャベルが落ちている時、プレイヤーの見ている方向を北にします。