77 lines
3.1 KiB
C#
77 lines
3.1 KiB
C#
|
|
|||
|
using UnityEngine;
|
|||
|
using VRC.SDK3.Components;
|
|||
|
using VRC.SDKBase;
|
|||
|
using VRC.Udon;
|
|||
|
|
|||
|
namespace UdonSharp.Examples.Utilities
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Sets the default voice and avatar audio settings for players when they enter the world
|
|||
|
/// See https://docs.vrchat.com/docs/player-audio for more detailed documentation
|
|||
|
/// </summary>
|
|||
|
[AddComponentMenu("Udon Sharp/Utilities/World Audio Settings")]
|
|||
|
[UdonBehaviourSyncMode(BehaviourSyncMode.NoVariableSync)]
|
|||
|
public class WorldAudioSettings : UdonSharpBehaviour
|
|||
|
{
|
|||
|
[Header("Player voice")]
|
|||
|
[Tooltip("Adjusts the player volume")]
|
|||
|
[Range(0f, 24f)]
|
|||
|
public float voiceGain = 15f;
|
|||
|
|
|||
|
[Tooltip("The end of the range for hearing a user's voice")]
|
|||
|
public float voiceFar = 25f;
|
|||
|
|
|||
|
[Tooltip("The near radius in meters where player audio starts to fall off, it is recommended to keep this at 0")]
|
|||
|
public float voiceNear = 0f;
|
|||
|
|
|||
|
[Tooltip("The volumetric radius for the player voice, this should be left at 0 unless you know what you're doing")]
|
|||
|
public float voiceVolumetricRadius = 0f;
|
|||
|
|
|||
|
[Tooltip("Disables the low-pass filter when players are far away")]
|
|||
|
public bool voiceDisableLowpass = false;
|
|||
|
|
|||
|
[Header("Avatar audio")]
|
|||
|
[Tooltip("The maximum gain allowed on avatar audio sources")]
|
|||
|
[Range(0f, 10f)]
|
|||
|
public float avatarMaxAudioGain = 10f;
|
|||
|
|
|||
|
[Tooltip("The maximum end of avatar audio range, a value of 0 will effectively mute avatar audio")]
|
|||
|
public float avatarMaxFarRadius = 40f;
|
|||
|
|
|||
|
// I don't think the docs are accurate for this one, they say it's for the maximum radius where you can start to hear an audio source
|
|||
|
[Tooltip("The maximum for the radius where avatar audio starts to fall off")]
|
|||
|
public float avatarMaxNearRadius = 40f;
|
|||
|
|
|||
|
[Tooltip("The max volumetric radius for avatar audio sources")]
|
|||
|
public float avatarMaxVolumetricRadius = 40f;
|
|||
|
|
|||
|
[Tooltip("Forces avatars to have spatialized audio")]
|
|||
|
public bool avatarForceSpacialization = false;
|
|||
|
|
|||
|
[Tooltip("Disables custom curves on avatar audio sources")]
|
|||
|
public bool avatarDisableCustomCurve = false;
|
|||
|
|
|||
|
public override void OnPlayerJoined(VRCPlayerApi player)
|
|||
|
{
|
|||
|
if (!player.isLocal)
|
|||
|
{
|
|||
|
// Player voice
|
|||
|
player.SetVoiceGain(voiceGain);
|
|||
|
player.SetVoiceDistanceFar(voiceFar);
|
|||
|
player.SetVoiceDistanceNear(voiceNear);
|
|||
|
player.SetVoiceVolumetricRadius(voiceVolumetricRadius);
|
|||
|
player.SetVoiceLowpass(!voiceDisableLowpass);
|
|||
|
|
|||
|
// Avatar audio
|
|||
|
player.SetAvatarAudioGain(avatarMaxAudioGain);
|
|||
|
player.SetAvatarAudioFarRadius(avatarMaxFarRadius);
|
|||
|
player.SetAvatarAudioNearRadius(avatarMaxNearRadius);
|
|||
|
player.SetAvatarAudioVolumetricRadius(avatarMaxVolumetricRadius);
|
|||
|
player.SetAvatarAudioForceSpatial(avatarForceSpacialization);
|
|||
|
player.SetAvatarAudioCustomCurve(!avatarDisableCustomCurve);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|