Active Relay - mimyquality/FukuroUdon GitHub Wiki

概要

オブジェクトにアタッチすることで、そのオブジェクトのアクティブ切り替えに合わせて別オブジェクトのアクティブを切り替えたり、音を鳴らしたり、Animatorのパラメーターを書き換えたり、指定したコンポーネントのオンオフをしたりする汎用ギミック集です。
オブジェクトのアクティブをオンオフするスイッチギミックと併用することで、スクリプトを書かずに痒いところに手が届くギミックが組めるようになります。

様々なイベントをトリガーにしてオブジェクトのアクティブを切り替える汎用ギミックもあります。

導入手順

Installation

パッケージ内容

  • ActiveRelay to ファミリー
  • ActiveRelay by ファミリー

使い方

ActiveRelayを付けたいオブジェクトをHierarchyから選択し、「Add Comppnent」から ActiveRelay と検索して、使いたいコンポーネントを選んでアタッチしてください。
一部はPrefab化されているため、 Packages > Fukuro Udon > Samples > ActiveRelay フォルダーから使いたいPrefabをHierarchyに置く方法でもOKです。

activerelayaddcomponent

ActiveRelay to シリーズは、アタッチしたオブジェクトのアクティブが切り替わると、選んだコンポーネントに応じた効果が実行されます。
ActiveRelay by シリーズは、アタッチしたオブジェクトが選んだコンポーネントに応じたUnity/VRChatイベントを受け取ると、セットしたオブジェクトのアクティブを切り替えます。

ActiveRelay to GameObject

  • Event Type : 連動させたい条件
    • Active And Inactive : オブジェクトがアクティブになった時と非アクティブになった時
    • Active : オブジェクトがアクティブになった時のみ
    • Inactive : オブジェクトが非アクティブになった時のみ
  • GameObjects : この配列にセットしたゲームオブジェクトは、このゲームオブジェクトがアクティブになった時にアクティブに、非アクティブになった時に非アクティブになります
  • Invert : 動作を反転します(このオブジェクトがアクティブになった時に配列のゲームオブジェクトを非アクティブに、非アクティブになった時にアクティブにします)
  • Delay Time : 動作を指定秒数だけ遅延させます。0なら無効(従来通り遅延無し動作)

ActiveRelay to Transform

  • Event Type : 連動させたい条件
    • Active And Inactive : オブジェクトがアクティブになった時と非アクティブになった時
    • Active : オブジェクトがアクティブになった時のみ
    • Inactive : オブジェクトが非アクティブになった時のみ
  • Transforms : この配列にセットしたゲームオブジェクトは、このオブジェクトのアクティブ(activeInHierarchy)が反転した時に指定の座標に移動・回転します
  • Position : 移動先になる位置です
  • Rotation : 回転後になる向きです
  • Relative To : Position と Rotation の適用をワールド座標にするかローカル座標にするか

ActiveRelay to Component

  • Event Type : 連動させたい条件
    • Active And Inactive : オブジェクトがアクティブになった時と非アクティブになった時
    • Active : オブジェクトがアクティブになった時のみ
    • Inactive : オブジェクトが非アクティブになった時のみ
  • Components : この配列にセットしたコンポーネントのうち下表にあるものは、このオブジェクトのアクティブ(activeInHierarchy)が反転した時に表記の動作をします。Udonの制約により汎用化が難しかったため需要の高そうなもののみ。表記にないコンポーネントは要望があれば追加実装します。
    • *** Collider : オブジェクトがアクティブになった時にコンポーネントを有効に、非アクティブになった時に無効にします
    • *** Renderer : オブジェクトがアクティブになった時にコンポーネントを有効に、非アクティブになった時に無効にします
    • Occlusion Portal : オブジェクトがアクティブになった時に Open無効 に、非アクティブになった時に 有効 にします
    • *** Constraint : オブジェクトがアクティブになった時にコンポーネントを有効に、非アクティブになった時に無効にします
    • Camera : オブジェクトがアクティブになった時にコンポーネントを有効に、非アクティブになった時に無効にします
  • Invert : 動作を反転します(このオブジェクトがアクティブになった時に配列のコンポーネントを無効に、非アクティブになった時に有効にします)

ActiveRelay to Animator

  • Event Type : 連動させたい条件
    • Active : オブジェクトがアクティブになった時のみ
    • Inactive : オブジェクトが非アクティブになった時のみ
    • Active And Inactive : オブジェクトがアクティブになった時と非アクティブになった時
  • Animator : パラメーターをセットするAnimator
  • Trigger Name : 指定した名前のTrigger型にtrueをセットします
  • Bool Name : 指定した名前のBool型に Bool Value の値をセットします
  • Int Name : 指定した名前のInt型に Int Value の値をセットします
  • Float Name : 指定した名前のFloat型に Float Value の値をセットします

ActiveRelay to Effect

  • Audio Source For Active : このオブジェクトがアクティブになった時の操作対象の AudioSource
  • Audio Source State For Active : このオブジェクトがアクティブになった時に実行する操作内容
    • NoC hange : 何もしません。Sound For Active だけ使いたい時用
    • Play : 頭から再生します
    • Pause : 再生を中断します
    • Stop : 再生を停止します
  • Sound For Active : このオブジェクトがアクティブになった時に PlayOneShot() で再生される音声ファイル
  • Particle For Active : このオブジェクトがアクティブになった時の操作対象の ParticleSystem
  • Emission Module For Active : このオブジェクトがアクティブになった時に Emission モジュールの状態をどうするか
    • No Change : 何もしません。Emit For Active だけ使いたい時用
    • Enable : Emission モジュールを有効にします
    • Disable : Emission モジュールを無効にします
  • Emit For Active : オブジェクトがアクティブになった時に放出するパーティクルの数
  • Audio Source For Inactive : このオブジェクトが非アクティブになった時の操作対象の AudioSource
  • Audio Source State For Inactive : このオブジェクトが非アクティブになった時に実行する操作内容
    • NoC hange : 何もしません。Sound For Inactive だけ使いたい時用
    • Play : 頭から再生します
    • Pause : 再生を中断します
    • Stop : 再生を停止します
  • Sound For Inactive : このオブジェクトが非アクティブになった時に PlayOneShot() で再生される音声ファイル
  • Particle For Inactive : このオブジェクトが非アクティブになった時の操作対象の ParticleSystem
  • Emission Module For Inactive : このオブジェクトが非アクティブになった時に Emission モジュールの状態をどうするか
    • No Change : 何もしません。Emit For Inactive だけ使いたい時用
    • Enable : Emission モジュールを有効にします
    • Disable : Emission モジュールを無効にします
  • Emit For Inactive : オブジェクトが非アクティブになった時に放出するパーティクルの数

ActiveRelay to UdonBehaviour

  • Udon Behaviour For Active : オブジェクトがアクティブになった時に、配列にあるUdon Behaviour全てに対し SendCustomEvent( Custom Event Name For Active ) を実行します
  • Udon Behaviour For Inactive : オブジェクトが非アクティブになった時に、配列にあるUdon Behaviour全てに対し SendCustomEvent( Custom Event Name For Inactive ) を実行します

ActiveRelay to VRCComponent

  • Event Type : 連動させたい条件
    • Active And Inactive : オブジェクトがアクティブになった時と非アクティブになった時
    • Active : オブジェクトがアクティブになった時のみ
    • Inactive : オブジェクトが非アクティブになった時のみ
  • Avatar Pedestals : 配列にある VRC Avatar Pedestal 全てに対し、オブジェクトがアクティブになった時に ChangeAvatarOnUse を有効に、非アクティブになった時に無効にします
  • Pickups : 配列にある VRC Pickup 全てに対し、オブジェクトがアクティブになった時に pickupable を有効に、非アクティブになった時に無効にします
  • Stations : 配列にある VRC Station 全てに対し、オブジェクトがアクティブになった時に disableStationExit を有効に、非アクティブになった時に無効にします
  • Invert : 動作を反転します

ActiveRelay to ObjectSync

  • Event Type : 連動させたい条件
    • Active And Inactive : オブジェクトがアクティブになった時と非アクティブになった時
    • Active : オブジェクトがアクティブになった時のみ
    • Inactive : オブジェクトが非アクティブになった時のみ
  • VRC Object Syncs : この配列にセットした VRC Object Sync は、このオブジェクトのアクティブ(activeInHierarchy)が反転した時に以下の動作をします
  • Manual Object Syncs : この配列にセットした Manual Object Sync は、このオブジェクトのアクティブ(activeInHierarchy)が反転した時に以下の動作をします
  • Is Kinematic
    • NoChange : 何もしません
    • Normal : 配列にある全てに対し、オブジェクトがアクティブになった時に Is Kinematic を有効に、非アクティブになった時に無効にします。この動作は同期します
    • Invert : 配列にある全てに対し、オブジェクトがアクティブになった時に Is Kinematic を無効に、非アクティブになった時に有効にします。この動作は同期します
  • Use Gravity
    • NoChange : 何もしません
    • Normal : 配列にある全てに対し、オブジェクトがアクティブになった時に Use Gravity を有効に、非アクティブになった時に無効にします。この動作は同期します
    • Invert : 配列にある全てに対し、オブジェクトがアクティブになった時に Use Gravity を無効に、非アクティブになった時に有効にします。この動作は同期します
  • Respawn
    • NoChange : 何もしません
    • Normal : 配列にある全てに対し、オブジェクトがアクティブになった時に Respawn()を実行します。この動作は同期します
    • Invert : 配列にある全てに対し、オブジェクトが非アクティブになった時に Respawn()を実行します。この動作は同期します

[!WARNING] このコンポーネントは同期が絡むため、高頻度で切り替わらないよう、使い方に気を付けてください。

ActiveRelay by Interact

コライダーと共にアタッチすると、インタラクト(いわゆるUse判定)可能なオブジェクトになります。
インタラクトされる度に Action Type の内容を実行します。

[!IMPORTANT] アクティブ切り替え操作に同期が不要な場合(ローカルギミックとして使いたい場合)は、 Synchronization MethodNone にしてください。
逆にアクティブ切り替え操作を同期したい場合は、 Synchronization MethodManual にしてください。
Local Only のチェックも外す必要があります。
image

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Local Only : チェックすると、Synchronization Methodが同期モードでもアクティブ状態の同期を反映しなくなります

ActiveRelay by Pickup

VRCPickup コンポーネントと共にアタッチすると、 Event Type で選択したピックアップ系イベントをトリガーに Action Type の内容を実行します。

[!IMPORTANT] アクティブ切り替え操作に同期が不要な場合(ローカルギミックとして使いたい場合)は、 Synchronization MethodNone にしてください。
逆にアクティブ切り替え操作を同期したい場合は、 Synchronization MethodManual にしてください。
Local Only のチェックも外す必要があります。
(ピックアップオブジェクトに VRC ObjectSync を付けて位置同期もする場合は、 Synchronization MethodContinuous にしてください。)
image

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Event Type : 実行条件
    • Pickup : ピックアップした時
    • PickupUseDown : ピックアップ中にUse(マウスなら左クリック、VRコントローラーならトリガー)した時
    • PickupUseUp : ピックアップ中のUse(マウスなら左クリック、VRコントローラーならトリガー)をやめた時
    • Drop : ピックアップをやめた時
  • Local Only : チェックすると、Synchronization Methodが同期モードでもアクティブ状態の同期を反映しなくなります

ActiveRelay by Station

VRCStation コンポーネントと共にアタッチすると、 Event Type で選択したStation系(いわゆるSit)イベントをトリガーに Action Type の内容を実行します。

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Event Type : 実行条件
    • Player Enter And Exit : 自分含む誰かがStationに座ったか降りた時
    • Player Enter : 自分含む誰かがStationに座った時
    • Player Exit : 自分含む誰かがStationから降りた時
    • LocalPlayer Enter And Exit : 自身がStationに座ったか降りた時
    • LocalPlayer Enter : 自身がStationに座った時
    • LocalPlayer Exit : 自身がStationから降りた時

ActiveRelay by PlayerRespawn

プレイヤーがリスポーンした時に Action Type の内容を実行します。

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Local Only : チェックすると、自分自身がリスポーンした時だけ実行します。デフォルト有効

ActiveRelay by PlayerCollision

Is Trigger チェックを外したコライダーと共にアタッチすると、プレイヤーが Event Type で選択したコリジョンイベントを発生させた時に Action Type の内容を実行します。
このオブジェクトはプレイヤーと衝突できるレイヤーになっている必要があります。

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Event Type : 実行条件
    • Player Enter And Exit : 自分含む誰かがコライダーに接触したか接触状態から離れた時
    • Player Enter : 自分含む誰かがコライダーに接触した時
    • Player Exit : 自分含む誰かがコライダー接触状態から離れた時
    • LocalPlayer Enter And Exit : 自身がコライダーに接触したか接触状態から離れた時
    • LocalPlayer Enter : 自身がコライダーに接触した時
    • LocalPlayer Exit : 自身がコライダー接触状態から離れた時

ActiveRelay by PlayerTrigger

Is Trigger チェックを入れたコライダーと共にアタッチすると、プレイヤーが Event Type で選択したトリガーイベントを発生させた時に Action Type の内容を実行します。
このオブジェクトはプレイヤーと衝突できるレイヤーになっている必要があります。

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Event Type : 実行条件
    • Player Enter And Exit : 自分含む誰かがコライダーに侵入したか侵入状態から離れた時
    • Player Enter : 自分含む誰かがコライダーに侵入した時
    • Player Exit : 自分含む誰かがコライダー侵入状態から離れた時
    • LocalPlayer Enter And Exit : 自身がコライダーに侵入したか侵入状態から離れた時
    • LocalPlayer Enter : 自身がコライダーに侵入した時
    • LocalPlayer Exit : 自身がコライダー侵入状態から離れた時

ActiveRelay by Visible

Renderer系(Mesh Renderer, SkinnedMesh Renderer, Sprite Renderer, etc...)コンポーネントと共にアタッチすると、そのレンダラー(メッシュ)が視界内/外になった時に Action Type の内容を実行します。
視界内かどうかは、メッシュのBoundsとカメラの視錐台範囲によって判断されます。

  • Game Objects : この配列にセットしたゲームオブジェクトに対して Action Type の内容を実行します
  • Action Type : オブジェクトのアクティブ操作の実行内容
    • Toggle Active : そのオブジェクトのアクティブ状態を反転します
    • Activate : オブジェクトをアクティブにします
    • Inactivate : オブジェクトを非アクティブにします
  • Event Type : 実行条件
    • Became Visible And Invisible : レンダラーが視界内になったか視界外になった時
    • Became Visible : レンダラーが視界内になった時
    • Became Invisible : レンダラーが視界外になった時