Im building an adaptive ambience system wich I fairly simple I have 1 base ambience wich I always playing and different ambience add ons that are supposed to play when entering a room and are supposed to stop playing after exiting the room. I built a parameter to unmute the room add on if the parameter is in between 0.5 and 1. I tried using the given food parameter changer but those aren’t working ( trigger enter ) even after making my game object( the room) to a trigger and giving my player a collider. im now trying to solve it by making my own script. wich is kinda working. I can see that it’s changing a parameter in the console after entering and exiting the istrigger object but it doesnt seem to change the parameters in food. idk if they aren’t connected corectly or if its a code error or a Fmod issue. I will add the 2 scrypt codes of the parameter changer and the manager.
using FMOD.Studio;
using FMODUnity;
using UnityEngine;
///
/// Spielt ein dauerhaftes Background-Event und steuert die Raum-Atmosph�re �ber einen FMOD-Parameter.
/// - Hintergrund-Event wird einmal gestartet und bleibt aktiv.
/// - R�ume setzen beim Betreten/Verlassen den Parameter auf konfigurierte Werte.
///
public class BackgroundAudioManager : MonoBehaviour
{
\[Header("FMOD Background Event")\]
\[Tooltip("FMOD StudioEventEmitter, der das Hintergrund-Event abspielt (one-shot start, looping in FMOD).")\]
public StudioEventEmitter backgroundEmitter;
\[Header("Parameter-Steuerung")\]
\[Tooltip("Name des FMOD-Parameters, der die Raum-Atmosph�re steuert (z.B. \\"RoomType\\").")\]
public string roomParameterName = “RoomType”;
\[Tooltip("Standardwert, wenn kein Raum aktiv ist (z.B. Korridor/Neutral).")\]
\[Range(0f, 1f)\] public float defaultRoomValue = 0f;
\[Header("Debug")\]
public bool debugLogs = false;
private EventInstance _instance;
void Awake()
{
if (backgroundEmitter == null)
{
Debug.LogError(“[BackgroundAudioManager] Kein StudioEventEmitter zugewiesen.”);
return;
}
// Emitter starten (falls noch nicht aktiv)
backgroundEmitter.Play();
_instance = backgroundEmitter.EventInstance;
if (!_instance.isValid())
{
// Versuch erneut nach Play()
_instance = backgroundEmitter.EventInstance;
}
if (_instance.isValid())
{
// Parameter initial setzen
_instance.setParameterByName(roomParameterName, defaultRoomValue);
if (debugLogs) Debug.Log($“[BackgroundAudioManager] Init parameter {roomParameterName}={defaultRoomValue}”);
}
else
{
Debug.LogWarning(“[BackgroundAudioManager] EventInstance nicht valide. F�llt auf globalen Parameter zur�ck.”);
RuntimeManager.StudioSystem.setParameterByName(roomParameterName, defaultRoomValue);
}
}
///
/// Wird von Raum-Triggern gerufen, um den Parameter zu setzen.
///
public void SetRoomParameter(float value)
{
if (_instance.isValid())
{
_instance.setParameterByName(roomParameterName, value);
if (debugLogs) Debug.Log($“[BackgroundAudioManager] Set instance param {roomParameterName}={value}”);
}
else
{
RuntimeManager.StudioSystem.setParameterByName(roomParameterName, value);
if (debugLogs) Debug.Log($“[BackgroundAudioManager] Set global param {roomParameterName}={value}”);
}
}
///
/// Reset auf Standard, wenn kein Raum aktiv ist.
///
public void ResetToDefault()
{
SetRoomParameter(defaultRoomValue);
}
}
and the triggered script
using UnityEngine;
///
/// Legt einen Wert f�r den Background-Raum-Parameter fest, wenn der Spieler den Bereich betritt/verl�sst.
/// Mehrere solcher Trigger k�nnen dieselbe Background-Instanz bedienen.
///
[RequireComponent(typeof(Collider))]
public class RoomBackgroundTrigger : MonoBehaviour
{
\[Header("Manager")\]
\[Tooltip("Referenz zum BackgroundAudioManager im Level.")\]
public BackgroundAudioManager manager;
\[Header("Trigger Filter")\]
\[Tooltip("Tag, das den Spieler identifiziert.")\]
public string playerTag = “Player”;
\[Header("Raum-Parameter")\]
\[Tooltip("Wert f�r den Raumzustand beim Betreten.")\]
\[Range(0f, 1f)\] public float enterValue = 0.5f;
\[Tooltip("Beim Verlassen auf Standard zur�cksetzen.")\]
public bool resetOnExit = true;
private void Reset()
{
// Versuche, Manager automatisch zu finden
manager = FindObjectOfType();
var col = GetComponent();
col.isTrigger = true;
}
private void OnTriggerEnter(Collider other)
{
if (!other.CompareTag(playerTag) || manager == null) return;
manager.SetRoomParameter(enterValue);
}
private void OnTriggerExit(Collider other)
{
if (!other.CompareTag(playerTag) || manager == null) return;
if (resetOnExit) manager.ResetToDefault();
}
}
please and THANKYOUUU