Skip to content

CreateAndLaunch()にGameObject[]オーバーロードを追加 - #37

Merged
CyTakayukiKiyohara merged 1 commit into
mainfrom
feature/multi-receiver-create-and-launch
Aug 3, 2026
Merged

CreateAndLaunch()にGameObject[]オーバーロードを追加#37
CyTakayukiKiyohara merged 1 commit into
mainfrom
feature/multi-receiver-create-and-launch

Conversation

@CyTakayukiKiyohara

@CyTakayukiKiyohara CyTakayukiKiyohara commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

概要

複数のレシーバーオブジェクトに跨ってデカールを貼るケースで、ランタイム生成 API(CreateAndLaunch())が単一レシーバーしか受け取れなかった制限を解消します。

投影パイプライン(ExecuteLaunch())は元々 receiverObjects 配列をループする複数レシーバー対応済みで、インスペクタ配置では複数指定が可能でした。CreateAndLaunch() だけが長さ1の配列を固定生成していたため、ランタイム生成では利用できませんでした。

変更内容

  • CreateAndLaunch()GameObject[] を受け取るオーバーロードを追加
    • 既存の単体版は new[] { receiverObject } で配列版へ委譲(後方互換維持)
    • 渡された配列は防御的コピーし、数フレームかかる Launch 中に呼び出し側が配列を書き換えても投影対象が変わらないようにする
  • EditMode テスト追加(TestCreateAndLaunch: 委譲の互換性・全要素の設定・防御的コピー)
  • README EN/JA に複数レシーバーオーバーロードの説明とサンプルを追記
  • Demo_05 追加: マテリアルの異なる2枚の壁の継ぎ目にステッカーを貼るデモ。GUI で「Multiple Receivers(継ぎ目を跨いで連続)」と「Single Receiver(継ぎ目で切れる)」を切り替えて比較できる

動作仕様

  • 各レシーバーは同一のデカール空間でクリップされ UV もデカール空間基準のため、レシーバーの境目でテクスチャは連続する
  • デカールメッシュはレシーバー(×レンダラー×マテリアル×グループID)ごとに構築されるため、跨るレシーバーの数だけドローコールは増える
  • いずれかのレシーバーのメッシュが Read/Write 無効の場合、そのレシーバーの時点で LaunchingCanceled となり残りは処理されない(インスペクタで複数指定した場合の現行挙動と同一)

既知の制限

receiver 引数に null リテラルを直渡しする既存コードはオーバーロード解決が曖昧になりコンパイルエラーになります(変数経由の呼び出しは影響なし。(GameObject)null キャストで回避可能)。null レシーバー指定は何も焼かれない実質無意味な呼び出しのため、許容と判断しました。

確認

  • MSBuild で AirSticker / Tests / Assembly-CSharp のコンパイル確認
  • Demo_05 の Play モードで、複数レシーバー版が継ぎ目を跨いで連続すること・単体版が継ぎ目で切れることを目視確認
  • Test Runner での EditMode テスト実行(レビュー時にご確認ください)

🤖 Generated with Claude Code

複数のレシーバーオブジェクトに跨ってデカールを貼るケースで、ランタイム生成
(CreateAndLaunch)が単一レシーバーしか受け取れなかった制限を解消する。
投影パイプライン(ExecuteLaunch)は元々receiverObjects配列をループする
複数レシーバー対応済みで、インスペクタ配置では複数指定できていた。

- CreateAndLaunch()にGameObject[]を受け取るオーバーロードを追加。
  既存の単体版は配列版へ委譲(後方互換維持)。渡された配列は防御的コピーし、
  数フレームかかるLaunch中に呼び出し側が配列を書き換えても投影対象が
  変わらないようにする
- EditModeテスト追加(委譲の互換性・全要素の設定・防御的コピー)
- README EN/JAに複数レシーバーオーバーロードの説明とサンプルを追記
- Demo_05追加: 2枚の壁の継ぎ目にステッカーを貼り、複数レシーバー版
  (跨って連続)と単体版(継ぎ目で切れる)をGUIで切り替えて比較できる

既知の制限: receiver引数にnullリテラルを直渡しする既存コードは
オーバーロード解決が曖昧になりコンパイルエラーになる(変数経由は影響なし。
(GameObject)nullキャストで回避可能)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant