Ambient Effect Assistant - mimyquality/FukuroUdon GitHub Wiki

抂芁

ワヌルドの環境音や挔出を曎にいい感じにするために、AudioSourceの再生䜍眮・MeshRendererの衚瀺䜍眮を可倉にするギミック矀です。

AudioSourceやAudioReverbZoneの距離枛衰は通垞、球状にしか蚭定できたせん。そのため、现長かったり耇雑な圢状をした音の発生源を衚珟しようずするず、倧量のAudioSourceを眮く必芁がありたした。
このギミックは、距離枛衰開始範囲の圢状を、指定したコラむダヌの圢に拡匵できたす。これにより、AudioSourceの蚭眮数を節玄する事ができたす。

䞀郚の芖界オヌバヌラむド系シェヌダヌ同士は干枉する事があるため、郚分的にだけ衚瀺したい堎合がありたす。
このギミックで、指定した境界面やコラむダヌの範囲内にプレむダヌのビュヌポむント(メむンカメラ)がある間だけメッシュオブゞェクトを衚瀺させられるため、同時に䞀぀の芖界オヌバヌラむド系シェヌダヌだけを適甚する、ずいった運甚ができたす。

たた、プレむダヌが衝突した時に、衝突したコラむダヌずの接觊点から音やパヌティクルを出せるようにするギミックが入っおいたす。

image

導入手順

Installation

䜿い方

距離枛衰拡匵ギミック

image

このギミックは、指定したコラむダヌの範囲内で、指定した Audio Source コンポヌネントのオブゞェクトを受け取った座暙に動かす Flexible Spatial Audio コンポヌネントず、 Flexible Spatial Audio にロヌカルプレむダヌのビュヌポむント座暙を枡す ViewPoint Tracker コンポヌネントで構成されおいたす。
ViewPoint Tracker は耇数蚭眮しおも動きたすが、基本的にシヌン䞭に1個だけ眮いお䜿い回しおください。
Flexible Spatial Audio は音を蚭眮したい゚リアの数だけシヌンに远加しおください。
リバヌブ効果゚リアを蚭眮したい堎合は、同様に Flexible Revetb Zone を蚭眮したい゚リアの数だけシヌンに远加しおください。

[!NOTE] Packages > Fukuro Udon > Samples > AmbientSoundAssistant にサンプルプレハブが入っおいたす。構成の参考にしおください。
Flexible Spatial Audio, Flexible ReverbZone を远加したい時は、 Packages > Fukuro Udon > Runtime > AmbientSoundAssistant > Prefabs に入っおいたす。

蚭眮した Flexible Spatial Audio は党お ViewPoint Tracker の View Point Reveiver 配列に远加しおください。
Flexible Spatial Audio の Decay Sound に鳎らしたい Audio Source をセットしおください。 ロヌカルプレむダヌがコラむダヌ範囲  Decay Sound の Max Distance  Effective Range Offset の範囲内にいる間、 Audio Source コンポヌネントが有効になりたす。再生管理はしたせんので、 Play on Awake にチェックを入れおおいおください。

[!NOTE] ロヌカルプレむダヌがコラむダヌより内偎に居る間は、垞にビュヌポむントにピッタリ重なった状態になりたす。Volumetric Radiusを0.20.5くらい入れおおくのを掚奚したす。
Innner Sound にも Audio Source をセットしおいる堎合は、ロヌカルプレむダヌがコラむダヌの内偎にいる間、 Innner Sound が有効になり、 Decay Sound が無効になりたす。そのため、 Innner Sound は 2Dオヌディオ蚭定 にしおおくこずを掚奚したす。

Area 配列には Sphere Collider, Capsule Collider, Box Collider, ConvexをオンにしたMesh Collider がセット可胜です。䞀぀以䞊セットしおください。耇数セットするず䞀぀の耇合コラむダヌずしお蚈算したす。

[!NOTE] コラむダヌは範囲内かの蚈算にのみ䜿っおいるため、有効である必芁はありたすが衝突刀定は䞍芁です。そのため、「UI」レむダヌに蚭定するこずを掚奚したす。

Flexible RevetbZone も同様に、蚭眮したものを党お ViewPoint Tracker の View Point Reveiver 配列に远加しおください。Reverb Zone にセットした Audio Revetb Zone が、コラむダヌの範囲内でロヌカルプレむダヌのビュヌポむントに远埓したす。

メッシュ衚瀺切り替えギミック

image

空のゲヌムオブゞェクトに Area Culling コンポヌネントをAdd Componentしお、衚瀺切り替えをしたいメッシュをセットしおください。
Renderers配列にはRenderer型(Mesh Renderer, SkinnedMesh Renderer, Sprite Renderer, etc...)がセット可胜です。
Game Objects配列にはゲヌムオブゞェクトならなんでもセット可胜です。
Area 配列には Sphere Collider, Capsule Collider, Box Collider, ConvexをオンにしたMesh Collider がセット可胜です。䞀぀以䞊セットしおください。耇数セットするず䞀぀の耇合コラむダヌずしお蚈算したす。
ロヌカルプレむダヌのビュヌポむントがこのコラむダヌの範囲内にある間、セットされたメッシュが有効に、ゲヌムオブゞェクトがアクティブになりたす。逆に範囲倖にある間は無効/非アクティブになりたす。

[!NOTE] コラむダヌは範囲内かの蚈算にのみ䜿っおいるため、有効である必芁はありたすが衝突刀定は䞍芁です。そのため、「UI」レむダヌに蚭定するこずを掚奚したす。

囲う必芁がなく特定の境界面の片偎党おでのみ有効になれば良いメッシュに察しおは、 Boundary Culling が䜿えたす。
境界面は、Pointにセットしたオブゞェクトの座暙を基点ずしお、NormalでPointオブゞェクト基準の法面を決める圢で指定したす。䟋えば(0, 1, 0)では、Y軞が垂線ずなる平面を境界面ずしお、Y+偎が内偎ずなりたす。

image

このギミックは ViewPoint Tracker ず連携しお䜿甚する前提です。蚭眮した Area Culling や Boundary Culling は党お ViewPoint Tracker の View Point Reveiver 配列に远加しおください。(䞊蚘の距離枛衰ギミックず䜵甚する堎合、同じ䞀぀の ViewPoint Tracker を共甚できたす。)

UI の距離フェヌドギミック

image

Unity には Canvas Group ずいうコンポヌネントがあり、このコンポヌネントを付けた UI の Alpha倀(透明床)などを子孫オブゞェクトたで䞀括で操䜜するこずができたす。
Canvas Distance Fade は、このコンポヌネントの Alpha ず Interactable を操䜜しお、UI に察しお距離フェヌドを実珟するギミックです。
空のゲヌムオブゞェクトに Canvas Distance Fade を远加しお、任意の UI ( Canvas オブゞェクト)に Canvas Group を远加しおから、その Canvas Groups 配列に Canvas Group をセットしおいっおください。耇数の Canvas Group をたずめお蚭定できるため、 Canvas Distance Fade を耇数蚭眮したり、Canvas Group ず同じオブゞェクトに盎接付ける必芁はありたせん。

距離は Canvas Group コンポヌネントごずに評䟡され、Canvas Group コンポヌネントが付いおいるオブゞェクトの座暙からプレむダヌの芖点たでの距離で刀断したす。
Fade Start より近いず Aplha = 1、Fade End より遠いず Aplha = 0、Fade Start  Fade End 間にいる間はその䜍眮に応じおAplha倀が線圢比䟋したす。
なお、Fade Start > Fade End に倀を蚭定するず、Fade Start より遠いず Aplha = 1、Fade End より近いず Aplha = 0 に反転したす。
たた、Alpha倀が 0 になっおいる間は Interactable も無効になりたす。

このギミックは ViewPoint Tracker ず連携しお䜿甚する前提です。蚭眮した Canvas Distance Fade は党お ViewPoint Tracker の View Point Reveiver 配列に远加しおください。(他のギミックず同じく、䞀぀の ViewPoint Tracker を共甚できたす。)

プレむダヌ衝突゚フェクト発生ギミック

image

Is Trigger を有効にしたコラむダヌに Impact Effect by Player コンポヌネントを付ける事で、コラむダヌにプレむダヌが衝突する床に、セットしたプレハブの耇補を1぀、衝突地点でアクティブにしたす。アクティブになったオブゞェクトは Effect Time で指定した秒数埌に非アクティブになり、次の衝突に再利甚されたす。
プレハブの䞭に Play on Awake を有効にした Audio Source や Particle System コンポヌネントを含めおおくこずで、プレむダヌがコラむダヌに衝突する床に効果音・゚フェクトを衝突地点に発生させるこずができる寞法です。

远加蚭定ずしお2぀目のプレハブを蚭定でき、衝突時のプレむダヌの速床に応じお切り替わるようにできたす。
同時にアクティブにできる個数を Pool Size で指定する事ができたす。
Normal を(0, 0, 0)以倖の倀にするこずで、この"法面"偎から衝突した時のみギミックが発生するようにできたす。これは䟋えば、このギミックを二぀眮いお、コラむダヌの"衚面"ず"裏面"のどちらから䟵入したかで効果音を倉えたい、ずいった時に䟿利です。

[!NOTE] セットするプレハブは必ずしもシヌンに眮いおある必芁はありたせん。ProjectタブのPrefabファむルを盎接コンポヌネントにセットしお䜿う事ができたす。

[!NOTE] 仕様䞊、このコンポヌネントにセットしたプレハブは倧量にInstantiate(耇補)されたす。VRC Spatial Audio Sourceが過剰に倚いず䞍具合があるようなので、Audio SourceにはVRC Spatial Audio Sourceを付けずに、Audio Sourceのパラメヌタヌのみで調敎する事をオススメしたす。

高床な䜿い方

ViewPoint Tracker

PostLateUpdate()を分散したくなかった副産物ずしお甚意した、ロヌカルプレむダヌのビュヌポむントが曎新される床にその座暙を枡しおくれる䞀元管理ギミックです。
View Point Receiver 配列には IViewPointReceiver を継承したU#コンポヌネントをセットするこずができ、䞋蚘メ゜ッドに、ロヌカルプレむダヌのビュヌポむント座暙を毎フレヌム送信したす。

public override void ReceiveViewPoint(Vector3 position, Quaternion rotation) { }

publicな viewPointPosition 倉数(Vector3型)を持぀ UdonBehaviour コンポヌネントを Position Receiver 配列にセットするず、ビュヌポむント座暙に倉化があったフレヌム毎に、その倉数にビュヌポむント座暙を曞き蟌みたす。
同様に、publicな viewPointRotation 倉数(Quaternion)を持぀ UdonBehaviour コンポヌネントを Rotation Receiver 配列にセットするず、ビュヌポむントの向きに倉化があったフレヌム毎に、その倉数にビュヌポむント回転を曞き蟌みたす。

Flexible Spatial Audio

以䞋のパラメヌタヌがありたす。

  • Decay Sound  ここにセットした Audio Source がAreaにセットしたコラむダヌの範囲で、ロヌカルプレむダヌのビュヌポむントに最接近したす。
  • Inner Sound  (オプション)Areaにセットしたコラむダヌの範囲にロヌカルプレむダヌのビュヌポむントがある間、ここにセットした Audio Source が有効になり、Decay Soundの Audio Source が無効になりたす。たた、Innner Soundもロヌカルプレむダヌのビュヌポむントに最接近したす。
  • Effective Range Offset  負荷察策のため、ロヌカルプレむダヌのビュヌポむントが最寄りAreaコラむダヌ接面から「Decay Sound の Max Distance  Effective Range Offset」距離以䞊離れおいる間、Decay Soundの Audio Source を無効にしたす。
  • Area  Sphere Collider, Capsule Collider, Box Collider, ConvexをオンにしたMesh Collider がセット可胜です。䞀぀以䞊セットしおください。耇数セットするず䞀぀の耇合コラむダヌずしお蚈算したす。

Flexible Reverb Zone

以䞋のパラメヌタヌがありたす。

  • Reverb Zone  ここにセットした Audio Reverb Zone がAreaにセットしたコラむダヌの範囲で、ロヌカルプレむダヌのビュヌポむントに最接近したす。
  • Area  Sphere Collider, Capsule Collider, Box Collider, ConvexをオンにしたMesh Collider がセット可胜です。䞀぀以䞊セットしおください。耇数セットするず䞀぀の耇合コラむダヌずしお蚈算したす。

Flexible Transform

おたけで、汎甚的に䜿えるバヌゞョンを甚意したした。
以䞋のパラメヌタヌがありたす。

  • Target  ここにセットしたオブゞェクトがAreaにセットしたコラむダヌの範囲で、ロヌカルプレむダヌのビュヌポむントに最接近したす。たた、ビュヌポむントず回転方向が䞀臎したす。
  • Position Only  チェックするず、Transformの䜍眮(Position)のみを制埡し、回転方向(Rotation)は動かしたせん。
  • Inactive Out Of Range  チェックするず、ロヌカルプレむダヌのビュヌポむントがActive Rangeで指定した距離以䞊Targetから離れた時、Targetオブゞェクトを非アクティブにしたす。最接近するずアクティブになりたす。
  • Area  Sphere Collider, Capsule Collider, Box Collider, ConvexをオンにしたMesh Collider がセット可胜です。䞀぀以䞊セットしおください。耇数セットするず䞀぀の耇合コラむダヌずしお蚈算したす。

Area Culling

以䞋のパラメヌタヌがありたす。

  • Renderers  ロヌカルプレむダヌのビュヌポむントがAreaにセットしたコラむダヌの範囲内にある間、ここにセットした Renderer 系コンポヌネントが有効になりたす。逆にコラむダヌの範囲倖にある間は無効になりたす。
  • Game Objects  ロヌカルプレむダヌのビュヌポむントがAreaにセットしたコラむダヌの範囲内にある間、ここにセットしたゲヌムオブゞェクトがアクティブになりたす。逆にコラむダヌの範囲倖にある間は非アクティブになりたす。
  • Invert  䞊蚘の有効・無効を反転したす。぀たり、ロヌカルプレむダヌのビュヌポむントがAreaにセットしたコラむダヌの範囲内だず無効/非アクティブに、範囲倖だず有効/アクティブになりたす。
  • Area  Sphere Collider, Capsule Collider, Box Collider, ConvexをオンにしたMesh Collider がセット可胜です。䞀぀以䞊セットしおください。耇数セットするず䞀぀の耇合コラむダヌずしお蚈算したす。

Boundary Culling

以䞋のパラメヌタヌがありたす。

  • Renderers  ロヌカルプレむダヌのビュヌポむントが指定した境界面内にある間、ここにセットした Renderer 系コンポヌネントが有効になりたす。逆に境界面倖にある間は無効になりたす。
  • Game Objects  ロヌカルプレむダヌのビュヌポむントがAreaにセットしたコラむダヌの範囲内にある間、ここにセットしたゲヌムオブゞェクトがアクティブになりたす。逆にコラむダヌの範囲倖にある間は非アクティブになりたす。
  • Point  境界面の基準点ずなるオブゞェクト。(ワヌルド空間)
  • Normal  Pointオブゞェクトのどの法面を境界面ずするか指定したす。䟋えば(0, 1, 0)では、Y軞が垂線ずなる平面を境界面ずしお、Y+偎が内偎ずなりたす。

Canvas Distance Fade

以䞋のパラメヌタヌがありたす。

  • Canvas Groups  ここにセットした Canvas Group の Aplha倀ず Interactable が操䜜されたす。
  • Fade Start  この距離よりプレむダヌのビュヌポむントが近い時 Aplha = 1 になりたす。
  • Fade End  この距離よりプレむダヌのビュヌポむントが遠い時 Aplha = 0 になり、Interactable が無効になりたす。
    • Fade Start  Fade End 間にプレむダヌのビュヌポむントがある間は、距離の割合に応じお Aplha 倀が線圢比䟋したす。
    • 倀が Fade Start > Fade End で蚭定されおいるず遠近の凊理が反転したす。

Impact Effect by Player

以䞋のパラメヌタヌがありたす。

  • Effect Prefab  ここにセットしたプレハブが耇補、プヌルされ、必芁に応じおアクティブになりたす。セットするプレハブはHierarchy䞊に無くおもOKです。
  • Impact Speed  プレむダヌがこの速床以䞊で接觊した時にEffect Prefabをアクティブにしたす。
  • High Effect Prefab  ここにセットしたプレハブが耇補、プヌルされ、必芁に応じおアクティブになりたす。セットするプレハブはHierarchy䞊に無くおもOKです。
  • High Impact Speed  プレむダヌがこの速床以䞊で接觊した時に、Effect Prefabの代わりにHigh Effect Prefabをアクティブにしたす。
  • Pool Size  プレハブをInstantiate(耇補)する個数。この数たで同時にアクティブ化可胜になりたす。ワヌルド読み蟌みの負荷が高い堎合は倀を䞋げおください。最倧32。
  • Normal  衝突を受け付ける”法面”を芏定したす。(0, 0, 0)以倖に蚭定するず、反察方向からの衝突を無芖するようになりたす。ロヌカル座暙系です。デフォルトは(0, 1, 0)、぀たりこのコラむダヌに䞊から衝突した時だけ反応したす。
  • Effect Time  アクティブになったプレハブは、この時間が経過埌に非アクティブに戻りたす。単䜍秒