多轮审查和修复
This commit is contained in:
52
Assets/Scripts/Audio/AudioEventSO.cs
Normal file
52
Assets/Scripts/Audio/AudioEventSO.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Audio;
|
||||
|
||||
namespace BaseGames.Audio
|
||||
{
|
||||
/// <summary>
|
||||
/// 音效事件 ScriptableObject。随机从 Clips 中选取一条播放,
|
||||
/// 并在 Volume / Pitch 区间内随机变化,增强音效多样性。
|
||||
/// </summary>
|
||||
[CreateAssetMenu(menuName = "Audio/AudioEvent")]
|
||||
public class AudioEventSO : ScriptableObject
|
||||
{
|
||||
[SerializeField] private AudioClip[] _clips;
|
||||
[SerializeField] private float _volumeMin = 0.9f;
|
||||
[SerializeField] private float _volumeMax = 1.0f;
|
||||
[SerializeField] private float _pitchMin = 0.95f;
|
||||
[SerializeField] private float _pitchMax = 1.05f;
|
||||
[SerializeField] private AudioMixerGroup _mixerGroup;
|
||||
|
||||
public AudioClip PickClip()
|
||||
{
|
||||
if (_clips == null || _clips.Length == 0) return null;
|
||||
return _clips[Random.Range(0, _clips.Length)];
|
||||
}
|
||||
|
||||
public float PickVolume() => Random.Range(_volumeMin, _volumeMax);
|
||||
|
||||
/// <summary>通过已有的 AudioSource 播放(适用于场景内固定位置音效)。</summary>
|
||||
public void Play(AudioSource source)
|
||||
{
|
||||
var clip = PickClip();
|
||||
if (clip == null || source == null) return;
|
||||
|
||||
source.clip = clip;
|
||||
source.volume = PickVolume();
|
||||
source.pitch = Random.Range(_pitchMin, _pitchMax);
|
||||
source.outputAudioMixerGroup = _mixerGroup;
|
||||
source.Play();
|
||||
}
|
||||
|
||||
/// <summary>通过 AudioSource.PlayOneShot 播放(不打断当前音效)。</summary>
|
||||
public void PlayOneShot(AudioSource source)
|
||||
{
|
||||
var clip = PickClip();
|
||||
if (clip == null || source == null) return;
|
||||
|
||||
source.outputAudioMixerGroup = _mixerGroup;
|
||||
source.pitch = Random.Range(_pitchMin, _pitchMax);
|
||||
source.PlayOneShot(clip, PickVolume());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user