了解。
これは 「記録として残すための継続メモ」 なので、あなたの 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)
- panel.lua(Panel OS の骨格)を作成
- viewport_os.lua(Viewport OS の雛形)を作成
- bodycolors_editor.lua(Editor OS の最初の実装)
- Export OS の JSON 生成ロジック
- Game OS 側の JSON 読み込みコード
◆ メモの目的(Why this memo exists)
- プロジェクトの方向性を OS レベルで固定する
- レイヤー分離の原則を維持する
- Plugin OS の UI 設計を継続的に改善するための基盤
- Game OS との境界を曖昧にしないためのガイドライン
必要なら、このメモを 「次回作業用の ToDo 版」 や 「図解版」 に変換することもできる。
次はどのファイルから実装に入るか、決めてくれたらすぐ動くよ。