Fyrox AI

Rustによるゲームアルゴリズム向けステートマシンとビヘイビアツリー。構成可能、シリアライズ可能、エンジン非依存。無料コア(MIT)とFyroxEd用Proビジュアルエディタ。

Rust 1.87+ MIT(無料) serde + nalgebra Fyrox非依存

アーキテクチャ概要

ステートマシン ステート+遷移
ブラックボード 共有変数
ビヘイビアツリー 9種類のノード

ブラックボードはステートマシンとビヘイビアツリー間の共有メモリとして機能します。 遷移とBTの条件はブラックボードから読み取り、アクションはブラックボードに書き戻します。 この疎結合アーキテクチャにより、高レベルの状態制御と詳細な行動ロジックを組み合わせることができます。

無料機能 MIT

コアライブラリはエンジン非依存、MITライセンスで、serdeとnalgebraのみに依存しています。あらゆるRustプロジェクトで使用できます。

🔄 ステートマシン

名前付き遷移でステートを定義します。各遷移はブラックボードに対して条件を評価し、切り替えタイミングを決定します。ガード条件とフォールバックステートをサポート。

🌳 ビヘイビアツリー(9ノード)

Sequence、Selector、Parallel、Inverter、Repeater、Succeeder、Failer、Delay、Action。シンプルな構成要素から複雑な意思決定を組み立てます。

📋 ブラックボード(5型)

Bool、Int、Float、String、Vec3を持つ共有キーバリューストア。ステートマシンとビヘイビアツリーの両方が同じブラックボードインスタンスを読み書きします。

🧮 条件ロジック

遷移ガードとBT条件のための構成可能なAnd、Or、Not演算子。単純な比較から任意に複雑な条件を構築できます。

💾 完全なSerdeサポート

すべての型がSerializeとDeserializeを実装。AI設定をJSON、RON、またはserde互換フォーマットに保存できます。ホットリロード対応。

🔌 エンジン非依存

コアクレートにFyrox依存なし。serde + nalgebraのみ。Fyrox、Bevy、macroquad、純粋なRustサーバーやシミュレーションで使用可能。

Pro機能 有料

FyroxEd用ビジュアルエディタ統合。AIを視覚的に設計し、ランタイムで検査し、完全な履歴でデバッグ。

🎨 ビジュアルステートグラフエディタ

3パネルレイアウト:左側にブラックボードパネル、中央にドラッグ&ドロップでステートと遷移を設計するグラフキャンバス、右側に条件を設定するステート詳細パネル。

🔍 ブラックボードインスペクタ

すべてのブラックボードキー、型、現在の値を表示するライブパネル。ランタイムで値を編集し、AI行動の迅速なテストとデバッグが可能。

📊 AiDebugLogger

タイムスタンプ付きですべてのステート遷移をログ記録。遷移履歴を確認して、AIが特定の判断を下した理由を把握。エンティティやステート名でフィルタリング可能。

PriorityStateMachine

ステートに優先度レベルを持つ拡張ステートマシン。高優先度のステートが低優先度のステートを割り込み可能。警戒/戦闘AIパターンに最適。

↩️ 完全な元に戻す/やり直し

すべてのエディタ操作はFyroxコマンドシステムを通じて実行されます。グラフ編集、接続変更、プロパティ変更のすべてを元に戻したりやり直したりできます。

🧩 エディタ統合

FyroxEd内でプラグインとしてネイティブに動作。外部ツール不要。AIグラフはFyroxプロジェクトの一部として保存され、通常通りバージョン管理可能。

クイックスタート

待機、巡回、追跡ステートを持つ基本的なステートマシン。ブラックボードが遷移を駆動します。

use fyrox_ai::{StateMachine, State, Transition, Blackboard, Condition};
use fyrox_ai::BlackboardValue::{Bool, Float};

// 共有ブラックボードを作成
let mut bb = Blackboard::new();
bb.set("player_visible", Bool(false));
bb.set("patrol_timer",   Float(0.0));

