【マイクラ】dialogueコマンドの使い方・構文・会話UI表示を解説【統合版】

この記事はマイクラ統合版(Bedrock Edition)向けです
Java版では使えないコマンドなので注意してください
NPCの会話UIを、コマンドやビヘイビアーパックから表示したい方向けに整理しています

こんにちは。ゆずかきです。

マイクラ統合版で配布ワールドやRPG風ワールドを作っていると、
「NPCの会話画面をプレイヤーに開かせたい」
「ボタン付きのメニューを出したい」
「会話の内容を進行状況に合わせて変えたい」
…と思うことはありませんか?

そういう時に使えるのが、統合版限定の/dialogueコマンドです。

普通の/say/tellrawとは違って、/dialogueNPCの会話UIそのものを開くコマンドです。
そのため、ただ文章を表示するだけではなく、ボタンを押したらワープする、クエスト説明を切り替える、別の会話ページへ進む…といった使い方ができます。

ただし、使い方は少しクセがあります。
特に、NPCを指定する必要があることscene_tagという名前で会話データを呼び出すことopenchangeの違いを理解していないと、コマンドを打っても何も起きずに詰まりやすいです。

この記事では、/dialogueコマンドの基本構文から、会話UIの表示、ボタン付き会話、動かない時の確認ポイントまで、順番に解説していきますね!

