PolyTrigger2D + StateMachine2D — 2つのエンジン。1つのツールキット。RPG Maker MZが欠いていた、Godotスタイルのレイヤー。
Discordサーバーで割引や無料プラグインを受け取る
https://discord.gg/W4HSw695kP
PolyTrigger2Dは、すべてのイベントに実際の幾何学的な衝突形状(円、矩形、楕円、カスタム多角形)を提供します。回転、追跡方向の視界锥、Godotスタイルの名前付きレイヤー、非同期近接シグナルが含まれます。並列イベントは不要、接触も不要です。
StateMachine2Dは、すべてのイベントを有限状態マシンに変えます。無制限の状態、振る舞い(追跡、逃避、巡回、徘徊、追従)、シグナル、非同期コルーチン、そして初心者でも使えるビジュアルなプラグインコマンドワークフローを備えています。
これらを組み合わせることで、完全なAI+物理レイヤーが形成されます。形状が検知し、FSMが反応します。プレイヤーを見て追跡したり、逃げたり、ゾーンから伏撃をかけたり、視界锥でカットシーンをトリガーしたりするNPC—all parallel processなしで。
両方のプラグインは完璧になるまで更新されます。 バグを見つけましたか? 新しい振る舞い、新しい形状、新しいシグナルを望んでいますか? 私たちに伝えてください — 私たちが構築します。このツールキットはコミュニティと共に成長します。
パート1 — PolyTrigger2D (Area2D)
すべてのイベントに実際の幾何学的な衝突形状を。RPG Makerが決して持たなかった Godot Area2D レイヤー。
何をするのか
形状を任意のイベントまたはプレイヤーにアタッチします。形状はグリッドに縛られません — オフセット、回転、Godotと同じ名前付き物理レイヤーを持つピクセル空間で動作します。何かが重なったときに非同期の body_entered および body_exited シグナルを発火します。ぶつかる必要も、接触する必要も、並列プロセスも必要ありません。ゾーンには、何かが入った瞬間に発火します。
機能
- 4つの形状タイプ — 円、矩形、楕円、カスタム多角形(3〜16頂点)
- 回転 — 形状はイベントとともに回転し、任意の角度で度単位
- 追跡方向 — 視界锥スタイル、イベントが向きを変えると自動的に回転
- Godotスタイルのレイヤーとマスク — 16個の名前付き物理レイヤー(「Player」、「Enemy」、「Trap」…)
- 非同期近接シグナル —
onEnterActions/onExitActionsを1つのテキストボックスで - 並列イベント不要 — シグナルは近接時に自動的に発火
- 接触不要 — MZの任意のトリガータイプ(0/1/2/3/4)で動作
- デバッグオーバーレイ — 常に表示またはF10で切り替え、再描画コストゼロのためにキャッシュ済み
- Area Forgeツール — 視覚的に形状を描画し、notetag / コメント / スクリプトをエクスポート
- ゼロ割り当てホットパス — アクティブなエリア200個でも60fpsを維持
- ピクセル移動対応 —
_realX/_realYが存在する場合に使用(Altimit、QMovementなど) - 自己診断 —
diagnose(id)で正確な問題を特定 - 依存関係ゼロ — 単独で動作
用途
- ステルス敵の視界锥
- 円形の回復ゾーン
- 矩形のトラップフィールド
- 多角形の部屋トリガー
- 近づくと気づくNPC
- 近くのターゲットをチェックする投射物
- 任意の形状、任意の方向に整列したゾーン
パート2 — RPX StateMachine2D (FSM)
すべてのイベントに実際の有限状態マシンを。入れ子になった分岐、並列スイッチ、ページスパゲッティを 読みやすい状態 に置き換えます。
何をするのか
イベントのnotebxまたはページコメントで状態を定義します。各状態には振る舞い(イベントが自動的に実行すること)、オプションのアニメーション、およびオプションの enter / update / exit JavaScriptが含まれます。遷移は条件、シグナル、または近接に基づいて発火します。パース時に 1回だけコンパイル されるため、フレームごとのパースコストはゼロです。
機能
- 無制限の状態 — notebx、プラグインコマンド、またはスクリプトから実行時に追加
- 8つの組み込み振る舞い — none、idle、wander、patrol、chase、flee、approach、follow
- 完全なJSボディ —
enter/update/exitにthis= キャラクター、無制限のコード - 非同期コルーチン —
await this.waitFrames(60)、waitSignal、waitCondition、waitState - シグナル — 任意の名前付きシグナル、状態ローカルまたはグローバル、スクリプトまたはプラグインコマンドから送信
- 遷移条件 — スコープ内に
thisを持つ完全なJS、裸のヘルパーは自動修正 - 1クリックトリガー —
AddTrigger approach/leave/touch/actionkey/polyEnter/polyExit/always - 移動ヘルパー —
moveTowardPlayer、moveAwayFromTarget、moveTowards(x,y)、distanceToPlayer - デバッグオーバーレイ — 各イベントの上に状態名を表示、F7で切り替え、キャッシュ済みPIXI.Text
- 自己診断 —
StateMachine2D.diagnose(id)+selfTest()ヘッドレススイート - セーブ/ロード安全 — プレーンデータのみ保存;ロード後にコンパイルされた関数を再構築
- MVフォールバック — プラグインコマンド経由でRPG Maker MVでも動作
用途
- 巡回し、プレイヤーに気づき、追跡し、攻撃し、戻る護衛
- 近づくと徘徊し、逃げる動物
- フェーズチェンジと Telegraphed アタックを持つボス
- ストーリーフラグやクエスト状態に反応するNPC
- 視界锥による伏撃遭遇
- スクリプトされた振る舞いを持つカットシーンアクター
- かつては入れ子になった分岐の6ページだった任意のイベント
例 — 12行で護衛
<State: GUARD>
behavior: patrol
range: 4
anim: slime_idle
transition: CHASE if this.isPlayerNear(6)
</State>
<State: CHASE>
behavior: chase
anim: slime_run
transition: ATTACK if this.isPlayerNear(1.2)
transition: GUARD if !this.isPlayerNear(9)
</State>
<State: ATTACK>
behavior: none
enter: this.playAnim('slime_attack');
update: this.processAttack();
transition: CHASE if this.stateTime() > 60
</State>