// ステートを定義
let idle   = State::new("Idle");
let patrol = State::new("Patrol");
let chase  = State::new("Chase");

// ステートマシンを構築
let mut sm = StateMachine::builder()
    .state(idle)
    .state(patrol)
    .state(chase)
    .transition(
        Transition::new("Idle", "Patrol")
            .condition(Condition::gte("patrol_timer", Float(3.0)))
    )
    .transition(
        Transition::new("Patrol", "Chase")
            .condition(Condition::eq("player_visible", Bool(true)))
    )
    .transition(
        Transition::new("Chase", "Idle")
            .condition(Condition::eq("player_visible", Bool(false)))
    )
    .initial("Idle")
    .build();

// 毎フレーム更新
sm.update(&bb);
println!("現在のステート: {}", sm.current().name());

Free vs Pro 比較

無料コアはランタイムに必要なすべてをカバーします。Proはビジュアルツールと高度な機能を追加します。

機能 Free(MIT) Pro
遷移付きステートマシン
ビヘイビアツリー(9ノード)
ブラックボード(5つの値型)
条件ロジック(And/Or/Not)
完全なserdeシリアライゼーション
エンジン非依存(serde + nalgebraのみ)
ビジュアルステートグラフエディタ
3パネルレイアウト(ブラックボード、キャンバス、詳細)
ブラックボードインスペクタパネル
AiDebugLogger(遷移履歴)
PriorityStateMachine
エディタ内の完全な元に戻す/やり直し

よくある質問

Fyrox AIとは何ですか?

Fyrox AIは、ステートマシンとビヘイビアツリーを使用してゲームAIを構築するためのRustライブラリです。遷移付きの構成可能なステートマシン、9種類のビヘイビアツリーノード(Sequence、Selector、Parallel、Inverter、Repeater、Succeeder、Failer、Delay、Action)、5つの値型を持つ共有ブラックボード(Bool、Int、Float、String、Vec3)、構成可能な条件ロジック(And/Or/Not)を提供します。Free版はMITライセンスでエンジン非依存です。

使用にはFyroxエンジンが必要ですか?

いいえ。無料のコアライブラリはserdeとnalgebraのみに依存しているため、Fyrox、Bevy、macroquad、ヘッドレスサーバーなど、あらゆるRustプロジェクトで使用できます。ProビジュアルエディタにはFyroxEdが必要ですが、コアAIロジックはどこでも動作します。

Proビジュアルエディタはどのように動作しますか?

Fyrox AI ProはFyroxEd内に3パネルのビジュアルエディタを追加します:左側に変数を検査するブラックボードパネル、中央にドラッグ&ドロップでステートマシンを設計するグラフキャンバス、右側に遷移と条件を設定するステート詳細パネル。すべての変更は完全な元に戻す/やり直しをサポートします。

Fyrox AIをfyrox-dialogと一緒に使えますか?

はい。両システムは条件評価にブラックボードを使用するため、ゲーム状態を共有できます。NPCのAIステートマシンがダイアログフラグをチェックし、ダイアログの条件ノードがAIの状態変数を読み取ることができます。これにより、会話の結果に基づいて行動を変えるNPCを構築できます。

ステートマシンとビヘイビアツリーの違いは何ですか?

ステートマシンは明確な状態(待機、巡回、追跡)を定義し、条件に基づく明示的な遷移を持ちます。ビヘイビアツリーは行動をツリー状に整理し、上から下へ評価します。Sequence、Selector、Parallelなどのノードで複雑な意思決定が可能です。Fyrox AIは両方を提供しています — 高レベルのモードにステートマシンを、各ステート内の詳細なロジックにビヘイビアツリーを使用できます。

よりスマートなゲームAIを、より速く構築

MITライセンスの無料コアで始めましょう。必要に応じてProビジュアルエディタを追加できます。