Minecraft【テクニック】ゲーム装置の起動と停止。2-1
Java版1.21.4-、統合版v1.21.51-で動作確認。
必要なものだけ追加して、テンプレートを作成。
ゲーム装置の起動と停止。
ゲーム装置は、起動と停止装置から設計していくと作りやすいです。コマンドの数が増えるので、ファンクションファイルで作るのがおすすめ。コマンドブロックの場合も、メモ帳などにコマンドを保存しておくと管理しやすくなります。目次は簡単なチャートになっています。
◻︎起動と停止装置 例
ロビーでボタンを押したらステージに移動。範囲から出たらロビーに戻る。
もっとも簡単な装置になります。ここからゲームらしくするため、効果音や開始と終了のメッセージなど追加すると思います。今回の記事は、この「起動と停止装置」に何を追加したら良いのかをまとめてあります。
※ステージに移動した時、ゲーム開始。メイン装置がゾンビバトルやパズルゲームになっても、「起動と停止装置」はあまり変わらないので、テンプレートが作れます。
起動
ゲーム装置は、プレイヤーをうまく管理出来るかがポイントになります。プレイヤーのタグはゲーム装置の起動時に付けておくと便利です。※マルチプレイのタグ管理は、制作難易度が上がります。
装置の起動スイッチ。
ゲーム装置を起動するためのスイッチを作ります。動力部品、場所(座標)、ブロック検知の3種類の方法と、それぞれのデメリットをまとめました。好みやゲームのジャンルに合わせて変更してください。
◎動力部品
シングルプレイの場合は、レッドストーンの「動力部品」がお手軽です。ボタン、感圧版、トラップチェストを閉じた時など、動力が一回で切れるものがおすすめです。
◻︎ボタン 例
動力部品 | ボタン、感圧版、トラップチェスト。(アイテムを取り出したら開始) |
デメリット/ゲーム中に、他のプレイヤーがボタンを押せないよう工夫が必要。
◎場所(座標)とブロック検知
マルチプレイの場合は、「範囲」や「ブロック検知」がおすすめです。プレイヤーが特定の「範囲」に入った時、乗った時を検知してゲーム装置を起動します。
◻︎範囲とブロック検知 例
絶対座標 | 1箇所以上の座標から、引数を使って範囲を検知。 |
エンティティ基準 | 防具立てやNPCなど、エンティティを基準に範囲を検知。 |
ブロック検知 | 指定したブロックの上にプレイヤーがいる時を検知。 |
◻︎絶対座標 例
①execute at @a[x=0,y=-60,z=0,dx=10,dy=0,dz=10] run tag @p add red ②execute positioned 0 -60 0 run tag @p[distance=..5] add red |
※②統合版 @p[r=5]
①座標(0 -60 0)を基準に、x10、y10の範囲。
②座標(0 -60 0)を中心に、半径5ブロックの円の範囲。
開始位置が決まっている場合に使用します。デメリット/入場制限が必要。プラグイン等で作ったサブワールドでは、座標が重複(ちょうふく)して使えません。
◻︎エンティティ基準 例
③execute at @e[name="防具立て"] run tag @p[distance=..5] add red |
※統合版は「"」不要。@p[r=5]
③防具立てを中心に、半径5ブロックの円の範囲。
開始位置を変える事も可能。防具立てを消すことで、プレイヤーの入場も制限出来ます。デメリット/基準となるエンティティ(防具立てなど)が必要。
◻︎ブロック検知 例
④execute at @a if block ~ ~-1 ~ gold_block run tag @p add red |
④金ブロックの上にプレイヤーが乗った時を検知。
使いやすいが、デメリットも大きい。デメリット/入場制限が必要。指定したブロック(金ブロック)が他の場所で使えなくなるので注意。
ゲームルールの変更。
ゲーム中のコマンドログの表示は必要ないので、非表示にします。アドベンチャーモードはブロックの設置や破壊を制限出来ます。必要があれば、スポーンポイントも設定しておきます。
◻︎コマンド 例
①gamerule commandBlockOutput false ②gamemode adventure @a ③gamerule spawnRadius 0 |
①ログを非表示。
②ゲームモードを変更。
③スポーン位置がずれないようにします。
スコアボードの作成。
得点、レベル、タイマー、チーム分け、スイッチなど使い道は多いです。スコアの表示位置は、サイドバー、名前の下、リスト、アクションバーなどがあります。スコアは得点を残すため、ゲーム開始時にリセットします。※Java版では統計を使って、プレイヤーの行動を数える事も出来ます。スニーク、キル数など。
◻︎コマンド 例
①scoreboard objectives add count dummy ②scoreboard objectives add score dummy "スコアボード名" ③scoreboard objectives setdisplay sidebar score |
※②統合版は「"」不要。
①得点やレベルなど、計算用のスコアボードを作成。
②スコアを表示するスコアボードを作成。※スコアボード名は無くてもOK。
③「score」をサイドバーに表示。
プレイヤーの管理。(開始)
タグ付けは、起動スイッチと連動してください。時間や人数など、条件を付けてプレイヤーをステージに移動。ゲーム開始の合図は、効果音を鳴らしたりメッセージを表示します。※チーム分けは、タグやスコアボードでも十分ですが、teamコマンド(Java版)を使うと、さらに詳細な設定が可能です。
◎タグ付け、移動、開始音
◻︎コマンド 例
①tag @p add red ②tp @a[tag=red] ~ ~ ~ ③playsound entity.player.levelup player @a[tag=red] ~ ~ ~ 1 1 1 |
※③統合版 random.levelup
①プレイヤーにタグ「red」を追加。
②タグ「red」をステージへテレポート。
③タグ「red」に経験値アップの効果音を再生。
ゲーム開始
メイン装置の起動。
メインのゲーム装置は、プレイヤーがステージに移動したら起動するように設計します。当サイトで公開している「ギャラリーゲームズ」や「データパック」も、テンプレートからメイン装置を入れ替えて作成しています。
停止
動作中のメイン装置を停止します。ゲームを終了する時は決まっています。
装置の停止方法。
ゲームを終了する時は、大きく分けて3パターンあります。引き分け・クリアは、終了する場合と続ける場合に分岐します。
◻︎ゲームを終了する時
強制終了・範囲外 | 途中でゲームをやめる場合。 |
死んだ時 | プレイヤーが死亡した場合。 |
負け(引き分け・クリア) | ゲームオーバーの場合。(リトライ・次のステージ) |
◎強制終了・範囲外、死んだ時
プレイヤーが自分の意思でゲームをやめる場合と死んだ時の処理。アイテム検知、装備検知、動力部品、範囲設定などの方法があります。※Java版は統計を使って死亡を検知出来ます。
◻︎アイテム検知 例
ゲーム中プレイヤーが移動出来る場合は、アイテム検知がおすすめです。統合版はアイテムを持っているかどうかで、死亡した事も検知可能。※ゲームルール「アイテム保持」を確認。
①clear @p golden_shovel 0 ②execute if entity @e[nbt={Item:{id:"minecraft:golden_shovel"}}] ③kill @e[type=item] |
※②統合版 @e[name=金のシャベル]
①プレイヤーが金のシャベルを持っているかを検知。
②金のシャベルが落ちているかを検知。※統合版はアイテム名
③落ちているアイテムを削除。
◎負け(引き分け・クリア)
負け、制限時間が終了、ゲームクリアの場合はゲームオーバー。メイン装置を停止します。
スコアの集計。
ハイスコア、勝敗などゲームの結果を表示します。また、報酬を作るとゲームらしさがアップします。
◻︎コマンド 例
①scoreboard players operation ハイスコア score > 得点 score ②title @a title "赤の勝ち!" ③give @p golden_apple 1 |
※②統合版は 「"」不要。
①得点が多ければハイスコアに代入します。
②赤の勝ち!とメッセージを表示。
③報酬を作ります。その他、強化装備、エフェクトなど。
プレイヤーの管理。(終了)
終了音を鳴らしたり、プレイヤーをロビーに戻します。タグを付けている場合は、最後に削除します。
◎終了音、移動、タグ消し
◻︎コマンド 例
①playsound entity.firework_rocket.twinkle player @a[tag=red] ~ ~ ~ 1 1 1 ②tp @a[tag=red] ~ ~ ~ ③tag @p add red |
※統合版 random.levelup
①タグ「red」に花火の効果音を再生。
②タグ「red」をテレポート。
③プレイヤーにタグ「red」を削除。