1
0
forked from cgvr/DeltaVR

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
2026-01-25 12:31:58 +02:00
428 changed files with 6576 additions and 225 deletions

View File

@@ -20,6 +20,7 @@ public class AudioManager : MonoBehaviour
private VCA sfxVCA;
private VCA uiVCA;
private VCA ambienceVCA;
private VCA voiceoverVCA;
[SerializeField]
[Header("Volume")]
@@ -40,6 +41,9 @@ public class AudioManager : MonoBehaviour
public float UIVolume = 0.5f;
[Range(0, 1)]
public float VoiceoverVolume = 0.5f;
[Range(0, 1)]
private Bus masterBus;
private Bus ambientBus;
private Bus musicBus;
@@ -63,6 +67,7 @@ public class AudioManager : MonoBehaviour
// public static AudioManager instance;
private static EventInstance musicEventInstance;
private EVENT_CALLBACK dialogueCallback;
// public access for the Singleton
// and lazy instantiation if not exists
@@ -108,18 +113,22 @@ public class AudioManager : MonoBehaviour
_instance.sfxBus = RuntimeManager.GetBus("bus:/SFX");
_instance.uiBus = RuntimeManager.GetBus("bus:/UI");
_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");
_instance.voiceoverVCA = RuntimeManager.GetVCA("vca:/Voiceovers");
_instance.masterVCA.setVolume(_instance.MasterVolume);
_instance.musicVCA.setVolume(_instance.MusicVolume);
_instance.ambienceVCA.setVolume(_instance.AmbienceVolume);
_instance.sfxVCA.setVolume(_instance.SFXVolume);
_instance.uiVCA.setVolume(_instance.UIVolume);
_instance.voiceoverVCA.setVolume(_instance.VoiceoverVolume);
_instance.dialogueCallback = new EVENT_CALLBACK(DialogueEventCallback);
}
@@ -152,6 +161,11 @@ public class AudioManager : MonoBehaviour
UIVolume = value;
uiVCA.setVolume(UIVolume);
}
public void SetVoiceoverVCA(float value)
{
VoiceoverVolume = value;
voiceoverVCA.setVolume(VoiceoverVolume);
}
private void Awake()
@@ -207,7 +221,7 @@ public class AudioManager : MonoBehaviour
EventInstance instance = RuntimeManager.CreateInstance(sound);
RuntimeManager.AttachInstanceToGameObject(instance, go);
instance.start();
// instance.release();
instance.release();
eventInstances.Add(instance);
return instance;
@@ -280,6 +294,106 @@ public class AudioManager : MonoBehaviour
//=====//
//=====//
public void PlayDialogue(string audioTableKey, GameObject emitter = null, float radioAmount = 0f)
{
var dialogueEvent = FMODEvents.Instance.VoiceoverAll;
if (dialogueEvent.IsNull)
{
Debug.LogWarning("Dialogue EventReference is not assigned!");
return;
}
EventInstance instance = RuntimeManager.CreateInstance(dialogueEvent);
if (emitter != null)
{
RuntimeManager.AttachInstanceToGameObject(instance, emitter);
instance.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(emitter.gameObject));
}
// Assign the FMOD parameter value (in this case: Continous type)
instance.setParameterByName("Radio", radioAmount);
// Pin the key for programmer sound callback
GCHandle stringHandle = GCHandle.Alloc(audioTableKey);
instance.setUserData(GCHandle.ToIntPtr(stringHandle));
// Set the callback for programmer sounds
instance.setCallback(dialogueCallback);
// Add occlusion if available on the emitter
if (emitter != null)
{
FirstPersonOcclusion occlusion = emitter.GetComponent<FirstPersonOcclusion>();
if (occlusion != null)
{
occlusion.InitialiseWithInstance(instance);
}
}
instance.start();
instance.release();
}
[AOT.MonoPInvokeCallback(typeof(EVENT_CALLBACK))]
private static FMOD.RESULT DialogueEventCallback(
EVENT_CALLBACK_TYPE type,
IntPtr instancePtr,
IntPtr parameterPtr)
{
EventInstance instance = new EventInstance(instancePtr);
instance.getUserData(out IntPtr stringPtr);
GCHandle stringHandle = GCHandle.FromIntPtr(stringPtr);
string key = stringHandle.Target as string;
switch (type)
{
case EVENT_CALLBACK_TYPE.CREATE_PROGRAMMER_SOUND:
{
var parameter = Marshal.PtrToStructure<PROGRAMMER_SOUND_PROPERTIES>(parameterPtr);
FMOD.Studio.SOUND_INFO soundInfo;
var result = RuntimeManager.StudioSystem.getSoundInfo(key, out soundInfo);
if (result != FMOD.RESULT.OK)
break;
FMOD.Sound sound;
RuntimeManager.CoreSystem.createSound(
soundInfo.name_or_data,
soundInfo.mode | FMOD.MODE.CREATECOMPRESSEDSAMPLE,
ref soundInfo.exinfo,
out sound
);
parameter.sound = sound.handle;
parameter.subsoundIndex = soundInfo.subsoundindex;
Marshal.StructureToPtr(parameter, parameterPtr, false);
break;
}
case EVENT_CALLBACK_TYPE.DESTROY_PROGRAMMER_SOUND:
{
var parameter = Marshal.PtrToStructure<PROGRAMMER_SOUND_PROPERTIES>(parameterPtr);
var sound = new FMOD.Sound(parameter.sound);
sound.release();
break;
}
case EVENT_CALLBACK_TYPE.DESTROYED:
{
// Release pinned string
stringHandle.Free();
break;
}
}
return FMOD.RESULT.OK;
}
public void StopSFX()
{
sfxBus.stopAllEvents(FMOD.Studio.STOP_MODE.IMMEDIATE);

View File

@@ -3,6 +3,9 @@ using UnityEngine;
public class FMODEvents : MonoBehaviour
{
[field: Header("Voiceline FMOD Programmer Event")]
[field: SerializeField] public EventReference VoiceoverAll { get; private set; }
[field: Header("Musical Ambiences")]
[field: SerializeField] public EventReference Kosmos { get; private set; }
@@ -19,6 +22,7 @@ public class FMODEvents : MonoBehaviour
[field: SerializeField] public EventReference BowGrab { get; private set; }
[field: SerializeField] public EventReference Spray { get; private set; }
[field: SerializeField] public EventReference Coughing { get; private set; }
//[field: SerializeField] public EventReference MyNewSoundEffect { get; private set; }
[field: Header("CAR")]
[field: SerializeField] public EventReference DoorOpen { get; private set; }

View File

@@ -0,0 +1,13 @@
using UnityEngine;
public class VoiceoverTester : MonoBehaviour
{
//[Tooltip("Audio Table key")]
public string dialogueKey = "Chef/Ulrich_Terribly_Sorry1";
private void OnTriggerEnter(Collider other)
{
AudioManager.Instance.PlayDialogue(dialogueKey, gameObject, 0f);
//Debug.LogError("Voiceline played (in 3D)");
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e77f6976a4505294797905646ff02a8a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: