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

Java版1.21.4-、統合版v1.21.51-で動作確認。

エンティティを動かす、コントローラーのまとめ。

移動検知で、コントローラーを作ろう。

プレイヤーが移動する事で、エンティティを動かす装置を作ります。動力部品を使ったエンティティの移動、範囲の検知やプレイヤーが基準のコントローラーを紹介します。自機プレイヤーとしての使用はもちろん、選択メニュー、動的な仕掛け(回転や移動で開く扉)、ロックオン機能など、移動できるスイッチとして使う事も出来ます。

 

 

目次

1.共通コマンド
・防具立ての召喚。
・防具立て「スティーブ」の移動。

2.動力部品
・インパルス。
・クロック回路。
・リピート。

3.範囲の検知
・絶対座標。
・エンティティ基準。
・ブロック検知。

4.アグレッシブ
・防具立て「スティーブ」の追尾。
・移動式コントローラー。
・視点検知。

 

 

共通コマンド

解説で同じコマンドの繰り返しになるものを、まとめて記載しました。操作の対象になる防具立て「スティーブ」は全装置共通となります。

防具立ての召喚。

「スティーブ」と名前を付けて、防具立てを召喚。※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 ~ ~

◎プレイヤーが北向きの場合

【視点の方向】①②
プレイヤーの見ている方向が、指定の角度になった時、「スティーブ」を移動。※角度が分からない場合は「角度の検知」を参照。
【視点のリセット】③④
木のシャベルが落ちている時、プレイヤーの見ている方向を北にします。