64 lines
2.1 KiB
C#
64 lines
2.1 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace FMODUnity
|
|
{
|
|
[Serializable]
|
|
public class EmitterRef
|
|
{
|
|
public StudioEventEmitter Target;
|
|
public ParamRef[] Params;
|
|
}
|
|
|
|
[AddComponentMenu("FMOD Studio/FMOD Studio Parameter Trigger")]
|
|
public class StudioParameterTrigger: EventHandler
|
|
{
|
|
public EmitterRef[] Emitters;
|
|
public EmitterGameEvent TriggerEvent;
|
|
|
|
private void Awake()
|
|
{
|
|
for (int i = 0; i < Emitters.Length; i++)
|
|
{
|
|
var emitterRef = Emitters[i];
|
|
if (emitterRef.Target != null && !emitterRef.Target.EventReference.IsNull)
|
|
{
|
|
FMOD.Studio.EventDescription eventDesc = RuntimeManager.GetEventDescription(emitterRef.Target.EventReference);
|
|
if (eventDesc.isValid())
|
|
{
|
|
for (int j = 0; j < Emitters[i].Params.Length; j++)
|
|
{
|
|
FMOD.Studio.PARAMETER_DESCRIPTION param;
|
|
eventDesc.getParameterDescriptionByName(emitterRef.Params[j].Name, out param);
|
|
emitterRef.Params[j].ID = param.id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void HandleGameEvent(EmitterGameEvent gameEvent)
|
|
{
|
|
if (TriggerEvent == gameEvent)
|
|
{
|
|
TriggerParameters();
|
|
}
|
|
}
|
|
|
|
public void TriggerParameters()
|
|
{
|
|
for (int i = 0; i < Emitters.Length; i++)
|
|
{
|
|
var emitterRef = Emitters[i];
|
|
if (emitterRef.Target != null && emitterRef.Target.EventInstance.isValid())
|
|
{
|
|
for (int j = 0; j < Emitters[i].Params.Length; j++)
|
|
{
|
|
emitterRef.Target.EventInstance.setParameterByID(Emitters[i].Params[j].ID, Emitters[i].Params[j].Value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|