您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
60 行
1.5 KiB
60 行
1.5 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// Simple implementation of a MonoBehaviour that is able to request a sound being played by the <c>AudioManager</c>.
|
|
/// It fires an event on an <c>AudioCueEventSO</c> which acts as a channel, that the <c>AudioManager</c> will pick up and play.
|
|
/// </summary>
|
|
public class AudioCue : MonoBehaviour
|
|
{
|
|
[Header("Sound definition")]
|
|
[SerializeField] private AudioCueSO _audioCue = default;
|
|
[SerializeField] private bool _playOnStart = false;
|
|
|
|
[Header("Configuration")]
|
|
[SerializeField] private AudioCueEventChannelSO _audioCueEventChannel = default;
|
|
[SerializeField] private AudioConfigurationSO _audioConfiguration = default;
|
|
|
|
private AudioCueKey controlKey = AudioCueKey.Invalid;
|
|
|
|
private void Start()
|
|
{
|
|
if (_playOnStart)
|
|
StartCoroutine(PlayDelayed());
|
|
}
|
|
|
|
private IEnumerator PlayDelayed()
|
|
{
|
|
yield return new WaitForSeconds(.1f);
|
|
|
|
PlayAudioCue();
|
|
}
|
|
|
|
public void PlayAudioCue()
|
|
{
|
|
controlKey = _audioCueEventChannel.RaisePlayEvent(_audioCue, _audioConfiguration, transform.position);
|
|
}
|
|
|
|
public void StopAudioCue()
|
|
{
|
|
if (controlKey != AudioCueKey.Invalid)
|
|
{
|
|
if (!_audioCueEventChannel.RaiseStopEvent(controlKey))
|
|
{
|
|
controlKey = AudioCueKey.Invalid;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void FinishAudioCue()
|
|
{
|
|
if (controlKey != AudioCueKey.Invalid)
|
|
{
|
|
if (!_audioCueEventChannel.RaiseFinishEvent(controlKey))
|
|
{
|
|
controlKey = AudioCueKey.Invalid;
|
|
}
|
|
}
|
|
}
|
|
}
|