アトリエ構造の前提
- グループ数: 30
- 1グループ内アトリエ数: 16
- 総アトリエ数: 16 × 30 = 480
- 役割整理:
- アトリエ: 作業場所(保存先ではない)
- 作品/未加工大理石: 明示的に持ち込む対象
- 保存: 作品データに紐づけ(DataStore)
構成パターン
30 place 構成(推奨)
- 各 Place が「アトリエグループ」を表し、1 Place = 16アトリエ。
- メリット:
- 負荷分散: 480アトリエを30サーバーに分散。
- 時間差開始: 1分間隔スタートを Place 別入場で制御しやすい。
- 運用明瞭: グループごとの管理・監視が容易。
- Explorer(各Place)例:
Workspace └── Ateliers ├── Atelier1 ├── ... └── Atelier16 ReplicatedStorage └── Common ├── AtelierManager (ModuleScript) └── WorkCatalog (ModuleScript) ServerScriptService ├── DataStoreHandler (Script) └── GroupScheduler (Script) -- 1分間隔スタート制御
単一 place+グルーピング構成
- 1 Place に 30グループ × 各16アトリエ をフォルダーで管理。
- メリット: 単一デプロイで済む。
- デメリット: 同時接続や物理配置が重くなりがち。時間差運用が難しい。
- Explorer 例:
Workspace └── AtelierGroups ├── Group01 │ ├── Atelier1 .. Atelier16 ├── Group02 │ ├── Atelier1 .. Atelier16 └── Group30 ├── Atelier1 .. Atelier16
選択と持ち込みのフロー
- アトリエ選択: ユーザーがグループ内の1アトリエを明示的に選ぶ。
- 作品/素材選択: ユーザーは自分の作品(最大256)または未加工大理石を選び、持ち込む。
- 作業: アトリエは作業場。Clone された作業中オブジェクトが Workspace 内アトリエに置かれる。
- 保存: 最終操作結果は作品データとして DataStore に保存(アトリエは保存先ではない)。
人数による結び付けルール
- 通常: アトリエは単一作品で作業。保存はその作品へ。
- 少人数時(8名以下: 4/3/2/1 ケース含む):
- 同一作品を複数アトリエに結び付け可能。
- 保存は「作品」へ集約。複数アトリエでの最終操作結果が同一作品に反映される。
- 編集ロック例: 同一作品への同時矛盾更新を防ぐため、サーバー側で作品単位ロックを管理。
DataStoreのキー設計
- 作品カタログキー:
- 例:
User:<UserId>:Works→ 作品一覧(1..256、メタデータ付き)
- 例:
- 作品本文キー:
- 例:
Work:<UserId>:<WorkId>→ 実データ(メッシュ・パラメータ・タイムスタンプ等)
- 例:
- セッション結び付け(少人数時):
- 例:
Session:<PlaceId>:Bindingsに「AtelierId ↔ WorkId」一時結び付けを保持
- 例:
- 保存原則: 作品本文のみ更新。アトリエは結び付け情報(セッションスコープ)を持つだけ。
スケジューリングとルーティング
- 1分間隔スタート(30グループ):
- Place ルーティング: ロビーからグループの Place に順次送る。
- DataStoreは Universe 共有: 30 Place すべて同一 DataStore にアクセス可能。
最小 UI(演出なし)
- アトリエ選択リスト: Group 番号 → Atelier 番号の2段リスト(30×16)。
- 作品選択リスト: 数に応じて段階解放(1作品なら自動、増えるほど番号/検索/タグ)。
- 状態表示:
- 選択中アトリエ: Group/Atelier IDs
- 結び付け数(少人数時): 同一作品に紐づくアトリエ IDs
- 保存対象: WorkId
必要なら、30 Place の具体的な配置テンプレート(StarterPlaceの複製方法、共通 ModuleScripts の共有フォルダ設計、ルーティングのダイアグラム)をまとめます。どちらの構成を正式採用しますか?(30 Place 推奨/単一 Place+グルーピング)