FyroxのRustゲームエンジン向け分岐会話&ダイアログシステム。5種類のノード、UI非依存のランナー、ブラックボード統合でRPGスタイルのダイアログツリーを構築。
会話グラフを設計し、純粋ロジックで実行し、独自のUIコードでイベントを処理します。
テキスト、選択肢、条件、アクション、終了ノードでダイアログツリーを構築。分岐する会話に接続します。
グラフをDialogRunnerに渡します。ノードを走査し、ブラックボード条件を評価し、イベントを発行 — UIとの結合はゼロ。
型付きイベントを受信:表示するテキスト、提示する選択肢、発火するアクション、ダイアログ終了。あなたのコード、あなたのルール。
任意のUIアプローチを使用 — Fyrox UI、egui、カスタムHUD、コンソール出力も可能。システムがビジュアルを制限しません。
コアダイアログ機能は無料でMITライセンス。Proはビジュアル編集、エディタ統合、開発者ツールを追加します。
Free版ではコードで会話を定義。Proではビジュアルエディタを使用できます。
use fyrox_dialog::{DialogGraph, TextNode, ChoiceNode, ConditionNode, ActionNode, EndNode};
use fyrox_ai::blackboard::Blackboard;
// シンプルな分岐ダイアログを構築
let mut graph = DialogGraph::new();
// ノードを追加
let greeting = graph.add_node(TextNode {
speaker: "Merchant".into(),
text: "Welcome, traveler! Looking to trade?".into(),
});
let choice = graph.add_node(ChoiceNode {
choices: vec![
"Show me your wares".into(),
"Not today".into(),
"Any special deals?".into(),
],
});
// 条件:プレイヤーのゴールドが十分か確認
let gold_check = graph.add_node(ConditionNode::from_blackboard(
"gold", Condition::gte(100),
));
let deal_yes = graph.add_node(TextNode {
speaker: "Merchant".into(),
text: "I have a rare sword, just for you!".into(),
});
let deal_no = graph.add_node(TextNode {
speaker: "Merchant".into(),
text: "Come back when you have more coin.".into(),
});
let goodbye = graph.add_node(ActionNode { action: "close_shop".into() });
let end = graph.add_node(EndNode);
// グラフを接続
graph.connect(greeting, choice);
graph.connect_choice(choice, 0, deal_yes); // "Show me your wares"
graph.connect_choice(choice, 1, goodbye); // "Not today"
graph.connect_choice(choice, 2, gold_check); // "Any special deals?"
graph.connect_condition(gold_check, true, deal_yes);
graph.connect_condition(gold_check, false, deal_no);
graph.connect(deal_yes, end);
graph.connect(deal_no, end);
graph.connect(goodbye, end);
// ダイアログを実行
let mut runner = DialogRunner::new(&graph, &blackboard);
while let Some(event) = runner.next_event() {
match event {
DialogEvent::Text { speaker, text } => show_text(speaker, text),
DialogEvent::Choice { choices } => {
let pick = show_choices(&choices);
runner.select_choice(pick);
}
DialogEvent::Action { action } => handle_action(action),
DialogEvent::End => break,
}
}
各ティアに含まれる機能を一目で確認できます。
| 機能 | Free | Pro |
|---|---|---|
| ダイアロググラフ(テキスト、選択肢、条件、アクション、終了) | ✓ | ✓ |
| DialogRunner(純粋ロジック、UI非依存) | ✓ | ✓ |
| ブラックボード統合(fyrox-ai Blackboard&Condition) | ✓ | ✓ |
| 完全なserdeシリアライゼーション | ✓ | ✓ |
| ビジュアルノードグラフエディタ(2パネル:グラフ+プロパティ) | — | ✓ |
| DialogPlayerスクリプト(NPCにドロップ) | — | ✓ |
| .dialogリソース形式+ホットリロード | — | ✓ |
| DialogDebugLogger(11種類以上のイベント) | — | ✓ |
| AutoAdvancer(時間ベースの進行) | — | ✓ |
| JSON File I/O | — | ✓ |
Fyrox Dialogは、FyroxのRustゲームエンジン向け分岐会話&ダイアログシステムです。5種類のノード(テキスト、選択肢、条件、アクション、終了)でダイアログツリーを構築し、純粋ロジックのDialogRunnerで実行できます。Free版はMITライセンスで、Pro版にはビジュアルノードグラフエディタ、エディタ統合スクリプト、デバッグログなどが追加されます。
はい。コアのDialogRunnerはUI依存のない純粋ロジックです。型付きイベント(テキスト表示、選択肢提示、アクション発火、ダイアログ終了)を発行し、独自のレンダリングコードで処理します。Fyrox UI、egui、カスタムHUD、コンソールなど、任意の方法で使用でき、ダイアログシステムが会話の見た目を制限することはありません。
はい。Fyrox Dialogはfyrox-aiのブラックボードとCondition型を直接再利用しています。AIステートマシン、ビヘイビアツリー、ダイアログツリーが同じブラックボードを共有でき、NPC行動と会話の緊密な統合が可能です。Free版はfyrox-ai-freeに依存しています。
Fyrox Dialog Proでは、会話は.dialogリソース形式で保存されます。.dialogファイルへの変更を保存すると、Fyroxエディタが再起動なしで自動的に変更を反映します。これにより迅速なイテレーションが可能になり、会話ツリーを編集して実行中のゲームですぐに結果を確認できます。
MITライセンスの無料コアで始めましょう。ビジュアル編集、ホットリロード、デバッグツールが必要ならProにアップグレード。