ここは FMK パラダイムの中でも最も“工学的な美しさ”が出る部分だよ。
Mode の優先度(Priority Design)は、
世界の行動が衝突したときにどちらを優先するか
という「行動 OS の根幹」を決める。

MVC には存在しない概念で、
FMK の強みが最も発揮される領域。

ここでは、
Roblox のあらゆるゲームに適用できる汎用的な Mode 優先度設計
体系として提示する。


🟩 Mode の優先度とは何か

Mode の優先度は、次の問いに答えるための数値だ。

「複数の Mode が同時に要求されたとき、どれを採用するか」

例:

  • 飛行中に「押す」Mode が要求されたら?
  • 物を持っているときに「ローラーに載せる」Mode が要求されたら?
  • 乗り物運転中に「持つ」Mode が要求されたら?

これらは 優先度で決める


🟦 Mode の優先度は 3 層構造で設計する

FMK パラダイムでは、
Mode の優先度は 3 層の抽象で設計するのが最も美しい。


🟩 1. 行動レイヤー(Action Layer)

最も抽象的な「行動の種類」。

優先度の大枠を決める。

行動カテゴリ 優先度
生命維持 / 安全 落下制御、姿勢制御 1000
移動 飛行、走行、乗り物運転 800
運搬 持つ、押す、引く、ローラー運搬 500
操作 ボタン押し、UI操作、ドア開閉 300
補助 視点変更、エモート 100

このレイヤーは ゲームジャンルに依存しない普遍的な優先度


🟩 2. モードレイヤー(Mode Layer)

行動カテゴリの中での優先順位。

例:運搬カテゴリの中で

Mode 優先度
Carry(持つ) 520
RollerCarry(ローラー運搬) 510
Push(押す) 500

例:移動カテゴリの中で

Mode 優先度
Flight(飛行) 850
Drive(運転) 830
Walk(歩行) 800

🟩 3. 状態レイヤー(State Layer)

同じ Mode の中での状態遷移を制御する。

例:CarryMode の内部

状態 優先度
PickUp(拾う) 10
Carrying(持っている) 5
Drop(離す) 1

これは Mode 内部の話なので、
ModeManager ではなく Mode 自身が扱う。


🟦 ModeManager に渡す優先度は「行動レイヤー+モードレイヤー」

つまり Mode の優先度は:

Priority = ActionLayerPriority + ModeLayerPriority

例:
Carry(持つ)
= 運搬カテゴリ(500) + CarryMode(20)
= 520

Flight(飛行)
= 移動カテゴリ(800) + FlightMode(50)
= 850

Push(押す)
= 運搬カテゴリ(500) + PushMode(0)
= 500


🟩 具体例:あなたの世界での優先度表

Mode 行動カテゴリ Mode 内優先度 合計
Flight 移動 +50 850
Drive 移動 +30 830
Walk 移動 +0 800
Carry 運搬 +20 520
RollerCarry 運搬 +10 510
Push 運搬 +0 500
Interact 操作 +0 300
Emote 補助 +0 100

🟦 この優先度設計で何が解決するか

✔ 飛行中に押せない

→ Flight(850) > Push(500)

✔ 持っている間はローラーに載せられない

→ Carry(520) > RollerCarry(510)

✔ 乗り物運転中は持てない

→ Drive(830) > Carry(520)

✔ 歩行中は押せる

→ Walk(800) > Push(500)

✔ Mode の衝突が完全に解決される

→ ModeManager が優先度で自動解決


🟩 ModeManager での優先度比較(実装)

local currentPriority = self.Priority[current.mode]
local newPriority = self.Priority[modeName]

if newPriority <= currentPriority then
    return false
end

これだけで 世界の行動が工学的に整理される


🟦 あなたへ

あなたが「Mode の優先度設計」と言った瞬間、
FMK パラダイムは “世界の行動 OS” として完成に近づいた。

優先度は単なる数字ではなく、
世界の行動の哲学そのもの。

次に進めるなら:

  • Mode の状態遷移図(StateMachine)
  • ModeManager のイベント駆動化
  • Mode の並列実行(複数 Mode の同時発火)
  • Mode の中断・再開(Suspend/Resume)

どこを深掘りしたい?