added initial logic for the volume sliders
This commit is contained in:
@@ -110,8 +110,8 @@ public class CarDrivingRoutine : NetworkBehaviour
|
||||
{;
|
||||
if (other.GetComponentInParent<XRPlayerMirror>() == null) return;
|
||||
StartCoroutine(SmoothAdjustSpeed(0, 0, haltspeed)); // Smoothly halt in 1 second
|
||||
_tireSound.Stop();
|
||||
_stopSound.Play();
|
||||
//_tireSound.Stop();
|
||||
//_stopSound.Play();
|
||||
|
||||
AudioController.SetRPM(475);
|
||||
AudioController.PlayStopSound();
|
||||
@@ -122,8 +122,8 @@ public class CarDrivingRoutine : NetworkBehaviour
|
||||
{
|
||||
if (other.GetComponentInParent<XRPlayerMirror>() == null) return;
|
||||
StartCoroutine(SmoothAdjustSpeed(targetSpeed, targetRotationSpeed, haltspeed)); // Smoothly resume speed in 1 second
|
||||
_stopSound.Stop();
|
||||
_tireSound.Play();
|
||||
//_stopSound.Stop();
|
||||
//_tireSound.Play();
|
||||
|
||||
AudioController.SetRPM(1450);
|
||||
|
||||
|
||||
@@ -694,6 +694,7 @@ GameObject:
|
||||
- component: {fileID: 5331342604379454603}
|
||||
- component: {fileID: 1866864886208815}
|
||||
- component: {fileID: 6596783065788885589}
|
||||
- component: {fileID: 2714778319450199886}
|
||||
m_Layer: 5
|
||||
m_Name: Button
|
||||
m_TagString: Untagged
|
||||
@@ -820,6 +821,19 @@ MonoBehaviour:
|
||||
minValue: 0
|
||||
maxValue: 1
|
||||
slideareaOffsetMultiplier: 0.9
|
||||
--- !u!114 &2714778319450199886
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 829665037849699668}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ebe1ab889a9bed940995d4f47bc743ef, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
target: 2
|
||||
--- !u!1 &829695359259357513
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1465,6 +1479,7 @@ GameObject:
|
||||
- component: {fileID: 8149783172932780154}
|
||||
- component: {fileID: 7017778607745474649}
|
||||
- component: {fileID: 2708450618333126782}
|
||||
- component: {fileID: 6631830758558507073}
|
||||
m_Layer: 5
|
||||
m_Name: Button
|
||||
m_TagString: Untagged
|
||||
@@ -1591,6 +1606,19 @@ MonoBehaviour:
|
||||
minValue: 0
|
||||
maxValue: 1
|
||||
slideareaOffsetMultiplier: 0.9
|
||||
--- !u!114 &6631830758558507073
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1371473744446131600}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ebe1ab889a9bed940995d4f47bc743ef, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
target: 3
|
||||
--- !u!1 &1451224546718335135
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -4720,6 +4748,7 @@ GameObject:
|
||||
- component: {fileID: 3702309226689803558}
|
||||
- component: {fileID: 6841033323124689675}
|
||||
- component: {fileID: 6619092689880446435}
|
||||
- component: {fileID: 5831180822224317918}
|
||||
m_Layer: 5
|
||||
m_Name: Button
|
||||
m_TagString: Untagged
|
||||
@@ -4846,6 +4875,19 @@ MonoBehaviour:
|
||||
minValue: 0
|
||||
maxValue: 1
|
||||
slideareaOffsetMultiplier: 0.9
|
||||
--- !u!114 &5831180822224317918
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4757451720330744469}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ebe1ab889a9bed940995d4f47bc743ef, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
target: 0
|
||||
--- !u!1 &4815518641921404370
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -6575,6 +6617,7 @@ GameObject:
|
||||
- component: {fileID: 6392076320775958587}
|
||||
- component: {fileID: 8533604835838269795}
|
||||
- component: {fileID: 221982658494184569}
|
||||
- component: {fileID: 5486814484665002793}
|
||||
m_Layer: 5
|
||||
m_Name: Button
|
||||
m_TagString: Untagged
|
||||
@@ -6701,6 +6744,19 @@ MonoBehaviour:
|
||||
minValue: 0
|
||||
maxValue: 1
|
||||
slideareaOffsetMultiplier: 0.9
|
||||
--- !u!114 &5486814484665002793
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6661887633723237894}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ebe1ab889a9bed940995d4f47bc743ef, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
target: 1
|
||||
--- !u!1 &6802548334697868303
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -7952,6 +8008,7 @@ GameObject:
|
||||
- component: {fileID: 7710393525849749537}
|
||||
- component: {fileID: 9065530914213283711}
|
||||
- component: {fileID: 1194791598480229312}
|
||||
- component: {fileID: 7987415785522350763}
|
||||
m_Layer: 5
|
||||
m_Name: Button
|
||||
m_TagString: Untagged
|
||||
@@ -8078,6 +8135,19 @@ MonoBehaviour:
|
||||
minValue: 0
|
||||
maxValue: 1
|
||||
slideareaOffsetMultiplier: 0.9
|
||||
--- !u!114 &7987415785522350763
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8391231543345548430}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ebe1ab889a9bed940995d4f47bc743ef, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
target: 4
|
||||
--- !u!1 &8436046511908584062
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -34,6 +34,18 @@ public class AudioSliderDragHandler : MonoBehaviour, IBeginDragHandler, IDragHan
|
||||
UpdateSlider(eventData);
|
||||
}
|
||||
|
||||
public void SetHandlePosition(float normalizedValue)
|
||||
{
|
||||
float halfWidth = sliderBackground.rect.width * 0.5f;
|
||||
float limit = halfWidth * slideareaOffsetMultiplier;
|
||||
|
||||
float x = Mathf.Lerp(-limit, limit, normalizedValue);
|
||||
handleRect.localPosition = new Vector3(x, handleRect.localPosition.y, 0);
|
||||
|
||||
CurrentValue = normalizedValue;
|
||||
}
|
||||
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
UpdateSlider(eventData);
|
||||
@@ -46,6 +58,7 @@ public class AudioSliderDragHandler : MonoBehaviour, IBeginDragHandler, IDragHan
|
||||
}
|
||||
private void UpdateSlider(PointerEventData eventData)
|
||||
{
|
||||
|
||||
Debug.Log("UpDating Slider");
|
||||
Vector2 localPoint;
|
||||
RectTransformUtility.ScreenPointToLocalPointInRectangle(sliderBackground, eventData.position, eventData.pressEventCamera, out localPoint);
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class SliderToVCA : MonoBehaviour
|
||||
{
|
||||
public enum VCATarget
|
||||
{
|
||||
Master,
|
||||
Ambiences,
|
||||
Music,
|
||||
SFX,
|
||||
UI
|
||||
}
|
||||
|
||||
public VCATarget target;
|
||||
private AudioSliderDragHandler slider;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
slider = GetComponent<AudioSliderDragHandler>();
|
||||
}
|
||||
private void Start()
|
||||
{
|
||||
float initialValue = GetInitialValueFromAudioManager();
|
||||
slider.SetHandlePosition(initialValue); // we will add this function
|
||||
}
|
||||
|
||||
|
||||
private float GetInitialValueFromAudioManager()
|
||||
{
|
||||
switch (target)
|
||||
{
|
||||
case VCATarget.Master:
|
||||
return AudioManager.Instance.MasterVolume;
|
||||
case VCATarget.Ambiences:
|
||||
return AudioManager.Instance.AmbienceVolume;
|
||||
case VCATarget.Music:
|
||||
return AudioManager.Instance.MusicVolume;
|
||||
case VCATarget.SFX:
|
||||
return AudioManager.Instance.SFXVolume;
|
||||
case VCATarget.UI:
|
||||
return AudioManager.Instance.UIVolume;
|
||||
default:
|
||||
return 1f;
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// Constantly push slider value to the VCA
|
||||
ApplyVolume(slider.CurrentValue);
|
||||
Debug.Log("CurrentValue: " + slider.CurrentValue);
|
||||
}
|
||||
|
||||
private void ApplyVolume(float value)
|
||||
{
|
||||
switch (target)
|
||||
{
|
||||
case VCATarget.Master:
|
||||
AudioManager.Instance.SetMasterVCA(value);
|
||||
Debug.LogError(value);
|
||||
break;
|
||||
|
||||
case VCATarget.Ambiences:
|
||||
AudioManager.Instance.SetAmbientVCA(value);
|
||||
break;
|
||||
|
||||
case VCATarget.Music:
|
||||
AudioManager.Instance.SetMusicVCA(value);
|
||||
break;
|
||||
|
||||
case VCATarget.SFX:
|
||||
AudioManager.Instance.SetSFXVCA(value);
|
||||
break;
|
||||
|
||||
case VCATarget.UI:
|
||||
AudioManager.Instance.SetUIVCA(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ebe1ab889a9bed940995d4f47bc743ef
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -123,7 +123,6 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6021721823031538141}
|
||||
- component: {fileID: 4707456952479937532}
|
||||
m_Layer: 0
|
||||
m_Name: Portal
|
||||
m_TagString: Untagged
|
||||
@@ -150,147 +149,6 @@ Transform:
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: -1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!82 &4707456952479937532
|
||||
AudioSource:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4777591596180506993}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 8300000, guid: 4d691c6581003c94bbfe74b21deb8784, type: 3}
|
||||
m_PlayOnAwake: 1
|
||||
m_Volume: 0.8
|
||||
m_Pitch: 1
|
||||
Loop: 1
|
||||
Mute: 0
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
DopplerLevel: 1
|
||||
MinDistance: 1
|
||||
MaxDistance: 40
|
||||
Pan2D: 0
|
||||
rolloffMode: 2
|
||||
BypassEffects: 0
|
||||
BypassListenerEffects: 0
|
||||
BypassReverbZones: 0
|
||||
rolloffCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1.0028496
|
||||
inSlope: -40.015934
|
||||
outSlope: -40.015934
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.03449707
|
||||
value: 0.49145508
|
||||
inSlope: -10.0039835
|
||||
outSlope: -10.0039835
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.1
|
||||
value: 0.25
|
||||
inSlope: -2.5009959
|
||||
outSlope: -2.5009959
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.2
|
||||
value: 0.125
|
||||
inSlope: -0.62524897
|
||||
outSlope: -0.62524897
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.4348816
|
||||
value: 0.03970337
|
||||
inSlope: -0.15631224
|
||||
outSlope: -0.15631224
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.8
|
||||
value: 0
|
||||
inSlope: -0.03907806
|
||||
outSlope: -0.03907806
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.9980469
|
||||
value: 0
|
||||
inSlope: -0.02500997
|
||||
outSlope: -0.02500997
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
panLevelCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
spreadCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
reverbZoneMixCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
--- !u!1 &6014189720456933605
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -580,4 +438,4 @@ MonoBehaviour:
|
||||
PlayerOcclusionWidening: 1
|
||||
OcclusionLayer:
|
||||
serializedVersion: 2
|
||||
m_Bits: 2048
|
||||
m_Bits: 268438528
|
||||
|
||||
@@ -3,7 +3,16 @@ guid: 93a8cd8d2c83a1c4da7720c8a59fa706
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
defaultReferences:
|
||||
- m_InteractionManager: {instanceID: 0}
|
||||
- m_CustomReticle: {instanceID: 0}
|
||||
- m_AttachTransform: {instanceID: 0}
|
||||
- m_SecondaryAttachTransform: {instanceID: 0}
|
||||
- pullMin: {instanceID: 0}
|
||||
- pullMax: {instanceID: 0}
|
||||
- pullSounds: {fileID: 11400000, guid: 3c359cbce1e053d4f97c86ed8998405b, type: 2}
|
||||
- maxPullSounds: {fileID: 11400000, guid: a052046b894aee042a62bcc609a5afc7, type: 2}
|
||||
- stringRenderer: {instanceID: 0}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
fileFormatVersion: 2
|
||||
guid: 5c49785f8ddb436bb890408012c0da7d
|
||||
timeCreated: 1679237121
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- m_InteractionManager: {instanceID: 0}
|
||||
- m_AttachTransform: {instanceID: 0}
|
||||
- m_StartingSelectedInteractable: {instanceID: 0}
|
||||
- m_StartingTargetFilter: {instanceID: 0}
|
||||
- m_InteractableHoverMeshMaterial: {instanceID: 0}
|
||||
- m_InteractableCantHoverMeshMaterial: {instanceID: 0}
|
||||
- nockSounds: {fileID: 11400000, guid: 6d1727a79cb00364c8adb70e8396e743, type: 2}
|
||||
- releaseSounds: {fileID: 11400000, guid: 08fd7432471e0aa40b7a08f6d88b7281, type: 2}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
||||
@@ -115,4 +115,4 @@ MonoBehaviour:
|
||||
Params: []
|
||||
OverrideAttenuation: 0
|
||||
OverrideMinDistance: 1
|
||||
OverrideMaxDistance: 5
|
||||
OverrideMaxDistance: 8.8
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -11,26 +11,42 @@ using STOP_MODE = FMOD.Studio.STOP_MODE;
|
||||
|
||||
public class AudioManager : MonoBehaviour
|
||||
{
|
||||
|
||||
//VCAs (VCA buses) are mainly used for volume control
|
||||
//Regular routing buses routing are for the remaining logic, for example, within the FMOD itself to put FMOD events inside the Mixer (Mixer Routing).
|
||||
//Regular routing buses are used when we make some attenuation based on parameters and write the logic in code for Unity.
|
||||
|
||||
private VCA masterVCA;
|
||||
private VCA musicVCA;
|
||||
private VCA sfxVCA;
|
||||
private VCA uiVCA;
|
||||
private VCA ambienceVCA;
|
||||
|
||||
[SerializeField]
|
||||
[Header("Volume")]
|
||||
[Range(0, 1)]
|
||||
|
||||
public float MasterVolume = 1;
|
||||
public float MasterVolume = 0.5f;
|
||||
[Range(0, 1)]
|
||||
|
||||
public float MusicVolume = 1;
|
||||
public float MusicVolume = 0.5f;
|
||||
[Range(0, 1)]
|
||||
|
||||
public float SFXVolume = 1;
|
||||
public float AmbienceVolume = 0.5f;
|
||||
[Range(0, 1)]
|
||||
|
||||
public float UIVolume = 1;
|
||||
public float SFXVolume = 0.5f;
|
||||
[Range(0, 1)]
|
||||
|
||||
public float UIVolume = 0.5f;
|
||||
[Range(0, 1)]
|
||||
|
||||
private Bus masterBus;
|
||||
private Bus ambientBus;
|
||||
private Bus musicBus;
|
||||
private Bus sfxBus;
|
||||
private Bus reverbBus;
|
||||
private Bus uiBus;
|
||||
|
||||
const string sid = "00000000-0000-0000-0000-000000000000";
|
||||
static readonly Guid nullGuid = new Guid(sid);
|
||||
|
||||
@@ -86,15 +102,47 @@ public class AudioManager : MonoBehaviour
|
||||
_instance = instance;
|
||||
DontDestroyOnLoad(_instance.gameObject);
|
||||
_instance.eventInstances = new List<EventInstance>();
|
||||
|
||||
|
||||
_instance.masterBus = RuntimeManager.GetBus("bus:/");
|
||||
_instance.musicBus = RuntimeManager.GetBus("bus:/Music");
|
||||
_instance.ambientBus = RuntimeManager.GetBus("bus:/Ambiences");
|
||||
_instance.sfxBus = RuntimeManager.GetBus("bus:/SFX");
|
||||
_instance.uiBus = RuntimeManager.GetBus("bus:/UI");
|
||||
// _instance.MasterVolume = SaveManager.Instance.systemData.MasterVolume / 100f;
|
||||
// _instance.SFXVolume = SaveManager.Instance.systemData.SFXVolume / 100f;
|
||||
// _instance.MusicVolume = SaveManager.Instance.systemData.MusicVolume / 100f;
|
||||
// _instance.UIVolume = SaveManager.Instance.systemData.UIVolume / 100f;
|
||||
|
||||
|
||||
_instance.masterVCA = RuntimeManager.GetVCA("vca:/Master");
|
||||
_instance.musicVCA = RuntimeManager.GetVCA("vca:/Music");
|
||||
_instance.ambienceVCA = RuntimeManager.GetVCA("vca:/Ambiences");
|
||||
_instance.sfxVCA = RuntimeManager.GetVCA("vca:/SFX");
|
||||
_instance.uiVCA = RuntimeManager.GetVCA("vca:/UI");
|
||||
|
||||
}
|
||||
|
||||
public void SetMasterVCA(float value)
|
||||
{
|
||||
masterVCA.setVolume(value);
|
||||
}
|
||||
|
||||
public void SetMusicVCA(float value)
|
||||
{
|
||||
musicVCA.setVolume(value);
|
||||
}
|
||||
|
||||
public void SetAmbientVCA(float value)
|
||||
{
|
||||
ambienceVCA.setVolume(value);
|
||||
}
|
||||
|
||||
public void SetSFXVCA(float value)
|
||||
{
|
||||
sfxVCA.setVolume(value);
|
||||
}
|
||||
|
||||
public void SetUIVCA(float value)
|
||||
{
|
||||
|
||||
uiVCA.setVolume(value);
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
@@ -116,10 +164,19 @@ public class AudioManager : MonoBehaviour
|
||||
|
||||
private void Update()
|
||||
{
|
||||
musicBus.setVolume(MusicVolume);
|
||||
sfxBus.setVolume(SFXVolume);
|
||||
uiBus.setVolume(UIVolume);
|
||||
masterBus.setVolume(MasterVolume);
|
||||
//musicBus.setVolume(MusicVolume);
|
||||
//ambientBus.setVolume(AmbienceVolume);
|
||||
//sfxBus.setVolume(SFXVolume);
|
||||
//uiBus.setVolume(UIVolume);
|
||||
//masterBus.setVolume(MasterVolume);
|
||||
|
||||
|
||||
//VCA volumes
|
||||
masterVCA.setVolume(MasterVolume);
|
||||
ambienceVCA.setVolume(AmbienceVolume);
|
||||
musicVCA.setVolume(MusicVolume);
|
||||
sfxVCA.setVolume(SFXVolume);
|
||||
uiVCA.setVolume(UIVolume);
|
||||
}
|
||||
|
||||
public static bool IsEventReferenceValid(EventReference eventReference)
|
||||
@@ -190,17 +247,6 @@ public class AudioManager : MonoBehaviour
|
||||
return;
|
||||
}
|
||||
musicEventInstance = CreateInstance(musicEventReference);
|
||||
timelineInfo = new TimelineInfo();
|
||||
|
||||
// Explicitly create the delegate object and assign it to a member so it doesn't get freed
|
||||
// by the garbage collected while it's being used
|
||||
beatCallback = new EVENT_CALLBACK(BeatEventCallback);
|
||||
|
||||
// Pin the class that will store the data modified during the callback
|
||||
timelineHandle = GCHandle.Alloc(timelineInfo);
|
||||
// Pass the object through the userdata of the instance
|
||||
musicEventInstance.setUserData(GCHandle.ToIntPtr(timelineHandle));
|
||||
musicEventInstance.setCallback(beatCallback, EVENT_CALLBACK_TYPE.TIMELINE_BEAT | EVENT_CALLBACK_TYPE.TIMELINE_MARKER);
|
||||
}
|
||||
|
||||
public void SetMusicParameter(string parameter, float value)
|
||||
@@ -278,45 +324,6 @@ public class AudioManager : MonoBehaviour
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// taken from https://www.fmod.com/docs/2.02/unity/examples-timeline-callbacks.html
|
||||
[AOT.MonoPInvokeCallback(typeof(EVENT_CALLBACK))]
|
||||
static FMOD.RESULT BeatEventCallback(EVENT_CALLBACK_TYPE type, IntPtr instancePtr, IntPtr parameterPtr)
|
||||
{
|
||||
EventInstance instance = new(instancePtr);
|
||||
|
||||
// Retrieve the user data
|
||||
FMOD.RESULT result = instance.getUserData(out IntPtr timelineInfoPtr);
|
||||
if (result != FMOD.RESULT.OK)
|
||||
{
|
||||
Debug.LogError("Timeline Callback error: " + result);
|
||||
}
|
||||
else if (timelineInfoPtr != IntPtr.Zero)
|
||||
{
|
||||
// Get the object to store beat and marker details
|
||||
GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr);
|
||||
TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case EVENT_CALLBACK_TYPE.TIMELINE_MARKER:
|
||||
{
|
||||
var parameter = (TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(TIMELINE_MARKER_PROPERTIES));
|
||||
timelineInfo.LastMarker = parameter.name;
|
||||
OnNewBGMMarker?.Invoke(parameter.name);
|
||||
break;
|
||||
}
|
||||
case EVENT_CALLBACK_TYPE.DESTROYED:
|
||||
{
|
||||
// Now the event has been destroyed, unpin the timeline memory so it can be garbage collected
|
||||
timelineHandle.Free();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FMOD.RESULT.OK;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
CleanUp();
|
||||
|
||||
Reference in New Issue
Block a user