この記事を読めば、次のことが出来るようになります。

  • 統合版でNPCの会話UIをコマンドから開けます👍
  • openchangeの違いが分かります👌
  • ビヘイビアーパックのdialogueフォルダを使って、ボタン付き会話を作れます(^^♪

それでは、やっていきましょう!

※本記事はマイクラ統合版の/dialogueコマンド解説です。
※ゲーム内の仕様については、Minecraft公式ドキュメント・英語版コミュニティWikiを参考にしています。
※記事執筆時点の公式リファレンスでは、/dialogueopenchangeの2系統として掲載されています。


目次

1. dialogueコマンドとは
2. dialogueコマンドを使う前の準備
3. dialogueコマンドの基本構文
4. まずはNPCの会話UIを開いてみる
5. sceneファイルを作って会話内容を指定する
6. ボタン付きの会話UIを作る
7. dialogue openの使い方と実例
8. dialogue changeの使い方と実例
9. よく使うターゲット指定と注意点
10. 実用例:クエスト受付NPCを作る
11. 動かない場合のチェックポイント
12. バージョン差分と混同しやすいポイント
13. まとめ
14. 参考文献

この記事で分かること
・マイクラ統合版の/dialogueコマンドの使い方
・NPC会話UIをコマンドで表示する方法
scene.jsonを使ったボタン付き会話の作り方
openchangeの違い


1. dialogueコマンドとは

/dialogueコマンドとは、プレイヤーにNPCの会話画面を表示したり、NPCの会話内容を別のシーンへ変更したりするコマンドです。

統合版のNPCには、話しかけた時に出る専用の会話画面がありますよね。
あの画面を、コマンド側から開いたり、ビヘイビアーパックに書いた会話データへ差し替えたりできるのが/dialogueです。

代表的な使い方は、こんな感じです。

  • NPCをクリックしなくても、会話UIを強制表示する
  • ボタン付きのメニューを表示する
  • ボタンを押したらワープ・アイテム配布・スコア変更を実行する
  • クエスト進行に合わせてNPCのセリフを変える
  • 配布ワールドの案内・チュートリアル・ショップUIとして使う

普通の文章表示なら/title/tellrawでもできます。
ですが、選択肢を押して次の処理へ進めたいなら、/dialogueの方が向いています。

ポイント
/dialogueは「チャット欄に文字を出すコマンド」ではなく、NPCの会話UIを操作するコマンドです。
そのため、基本的にはNPCと組み合わせて使います。

ここを最初に理解しておくと、後の構文がかなり分かりやすくなります。


2. dialogueコマンドを使う前の準備

/dialogueを使うには、まずワールド側でいくつか準備が必要です。
ここを飛ばすと、コマンド自体は合っているのに「何も表示されない…」となりやすいので、先に確認しておきましょう。

必要な前提

  • マイクラ統合版、またはMinecraft Educationであること
  • チートが有効になっていること
  • コマンドを実行できる権限があること
  • 会話を表示するためのNPCが存在していること
  • sceneNameを指定する場合は、ビヘイビアーパック側に会話データがあること

/dialogue統合版・Education限定です。
Java版のコマンド欄にそのまま入力しても使えません。

また、NPCを編集する時はクリエイティブで作業する方が楽です。
ただし、NPCとの通常会話を確認する時は、サバイバルやアドベンチャーに切り替えた方が実際のプレイ感に近いです。

NPCを用意する

NPCはクリエイティブインベントリからスポーンエッグを出して設置できます。
コマンドで出す場合は、例えば下記のようにします。

/summon npc "案内人" ~ ~ ~

設置したNPCは、後でコマンドから指定しやすいようにタグを付けておくと便利です。

/tag @e[type=npc,c=1] add guide

この例では、近くのNPCにguideというタグを付けています。
以後は、下記のようにしてそのNPCを狙えます。

@e[type=npc,tag=guide,c=1]

体験談
筆者は最初、@e[type=npc]だけで指定してしまい、別のNPCが反応して混乱しました。
NPCを複数置く予定があるなら、必ずタグ管理しておきましょう。


3. dialogueコマンドの基本構文

/dialogueには、主に2つの使い方があります。

種類 役割 主な使いどころ
open NPCの会話UIをプレイヤーに開く 会話画面・メニュー画面をその場で表示
change NPCの会話内容を指定シーンへ変更する クエスト進行・状態別セリフの切り替え


それぞれの構文は下記です。

dialogue open

/dialogue open <npc: target> <player: target> [sceneName]

指定したNPCの会話UIを、指定したプレイヤーに開きます。
sceneNameを指定すると、ビヘイビアーパック内の該当シーンを表示できます。

dialogue change

/dialogue change <npc: target> <sceneName> [players: target]

指定したNPCの会話内容を、指定したシーンへ変更します。
playersを指定すると、指定したプレイヤー向けに会話内容を変えられます。
省略した場合は、基本的に全プレイヤー向けの変更として扱われます。

引数の意味

  • <npc: target>:会話元になるNPC
  • <player: target>:会話UIを見せるプレイヤー
  • <sceneName>:表示したい会話シーン名
  • [players: target]:会話変更の対象プレイヤー

sceneNameは、ビヘイビアーパックのdialogueフォルダ内にあるscene_tagと対応します。
ここをファイル名と勘違いしやすいので注意してくださいね。

重要
sceneNameに指定するのは、基本的にJSONファイル名ではなく、JSON内に書いたscene_tagの値です。


4. まずはNPCの会話UIを開いてみる

まずは一番シンプルに、NPCの会話UIをコマンドから開いてみましょう。

事前にNPCへguideタグを付けてある前提で、下記を実行します。

/dialogue open @e[type=npc,tag=guide,c=1] @p

これで、近くのプレイヤーにNPCの会話UIが表示されます。
sceneNameを省略しているので、そのNPCが直前に表示していた会話内容が表示されます。

コマンドブロックで使うなら、こんな感じです。

/dialogue open @e[type=npc,tag=guide,c=1] @p

プレイヤーが感圧板を踏んだら案内NPCの会話が開く、という使い方もできます。

体験談
ここで何も出ない場合、だいたいはNPC指定が間違っているか、NPCが読み込まれていないことが多いです。
最初はNPCのすぐ近くで実行して、確実に動く状態を作ってから遠隔化すると安心です。

NPCを見えない場所に置く場合

/dialogueはNPCの会話UIを使うので、会話元になるNPCが必要です。
ただし、プレイヤーの目の前にNPCが見えている必要はありません。

例えば、地下や管理用の部屋にNPCを置いておき、そこから会話UIだけ表示する使い方もできます。

ただし、NPCが読み込まれていないと失敗します。
ワールド全体で安定して使いたい場合は、NPCを常時読み込まれる場所に置くか、ティッキングエリアの利用も検討してください。

例:管理用NPCを固定座標に置く場合

/tickingarea add 0 1 0 0 2 0 dialogue_npc
/summon npc "案内人" 0 1 0
/tag @e[type=npc,c=1] add guide

※ティッキングエリアはワールド運用に影響するため、配布ワールドや長期ワールドでは使いすぎに注意しましょう。


5. sceneファイルを作って会話内容を指定する

/dialogueを本格的に使うなら、ビヘイビアーパック側に会話シーンファイルを作ります。

フォルダ構成は、基本的に下記の形です。

behavior_pack/
├─ manifest.json
└─ dialogue/
   └─ scene.json

dialogueフォルダは、ビヘイビアーパック直下に作ります。
この中にJSONファイルを置き、NPCの会話内容を定義します。

scene.jsonの基本形

{
  "format_version": "1.20.80",
  "minecraft:npc_dialogue": {
    "scenes": [
      {
        "scene_tag": "yuzukaki:start",
        "npc_name": "案内人",
        "text": "こんにちは!ここはチュートリアルエリアです。"
      }
    ]
  }
}

この中で特に大事なのは、scene_tagです。
上記の例なら、コマンド側では下記のように呼び出します。

/dialogue open @e[type=npc,tag=guide,c=1] @p yuzukaki:start

これで、scene_tagyuzukaki:startの会話が表示されます。

scene内でよく使う項目

  • scene_tag:コマンドから呼び出すシーン名
  • npc_name:会話画面に表示されるNPC名
  • text:会話本文
  • on_open_commands:会話が開いた時に実行するコマンド
  • on_close_commands:会話が閉じた時に実行するコマンド
  • buttons:会話画面に表示するボタン

最初はscene_tagnpc_nametextだけで大丈夫です。
動作確認ができてから、ボタンやコマンドを足していきましょう。

注意!
古い解説ではformat_version1.17の例も見かけます。
ただ、現在の公式ドキュメントでは、会話定義ファイルのformat_version1.20.80以降が案内されています。
新しく作るなら、まずは1.20.80以降で作るのがおすすめです。


6. ボタン付きの会話UIを作る

/dialogueの強いところは、会話画面にボタンを置けることです。
ボタンを押すと、指定したコマンドが実行されます。

例えば、案内NPCに「拠点へ移動」「説明を聞く」というボタンを付けるなら、下記のように書きます。

{
  "format_version": "1.20.80",
  "minecraft:npc_dialogue": {
    "scenes": [
      {
        "scene_tag": "yuzukaki:start",
        "npc_name": "案内人",
        "text": "こんにちは!どこへ行きますか?",
        "buttons": [
          {
            "name": "拠点へ移動する",
            "commands": [
              "/tp @initiator 0 80 0"
            ]
          },
          {
            "name": "説明を聞く",
            "commands": [
              "/dialogue open @e[type=npc,tag=guide,c=1] @initiator yuzukaki:help"
            ]
          }
        ]
      },
      {
        "scene_tag": "yuzukaki:help",
        "npc_name": "案内人",
        "text": "このワールドでは、各エリアのNPCからクエストを受けられます。まずは村の広場へ向かってみましょう。",
        "buttons": [
          {
            "name": "戻る",
            "commands": [
              "/dialogue open @e[type=npc,tag=guide,c=1] @initiator yuzukaki:start"
            ]
          }
        ]
      }
    ]
  }
}

この例では、yuzukaki:startからyuzukaki:helpへ会話を移動させています。
「説明を聞く」を押すと次の会話へ進み、「戻る」を押すと最初のメニューへ戻る形ですね。

@initiatorを使う理由

NPCのボタンから実行するコマンドでは、@initiatorがとても便利です。
これは、そのNPCの会話を操作したプレイヤーを指す指定です。

例えば、ボタンでワープさせる時に@pを使うと、マルチプレイでは意図しない近くのプレイヤーが対象になることがあります。

/tp @p 0 80 0

これだと、近くに別のプレイヤーがいた場合に事故ります。
そのため、NPCボタン内では下記のように@initiatorを使う方が安全です。

/tp @initiator 0 80 0

@initiatorはNPCの会話内で使う特殊なターゲット指定なので、通常のコマンドブロックなどでは使えない点にも注意してください。

ここ大事です
配布ワールドやマルチプレイ前提なら、NPCボタン内の対象指定は基本的に@initiator優先で考えると事故が減ります。


7. dialogue openの使い方と実例

dialogue openは、指定した会話UIをその場で開くためのものです。
いちばん使う頻度が高いのは、おそらくこちらです。

基本構文は下記です。

/dialogue open <npc: target> <player: target> [sceneName]

実例1:近くのプレイヤーに案内会話を開く

/dialogue open @e[type=npc,tag=guide,c=1] @p yuzukaki:start

近くのプレイヤーに、yuzukaki:startの会話を表示します。
コマンドブロックや感圧板と組み合わせると、エリアに入った時のチュートリアル表示として使いやすいです。

実例2:全プレイヤーに一斉表示する

/dialogue open @e[type=npc,tag=guide,c=1] @a yuzukaki:notice

全プレイヤーへ同じ会話UIを表示します。
イベント開始のお知らせや、ワールド内ルール説明などに使えます。

ただし、全員に強制表示するとプレイ中の操作を妨げることがあります。
実用するなら、使う場面は絞った方が良いです。

実例3:NPCボタンから次の会話へ進む

/dialogue open @e[type=npc,tag=guide,c=1] @initiator yuzukaki:next

ボタン内で使うなら、この形がかなり扱いやすいです。
@initiatorに対して次の会話を開くので、押した本人だけが次のページへ進みます。

体験談
筆者は最初、ボタンから別シーンへ進める時にdialogue changeを使っていました。
でも、その場で次のページを見せたいならchangeよりopenの方が分かりやすいです。


8. dialogue changeの使い方と実例

dialogue changeは、NPCの会話内容を指定シーンへ変更するためのものです。
openと違って、「今すぐ会話画面を開く」というより、NPCが次に話す内容を差し替えるイメージです。

基本構文は下記です。

/dialogue change <npc: target> <sceneName> [players: target]

実例1:NPCの会話をクエスト完了後の内容へ変える

/dialogue change @e[type=npc,tag=guide,c=1] yuzukaki:quest_clear @p

近くのプレイヤー向けに、案内NPCの会話をyuzukaki:quest_clearへ変更します。
クエスト完了後に「ありがとう!報酬を受け取ってください」のような会話へ変えたい時に便利です。

実例2:全プレイヤー向けに会話を変更する

/dialogue change @e[type=npc,tag=guide,c=1] yuzukaki:event_started

プレイヤー指定を省略すると、基本的に全プレイヤー向けの変更になります。
サーバーイベントの進行段階でNPCの案内を変える時などに使えます。

openとchangeの使い分け

  • 今すぐ会話UIを開きたいdialogue open
  • NPCの次回会話内容を変えたいdialogue change

この理解でほぼ大丈夫です。

個人的には、最初はopen中心で作るのがおすすめです。
会話分岐をボタンで進めるだけなら、openで別のscene_tagを呼び出す方が動きが見えやすいからです。

changeは、スコアボードやクエスト進行と組み合わせて、NPCの状態を長めに保持したい時に使うと便利です。


9. よく使うターゲット指定と注意点

/dialogueで詰まりやすいのは、コマンド本体よりもターゲット指定です。
特にNPCをうまく指定できていないと、会話UIは開きません。

よく使う指定例

@e[type=npc,tag=guide,c=1]

タグguideが付いたNPCを1体だけ指定します。
複数NPCがいるワールドでは、この形が扱いやすいです。

@p

コマンド実行地点に一番近いプレイヤーを指定します。
コマンドブロックで、近くのプレイヤーに会話を出したい時に使います。

@a

全プレイヤーを指定します。
一斉通知向けですが、使いすぎると邪魔になりやすいので注意です。

@initiator

NPCの会話を操作したプレイヤーを指定します。
NPCボタン内のコマンドではかなり重要です。

NPCにはタグを付ける

NPCを1体しか置かないワールドなら、@e[type=npc,c=1]でも動きます。
ですが、後からNPCが増えた時にほぼ確実に混乱します。

そのため、最初からタグを付けておくのがおすすめです。

/tag @e[type=npc,c=1] add guide

クエストNPCならquest_npc、ショップNPCならshop_npcのように、役割別にタグを分けると管理しやすいです。

scene_tag名は分かりやすくする

scene_tagは、後から見ても意味が分かる名前にしましょう。

良い例:

yuzukaki:start
yuzukaki:help
yuzukaki:quest_start
yuzukaki:quest_clear

分かりにくい例:

scene1
scene2
aaa
bbb

最初は動けば何でも良いと思いがちですが、会話が増えると一気に分からなくなります。
後から修正する自分のためにも、名前は丁寧に付けておきましょう。


10. 実用例:クエスト受付NPCを作る

ここでは、実際に使いやすい例として、クエスト受付NPCを作ってみます。

やりたいことは下記です。

  • NPCに話しかける
  • クエスト説明を表示する
  • 「受ける」ボタンでスコアを付ける
  • 「やめる」ボタンで会話を閉じる
  • クエスト完了後は別のセリフを出す

まずはスコアボードを用意します。

/scoreboard objectives add quest dummy

次に、会話JSONを作ります。

{
  "format_version": "1.20.80",
  "minecraft:npc_dialogue": {
    "scenes": [
      {
        "scene_tag": "yuzukaki:quest_intro",
        "npc_name": "村の案内人",
        "text": "ちょうど良いところに来ました!村の外にある小屋まで行って、目印のボタンを押してきてもらえますか?",
        "buttons": [
          {
            "name": "クエストを受ける",
            "commands": [
              "/scoreboard players set @initiator quest 1",
              "/dialogue open @e[type=npc,tag=quest_guide,c=1] @initiator yuzukaki:quest_accept"
            ]
          },
          {
            "name": "今はやめておく",
            "commands": [
              "/dialogue open @e[type=npc,tag=quest_guide,c=1] @initiator yuzukaki:quest_later"
            ]
          }
        ]
      },
      {
        "scene_tag": "yuzukaki:quest_accept",
        "npc_name": "村の案内人",
        "text": "ありがとうございます!小屋は村の東側にあります。迷ったら道沿いに進んでくださいね。"
      },
      {
        "scene_tag": "yuzukaki:quest_later",
        "npc_name": "村の案内人",
        "text": "分かりました。また準備ができたら声をかけてください。"
      },
      {
        "scene_tag": "yuzukaki:quest_clear",
        "npc_name": "村の案内人",
        "text": "おかえりなさい!無事に確認してくれたんですね。助かりました!"
      }
    ]
  }
}

NPCにはタグを付けておきます。

/tag @e[type=npc,c=1] add quest_guide

最初の会話を開くコマンドはこちらです。

/dialogue open @e[type=npc,tag=quest_guide,c=1] @p yuzukaki:quest_intro

クエスト完了地点にボタンやコマンドブロックを置くなら、例として下記のようにします。

/scoreboard players set @p quest 2
/dialogue change @e[type=npc,tag=quest_guide,c=1] yuzukaki:quest_clear @p

これで、次にNPCへ話しかけた時の会話を、クエスト完了後の内容へ変更できます。

体験談
クエスト系を作る時は、最初から複雑な分岐にしない方が良いです。
まずは「受ける」「完了する」「完了後のセリフが変わる」だけ作り、動作確認してから分岐を足すと失敗しにくいです。


11. 動かない場合のチェックポイント

/dialogueが動かない時は、下記を順番に確認してください。

  • [ ] 統合版またはMinecraft Educationで実行しているか?
  • [ ] チートは有効になっているか?
  • [ ] コマンド実行権限はあるか?
  • [ ] NPCはワールド内に存在しているか?
  • [ ] NPCが読み込まれている場所にいるか?
  • [ ] @e[type=npc,tag=...,c=1]のタグ名は合っているか?
  • [ ] sceneNameにJSONファイル名を入れていないか?
  • [ ] scene_tagのスペルは完全一致しているか?
  • [ ] ビヘイビアーパックはワールドに適用されているか?
  • [ ] dialogueフォルダはビヘイビアーパック直下にあるか?
  • [ ] JSONのカンマ抜け・波括弧の閉じ忘れはないか?
  • [ ] ボタン内で@pを使って、別プレイヤーが対象になっていないか?

よくある失敗1:scene_tagとファイル名を間違える

例えば、ファイル名がscene.jsonでも、呼び出す名前はscene.jsonではありません。
呼び出すのは中身のscene_tagです。

"scene_tag": "yuzukaki:start"

この場合、コマンド側はこうです。

/dialogue open @e[type=npc,tag=guide,c=1] @p yuzukaki:start

よくある失敗2:NPCが読み込まれていない

NPCを地下や遠くに隠した場合、読み込まれていないと/dialogueが失敗することがあります。
まずはNPCの近くで実行し、動作確認してから遠隔化しましょう。

よくある失敗3:NPCではないエンティティを指定している

/dialoguenpc引数には、NPCを指定する必要があります。
村人や防具立てを指定しても、NPC会話UIの元としては使えません。

/dialogue open @e[type=villager,c=1] @p yuzukaki:start

👆これは村人指定なので、/dialogue用としては不適切です。

正しくは、下記のようにNPCを指定します。

/dialogue open @e[type=npc,tag=guide,c=1] @p yuzukaki:start

よくある失敗4:JSONの書式ミス

JSONは、カンマ1つ抜けただけでも読み込まれません。
特に、buttonsを増やした時にミスが出やすいです。

失敗しやすい箇所はここです。

  • [] の閉じ忘れ
  • {} の閉じ忘れ
  • 文字列のダブルクォーテーション忘れ
  • 配列内のカンマ忘れ
  • 最後の項目に余計なカンマを入れる

最初は短いJSONでテストし、動いたら少しずつ増やすのが安全です。


12. バージョン差分と混同しやすいポイント

/dialogueは、マイクラ統合版のNPC用コマンドです。
ここで混同しやすいのが、Java版のUI・データパック関連の「dialog」系情報です。

Java版のdialog系とは別物

Java版では、1.21.6以降でデータパック向けのダイアログ機能が追加されています。
ですが、この記事で扱っている/dialogueコマンドは統合版・Education向けのNPC会話コマンドです。

検索するとJava版の情報も混ざりやすいので、調べる時は「統合版」「Bedrock」「NPC dialogue」あたりの語句を入れると見つけやすいです。

古い解説と現在の違い

古い/dialogue解説では、下記のような表記を見かけることがあります。

"format_version": "1.17"

公式の古いチュートリアル例にも、このような書き方が残っています。
ただ、現在の会話定義ドキュメントでは、format_version1.20.80以降が案内されています。
新しく作る場合は、現在のドキュメントに合わせて作る方が無難です。

また、構文の表記も古いページではsceneName:string、現在のリファレンスではsceneName:idのように表記が変わっている場合があります。
実際に意識するポイントは、ビヘイビアーパック内のscene_tagを正しく指定することです。

Java版1.21.6以降について

Java版1.21.6以降のダイアログ機能と混ざると分かりにくいですが、この記事の対象は統合版の/dialogueです。
確認した公式コマンドリファレンス上では、統合版の/dialogueは引き続き下記の2系統で整理されています。

  • /dialogue open <npc: target> <player: target> [sceneName]
  • /dialogue change <npc: target> <sceneName> [players: target]

そのため、統合版でNPC会話UIを出したい場合は、まずこの2つを押さえておけば大丈夫です。


13. まとめ

以上、マイクラ統合版の/dialogueコマンドについて解説しました。

/dialogueは少しとっつきにくいですが、理解するポイントはそこまで多くありません。

要点を整理すると、

  • /dialogueは統合版・Education限定のNPC会話UIコマンド
  • 今すぐ会話を開くならdialogue open
  • NPCの会話内容を差し替えるならdialogue change
  • sceneNameにはJSONファイル名ではなく、scene_tagを指定する
  • NPCボタン内では、対象プレイヤーに@initiatorを使うと安全
  • 本格的に使うなら、ビヘイビアーパック直下のdialogueフォルダにJSONを置く

このあたりを押さえれば、NPCの会話UIを使ったチュートリアル・ショップ・クエスト受付・ワープメニューなどが作れます。

個人的には、最初から大規模な会話システムを作るより、

  1. NPCを1体置く
  2. scene_tagを1つ作る
  3. /dialogue openで表示する
  4. ボタンを1つ追加する
  5. 別の会話ページへ進める

この順番で作るのがおすすめです。
いきなり複雑にすると、どこでミスしたか分かりにくくなります。

/dialogueを使えるようになると、統合版のワールド制作で出来ることがかなり増えます。
普通のコマンド表示よりも「ワールド内の案内役」として見せやすいので、配布ワールドやRPG風ワールドを作っている方はぜひ試してみてくださいね(^^♪

では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。


14. 参考文献

この記事を書くにあたり、以下の公式ドキュメント・英語版コミュニティWikiのページを参考にしています: