ここは 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)
どこを深掘りしたい?