了解。
これは 「記録として残すための継続メモ」 なので、あなたの OS 設計思想に合わせて 構造化された“作業継続メモ” としてまとめるね。
(これは保存用の文章であり、あなたのプロジェクトの“進行ログ”としてそのまま使える)


📘 アバター見かけ編集 Plugin — 継続メモ(構造化)

◆ 目的(Purpose)

Studio 内でアバターをスポーンし、見た目を編集し、Game OS に書き出すための Plugin OS を構築する。
Plugin OS と Game OS の責務を明確に分離し、UI OS を意味レイヤーごとに独立させる。


◆ 全体アーキテクチャ(Architecture)

[Plugin OS](Studio)
   ├── Viewport OS(表示)
   ├── Editor OS(編集)
   └── Export OS(書き出し)
        ↓ JSON
[Web OS](任意)
        ↓ 署名・保存
[Game OS](ゲーム内)
        ↓ アバター適用

◆ Plugin OS の構造(Studio 側)

1. Panel OS(ルート OS)

  • Plugin 全体の UI を統括
  • Editor OS の切り替え
  • アバター状態管理
  • Undo / Redo
  • Export OS の呼び出し

2. Viewport OS(アバター表示)

  • ViewportFrame
  • カメラ操作(回転・ズーム)
  • ポーズ変更
  • Editor OS からの変更を即時反映

3. Editor OS(意味レイヤーごとに独立)

  • BodyColorsEditor
  • AccessoryEditor
  • ClothingEditor
  • Face/MeshEditor
  • ScaleEditor
  • AnimationPreviewer

各 Editor OS は Panel OS に登録され、独立した意味単位として動作する。

4. Export OS(Game OS との境界)

  • アバター設定を JSON 化
  • Preset 保存
  • Web OS への送信(任意)
  • Game OS で読み込める形式に変換

◆ JSON プロトコル(Plugin → Game)

{
  "bodyColors": {...},
  "accessories": [...],
  "clothing": {...},
  "scale": {...},
  "face": {...}
}

Game OS はこの JSON を読み込み、プレイヤーのアバターに適用する。


◆ Game OS 側の役割(Plugin とは分離)

  • JSON を読み込んでアバター適用
  • ChatCommand によるアバター操作
    • /wave
    • /sit
    • /big
    • /red
      など、動作や変形は Game OS 側で処理する。

◆ 現在の進捗(Progress)

  • Plugin OS の全体構造を確定
  • Editor OS の意味レイヤー分離を定義
  • Viewport OS の責務を確立
  • Export OS の JSON 仕様を確定
  • Game OS との境界が明確に分離された

◆ 次のタスク(Next Steps)

  1. panel.lua(Panel OS の骨格)を作成
  2. viewport_os.lua(Viewport OS の雛形)を作成
  3. bodycolors_editor.lua(Editor OS の最初の実装)
  4. Export OS の JSON 生成ロジック
  5. Game OS 側の JSON 読み込みコード

◆ メモの目的(Why this memo exists)

  • プロジェクトの方向性を OS レベルで固定する
  • レイヤー分離の原則を維持する
  • Plugin OS の UI 設計を継続的に改善するための基盤
  • Game OS との境界を曖昧にしないためのガイドライン

必要なら、このメモを 「次回作業用の ToDo 版」「図解版」 に変換することもできる。
次はどのファイルから実装に入るか、決めてくれたらすぐ動くよ。