Mashiro Pickup Hold SFX
Pickup の Use 中(または保持中)に AudioSource をループ再生する UdonSharp コンポーネント(MashiroPickupHoldSfx)。再生状態を同期し、全プレイヤーで再生・停止する。
構成
| ファイル | 内容 |
|---|---|
MashiroPickupHoldSfx.cs |
本体スクリプト(MashiroPickupHoldSfx) |
MashiroPickupHoldSfx.asset |
MashiroPickupHoldSfx の UdonSharp ProgramAsset |
footsteps-on-wooden-floor-6803.mp3 |
効果音素材(配布対象外) |
依存
- パッケージ:
MashiroTheater-Utils(VPMcom.mashirotheater.utils) VRC_Pickup:pickup未設定時は同じ GameObject のものを取得する。AudioSource: 再生する AudioClip はAudioSource.clipに設定する。
仕様
初期化(Start)
audioSource未設定のとき、Debug.LogErrorを出してコンポーネントを無効化(enabled = false)する。pickup未設定のとき、同じ GameObject のVRC_Pickupを取得する。取得できなければDebug.LogErrorを出してコンポーネントを無効化する。audioSourceに次を設定する。playOnAwake = falseloop = truespatialBlendが 1 未満なら1
audioSourceを停止して音量を 0 にし、同期変数_playingSyncedの値を反映する。
再生条件
playWhileHeldWithoutUseがfalse: 保持中かつ Use 押下中(OnPickupUseDown〜OnPickupUseUp)に再生する。playWhileHeldWithoutUseがtrue: 保持中(OnPickup〜OnDrop)に再生する。OnDropで Use 押下状態も解除する。
同期
- 同期モード:
BehaviourSyncMode.Manual - 同期変数:
_playingSynced(bool、[UdonSynced]) OnPickupで拾ったプレイヤーがNetworking.SetOwnerでオーナーになる。- 再生条件の評価と
_playingSyncedの更新はオーナーのみが行い、値が変わったときにRequestSerializationする。 OnDeserializationとOnOwnershipTransferredで_playingSyncedを反映する。OnPlayerLeftで、自分がオーナーならローカルの保持・Use 状態から再生条件を再評価する。
音量フェード
- 目標音量は
_playingSyncedがtrueならtargetVolume、falseなら0。 fadeSecondsが 0 より大きいとき、Mathf.SmoothDamp(smoothTime = fadeSeconds)で音量を目標へ近づけ、差が0.002未満で目標値に確定する。fadeSecondsが 0 以下のとき、目標音量を即時適用する。- 停止時は音量が 0 に確定した時点で
AudioSource.Stop()する。 - 音量は 0〜1 に制限して
AudioSource.volumeへ設定する。 - フェード中のみコンポーネントを有効にし、確定後は
enabled = falseにする。
Inspector
MashiroPickupHoldSfx
| フィールド | 型 | 既定値 | 必須 | 内容 |
|---|---|---|---|---|
audioSource |
AudioSource |
なし | ○ | 再生に使う AudioSource |
pickup |
VRC_Pickup |
なし | – | 対象の Pickup。未設定なら同じ GameObject から取得する |
playWhileHeldWithoutUse |
bool |
false |
– | true で保持中に再生、false で保持中かつ Use 押下中に再生 |
fadeSeconds |
float |
0.10 |
– | 音量フェードの SmoothDamp の smoothTime(秒)。0 以下で即時切り替え |
targetVolume |
float([Range(0, 1)]) |
1 |
– | 再生時の音量 |
API リファレンス
MashiroPickupHoldSfx
UI へ手配線するもの
なし。
内部連携用(配線不要)
| シグネチャ | 用途 | 呼び出し種別 |
|---|---|---|
override void OnPickup() |
オーナーを取得し、保持状態にして再評価する | VRChat コールバック(内部専用) |
override void OnDrop() |
保持・Use 状態を解除して再評価する | VRChat コールバック(内部専用) |
override void OnPickupUseDown() |
Use 押下状態にして再評価する | VRChat コールバック(内部専用) |
override void OnPickupUseUp() |
Use 押下状態を解除して再評価する | VRChat コールバック(内部専用) |
override void OnDeserialization() |
同期された再生状態を反映する | VRChat コールバック(内部専用) |
override void OnOwnershipTransferred(VRCPlayerApi player) |
再生状態を反映する | VRChat コールバック(内部専用) |
override void OnPlayerLeft(VRCPlayerApi player) |
オーナーなら再生条件を再評価する | VRChat コールバック(内部専用) |
ライセンス
MIT License(リポジトリルートの LICENSE.md)。
本ドキュメントは AI を用いて作成しています。不明点・記載の誤りなどありましたら、下記までお問い合わせください。