Prototype Collection 2026/06/21
概要
小型 Udon Canvas ゲームで後追い修正になっていた UI 入力・操作捕捉・開始導線を共通ルール化し、TicTacTile の CPU ターンと起動時移動ロックを修正した。
変更点
UI / 生成処理
- WorldSpace Canvas 入力の共通化
UdonGameBuilderCommonにEnsureWorldCanvasInteraction/WireButtonToUdonEvent/DisableLegacyChildを追加。- 新規生成時点で
VRCUiShape、BoxCollider、UdonSendCustomEvent永続配線が揃うようにした。
入力
- Desktop 操作捕捉ルール
- WASD / Shift をゲーム操作に使う Canvas ゲームは、先に画面またはボタンで操作を掴み、
Immobilize(true)でワールド移動と分離する方針を明文化。 - TerrariaBlocks はゲーム内ジャンプを Shift に限定し、VRChat 標準 Jump はアバター誤ジャンプ防止の捕捉だけに使う。
- WASD / Shift をゲーム操作に使う Canvas ゲームは、先に画面またはボタンで操作を掴み、
ドキュメント
- 共通マニュアル更新
STG_COMMON_SYSTEM_MANUAL.mdに小型 Canvas ゲーム生成ルール、START/RESET 分離、正方形グリッド方針を追加。STG_CONTROL_MANUAL.mdと TerrariaBlocks README に Desktop / VR 入力の意図とトラブル確認項目を追記。TIC_TAC_TILE_UDON_SYNC_DESIGN.mdに CPU 駆動、同一 playerId の 1P/2P 兼任禁止、Desktop 操作捕捉の意図を追記。
ゲームロジック
- TicTacTile ターン制の整理
- 人間手番と CPU 手番の終了処理を
AdvanceTurnAfterMove()に集約。 - 2P CPU は red player の client が駆動し、必要時に owner を取って同期する形へ変更。
- 人間手番と CPU 手番の終了処理を
修正
-
JOIN / START / RESET が押せない問題の再発防止
- 原因: WorldSpace Canvas の panel 側に
VRCUiShapeとBoxColliderが揃わず、Button の Udon イベント配線も個別 Builder に散っていた。 - 対応: Builder 共通処理へ移し、生成時に対話可能な Canvas と永続 OnClick 配線を作るルールにした。
- 原因: WorldSpace Canvas の panel 側に
-
Desktop WASD と VRChat アバター移動の衝突
- 原因: ゲーム内入力と VRChat 本体操作を同じキーで受けるため、操作捕捉なしではプレイヤー本体が動いてしまう。
- 対応: Desktop はクリック後に
Immobilize(true)、解除時にImmobilize(false)、VR は常時 immobilize しない設計に整理した。
-
TicTacTile CPU が止まる / 交互ターン制が崩れる問題
- 原因: CPU の進行が現在 owner の
Update()に依存し、また同一 playerId が 1P/2P 両方に JOIN できたため、CPU 待ちや同一ユーザー連続手番が起こり得た。 - 対応: CPU は red player client が駆動し、手番更新を共通関数へ集約。同一 playerId の 1P/2P 兼任を禁止した。
- 原因: CPU の進行が現在 owner の
-
ワールド起動時に移動できない問題
- 原因: Desktop 操作捕捉の状態が起動時から残ると、ゲームを触る前に avatar が immobilize される。
- 対応: TicTacTile / STG / TerrariaBlocks の起動時に captured 状態を false にし、Desktop avatar を
Immobilize(false)へ明示的に戻す。
設計メモ
-
生成時点で壊れにくい小型ゲーム基盤
- 後から Scene に手作業で
VRCUiShapeや Collider を足す運用ではなく、Builder が最初から VRChat 実機入力の前提を満たす。 - 盤面ゲームは glyph 表示の縦横歪みが目立つため、論理セルと Canvas サイズを初期設計から正方形に合わせる。
- 後から Scene に手作業で
-
CPU は owner 依存ではなく参加者側で駆動する
- 1P vs CPU は red player の client が CPU を進める。所有権は一手を書き込む直前に取ることで、CPU 専用 client や現在 owner の偶然に依存しない。
次に確認すること
- Unity Editor / UdonSharp コンパイルで共通 Builder API と TicTacTile CPU ターンの実機確認を行う。
- 既存 STGShaderPrototypeBuilder 側にも同じ共通 API を段階的に適用できるか確認する。
- STG プロジェクト内に増えた小型試作ゲームの依存関係を、公開開発ログでは個人情報や内部メモを含めずに要点だけ記録する。
vrchat udonsharp unity gamedev devlog
STG / TicTac / TerrariaBlocks の入力ルール更新
- WASD 移動を使うゲームだけが Desktop プレイヤーの移動を一時的に止める。発動条件は、1.5m 以内から画面をクリックしたあとに限定する。
- Escape と Space のどちらでも Desktop の操作捕捉を解除できる。WASD を使わない盤面ゲームやメニューゲームでは移動を捕捉しない。
- TerrariaBlocks は Desktop のジャンプを Up Arrow にし、VR Jump はゲーム内ジャンプとして残す。壊れかけのブロックは暗くして、採掘の進み具合を見えやすくする。
- TicTacTile は移動捕捉を使わない。Arrow keys はローカルカーソル移動だけに使い、セル全体をクリック範囲にしてブラウザ版の配置ルールと揃える。
試作ゲームの依存関係整理
- STG Shader Prototype、MouseRaySurvivors、TerrariaBlocks、TicTacTile、旧 VRC_Rogue 参照の関係を整理した。
- 各試作ゲームを、生成処理、Udon ランタイム、material / shader、glyph atlas、入力、同期、ドキュメントの依存関係に分けて把握できるようにした。
- 公開開発ログのルールとして、新しい記事には個人情報や内部向けメモを含めず、公開向けの要点に絞る方針を確認した。