OnOffSwitches

GameObject の有効・無効をボタン押下・Interact・長押しで切り替えるスイッチ群。全プレイヤー同期版、ローカル版、複数ボタンで 1 つの同期状態を共有する版、3D オブジェクトの長押しで切り替える同期版を含む。

構成

ファイル 役割
MashiroGlobalOnOffSwitch.cs 1 ボタンで対象を切り替える。状態を全プレイヤーで同期する
MashiroGlobalOnOffSwitch.asset MashiroGlobalOnOffSwitch の UdonSharp ProgramAsset
MashiroLocalOnOffSwitch.cs 1 ボタンで対象を切り替える。状態はローカルのみ
MashiroLocalOnOffSwitch.asset MashiroLocalOnOffSwitch の UdonSharp ProgramAsset
MashiroMultiGlobalOnOff.cs 対象と同期状態を保持するコントローラ。複数の MashiroMultiGlobalOnOffButton から操作される
MashiroMultiGlobalOnOff.asset MashiroMultiGlobalOnOff の UdonSharp ProgramAsset
MashiroMultiGlobalOnOffButton.cs 押下を MashiroMultiGlobalOnOff へ転送し、ボタン色を状態に合わせる
MashiroMultiGlobalOnOffButton.asset MashiroMultiGlobalOnOffButton の UdonSharp ProgramAsset
MashiroGlobalHoldOnOffSwitch.cs 3D オブジェクトの長押しで対象を切り替える。状態を全プレイヤーで同期する
MashiroGlobalHoldOnOffSwitch.asset MashiroGlobalHoldOnOffSwitch の UdonSharp ProgramAsset

依存

仕様

共通(MashiroGlobalOnOffSwitch / MashiroLocalOnOffSwitch / MashiroMultiGlobalOnOff / MashiroMultiGlobalOnOffButton)

ボタン色 / ラベル の節も同じ 4 コンポーネントが対象。

項目 内容
対象の切替 target.SetActive(状態)。target 未設定時は何もしない
ボタン参照 自身の GetComponent<Button>() で取得する。未取得時は色を変更しない
ラベル参照 GetComponentInChildren<TextMeshProUGUI>() で取得する(自身を含む)
入力 OnButtonClick()(Button.OnClick から配線)と Interact()(VRChat の Use 操作)の両方で同じ処理を行う

ボタン色

ColorBlock の各項目を次の値にする。disabledColor は変更しない。

項目 値
normalColor 基準色
selectedColor 基準色
highlightedColor Color.Lerp(基準色, Color.white, 0.1f)
pressedColor Color.Lerp(基準色, Color.black, 0.1f)

基準色は ON 時と OFF 時でコンポーネントごとのフィールド(下記 Inspector)を使う。MashiroLocalOnOffSwitch は updateButtonColor が false のとき色を変更しない。

ラベル

コンポーネント 挙動
MashiroGlobalOnOffSwitch / MashiroMultiGlobalOnOffButton useGameObjectNameForLabel が true のとき、参照取得時(Start。MashiroMultiGlobalOnOffButton は Start 前に ApplyVisual が呼ばれた場合はその時点)にラベルへ gameObject.name を設定する。状態による変更はしない
MashiroLocalOnOffSwitch useCustomLabels が true のとき、ON で enabledLabel、OFF で disabledLabel を設定する。false のときは Start 時点のラベル文字列を ON / OFF 共通で使う

MashiroGlobalOnOffSwitch

MashiroLocalOnOffSwitch

MashiroMultiGlobalOnOff / MashiroMultiGlobalOnOffButton

MashiroGlobalHoldOnOffSwitch

イベント 動作
Interact() 長押しの計測を開始する
InputUse(false, …)(Use 入力の解放) 長押しを中断する
OnPickupUseDown() 長押しの計測を開始する
OnPickupUseUp() / OnDrop() 長押しを中断する
状態 _Color
OFF (1, 1, 1, 1)
ON (0.91, 0.35, 0, 1)
計測中 Color.Lerp(現在の状態の色, 反転後の色, Mathf.Lerp(0.2, 1, 進捗))
中断時 現在の状態の色に戻す

Inspector

MashiroGlobalOnOffSwitch

フィールド 型 既定値 必須 内容
target GameObject なし ○ 有効・無効を切り替える対象
onColor Color (0.69, 0.239, 0.016, 1) — ON 時のボタン基準色
offColor Color Color.black((0, 0, 0, 1)) — OFF 時のボタン基準色
initialState bool false — 開始時の状態
useGameObjectNameForLabel bool true — true でラベルに GameObject 名を設定する

MashiroLocalOnOffSwitch

フィールド 型 既定値 必須 内容
target GameObject なし ○ 有効・無効を切り替える対象
startEnabled bool false — 開始時の状態
useCustomLabels bool false — true でラベルを enabledLabel / disabledLabel で切り替える
enabledLabel string "ON" — ON 時のラベル
disabledLabel string "OFF" — OFF 時のラベル
enabledColor Color (0.69, 0.239, 0.016, 1) — ON 時のボタン基準色
disabledColor Color Color.black((0, 0, 0, 1)) — OFF 時のボタン基準色
updateButtonColor bool true — false でボタン色を変更しない

MashiroMultiGlobalOnOff

フィールド 型 既定値 必須 内容
target GameObject なし ○ 有効・無効を切り替える対象
buttons MashiroMultiGlobalOnOffButton[] 空 — 状態変化時に ApplyVisual を呼ぶボタン
initialState bool false — 開始時の状態

MashiroMultiGlobalOnOffButton

フィールド 型 既定値 必須 内容
controller MashiroMultiGlobalOnOff なし ○ 状態を管理するコントローラ
onColor Color (0.69, 0.239, 0.016, 1) — ON 時のボタン基準色
offColor Color Color.black((0, 0, 0, 1)) — OFF 時のボタン基準色
useGameObjectNameForLabel bool true — true でラベルに GameObject 名を設定する

MashiroGlobalHoldOnOffSwitch

Add Component メニュー: MashiroTheater/Mashiro Global Hold On Off Switch

フィールド 型 既定値 必須 内容
target GameObject なし ○ 有効・無効を切り替える対象
holdSeconds float 1([Min(0.1)]) — 切り替わるまでに押し続ける秒数
initialState bool false — 開始時の状態

API リファレンス

MashiroGlobalOnOffSwitch

UI へ手配線するもの

シグネチャ 用途 呼び出し種別
void OnButtonClick() 状態を反転して同期する Button.OnClick から配線

内部連携用(配線不要)

シグネチャ 用途 呼び出し種別
void Interact() OnButtonClick() を呼ぶ VRChat コールバック(内部専用)
bool State { get; private set; } 現在の状態。setter は対象とボタン色へ反映する 取得は他の Udon から可。設定は内部専用
void OnDeserialization() 同期受信時に状態を反映する VRChat コールバック(内部専用)
void OnPlayerJoined(VRCPlayerApi player) マスターが同期を送信する VRChat コールバック(内部専用)

MashiroLocalOnOffSwitch

UI へ手配線するもの

シグネチャ 用途 呼び出し種別
void OnButtonClick() 状態を反転する Button.OnClick から配線

内部連携用(配線不要)

シグネチャ 用途 呼び出し種別
void Interact() 状態を反転する VRChat コールバック(内部専用)
void Toggle() 状態を反転する 他の Udon から呼ぶ
void SetState(bool newState) 状態を設定する。現在と同じ値なら何もしない 他の Udon から呼ぶ
bool GetState() 現在の状態を返す 他の Udon から呼ぶ

MashiroMultiGlobalOnOff

UI へ手配線するもの

なし。

内部連携用(配線不要)

シグネチャ 用途 呼び出し種別
void Toggle() 状態を反転して同期する MashiroMultiGlobalOnOffButton が呼ぶ。他の Udon からも呼べる
bool GetState() 現在の状態を返す MashiroMultiGlobalOnOffButton が呼ぶ。他の Udon からも呼べる
bool State { get; private set; } 現在の状態。setter は対象と全ボタンへ反映する 取得は他の Udon から可。設定は内部専用
void OnDeserialization() 同期受信時に状態を反映する VRChat コールバック(内部専用)
void OnPlayerJoined(VRCPlayerApi player) マスターが同期を送信する VRChat コールバック(内部専用)

MashiroMultiGlobalOnOffButton

UI へ手配線するもの

シグネチャ 用途 呼び出し種別
void OnButtonClick() controller.Toggle() を呼ぶ Button.OnClick から配線

内部連携用(配線不要)

シグネチャ 用途 呼び出し種別
void Interact() OnButtonClick() を呼ぶ VRChat コールバック(内部専用)
void ApplyVisual(bool isOn) ボタン色を状態に合わせる MashiroMultiGlobalOnOff が呼ぶ

MashiroGlobalHoldOnOffSwitch

UI へ手配線するもの

なし。

内部連携用(配線不要)

シグネチャ 用途 呼び出し種別
void Interact() 長押しの計測を開始する VRChat コールバック(内部専用)
void InputUse(bool value, UdonInputEventArgs args) Use 入力の解放で長押しを中断する VRChat コールバック(内部専用)
void OnPickupUseDown() 長押しの計測を開始する VRChat コールバック(内部専用)
void OnPickupUseUp() 長押しを中断する VRChat コールバック(内部専用)
void OnDrop() 長押しを中断する VRChat コールバック(内部専用)
void OnDeserialization() 受信した状態を反映する VRChat コールバック(内部専用)
void _HoldTick() 長押しの進捗を 1 フレーム分進める SendCustomEventDelayedFrames で自身が呼ぶ(内部専用)

ライセンス

MIT License(MashiroTheater-Utils 同梱の LICENSE.md を参照)。


本ドキュメントは AI を用いて作成しています。不明点・記載の誤りなどありましたら、下記までお問い合わせください。