重构音频模块 1. 高频、大量音频反复调用时,单帧 CPU 开销与 GC 最优 2. AudioClip / AudioSource 的加载、缓存淘汰、卸载形成完整闭环,避免线性遍历 3. AudioSource 对象池 + 播放请求 struct 全部池化覆盖所有分配点 4. 支持3D环境音并具备距离衰减、遮挡等空间属性 5. 新增音频类型(BGM/SFX/Voice/Ambient) 6. 可调式监控Debug信息 及时跟踪音频缓存 处理 句柄状态
122 lines
5.4 KiB
C#
122 lines
5.4 KiB
C#
using AlicizaX.Audio.Runtime;
|
|
using UnityEditor;
|
|
|
|
namespace AlicizaX.Audio.Editor
|
|
{
|
|
[CustomEditor(typeof(AudioEmitter))]
|
|
internal sealed class AudioEmitterInspector : UnityEditor.Editor
|
|
{
|
|
private SerializedProperty _audioType;
|
|
private SerializedProperty _clipMode;
|
|
private SerializedProperty _address;
|
|
private SerializedProperty _clip;
|
|
private SerializedProperty _playOnEnable;
|
|
private SerializedProperty _loop;
|
|
private SerializedProperty _volume;
|
|
private SerializedProperty _async;
|
|
private SerializedProperty _cacheClip;
|
|
private SerializedProperty _stopWithFadeout;
|
|
private SerializedProperty _followSelf;
|
|
private SerializedProperty _followOffset;
|
|
private SerializedProperty _spatialBlend;
|
|
private SerializedProperty _rolloffMode;
|
|
private SerializedProperty _minDistance;
|
|
private SerializedProperty _maxDistance;
|
|
private SerializedProperty _useTriggerRange;
|
|
private SerializedProperty _triggerRange;
|
|
private SerializedProperty _triggerHysteresis;
|
|
private SerializedProperty _drawGizmos;
|
|
private SerializedProperty _drawOnlyWhenSelected;
|
|
private SerializedProperty _triggerColor;
|
|
private SerializedProperty _minDistanceColor;
|
|
private SerializedProperty _maxDistanceColor;
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
serializedObject.Update();
|
|
|
|
EditorGUILayout.LabelField("Playback", EditorStyles.boldLabel);
|
|
EditorGUILayout.PropertyField(_audioType);
|
|
EditorGUILayout.PropertyField(_clipMode);
|
|
if (_clipMode.enumValueIndex == 1)
|
|
{
|
|
EditorGUILayout.PropertyField(_clip);
|
|
}
|
|
else
|
|
{
|
|
EditorGUILayout.PropertyField(_address);
|
|
EditorGUILayout.PropertyField(_async);
|
|
EditorGUILayout.PropertyField(_cacheClip);
|
|
}
|
|
|
|
EditorGUILayout.PropertyField(_playOnEnable);
|
|
EditorGUILayout.PropertyField(_loop);
|
|
EditorGUILayout.PropertyField(_volume);
|
|
EditorGUILayout.PropertyField(_stopWithFadeout);
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Spatial", EditorStyles.boldLabel);
|
|
EditorGUILayout.PropertyField(_followSelf);
|
|
EditorGUILayout.PropertyField(_followOffset);
|
|
EditorGUILayout.PropertyField(_spatialBlend);
|
|
EditorGUILayout.PropertyField(_rolloffMode);
|
|
EditorGUILayout.PropertyField(_minDistance);
|
|
EditorGUILayout.PropertyField(_maxDistance);
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Trigger", EditorStyles.boldLabel);
|
|
EditorGUILayout.PropertyField(_useTriggerRange);
|
|
if (_useTriggerRange.boolValue)
|
|
{
|
|
EditorGUILayout.PropertyField(_triggerRange);
|
|
EditorGUILayout.PropertyField(_triggerHysteresis);
|
|
}
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Gizmos", EditorStyles.boldLabel);
|
|
EditorGUILayout.PropertyField(_drawGizmos);
|
|
if (_drawGizmos.boolValue)
|
|
{
|
|
EditorGUILayout.PropertyField(_drawOnlyWhenSelected);
|
|
if (_useTriggerRange.boolValue)
|
|
{
|
|
EditorGUILayout.PropertyField(_triggerColor);
|
|
}
|
|
|
|
EditorGUILayout.PropertyField(_minDistanceColor);
|
|
EditorGUILayout.PropertyField(_maxDistanceColor);
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
_audioType = serializedObject.FindProperty("m_AudioType");
|
|
_clipMode = serializedObject.FindProperty("m_ClipMode");
|
|
_address = serializedObject.FindProperty("m_Address");
|
|
_clip = serializedObject.FindProperty("m_Clip");
|
|
_playOnEnable = serializedObject.FindProperty("m_PlayOnEnable");
|
|
_loop = serializedObject.FindProperty("m_Loop");
|
|
_volume = serializedObject.FindProperty("m_Volume");
|
|
_async = serializedObject.FindProperty("m_Async");
|
|
_cacheClip = serializedObject.FindProperty("m_CacheClip");
|
|
_stopWithFadeout = serializedObject.FindProperty("m_StopWithFadeout");
|
|
_followSelf = serializedObject.FindProperty("m_FollowSelf");
|
|
_followOffset = serializedObject.FindProperty("m_FollowOffset");
|
|
_spatialBlend = serializedObject.FindProperty("m_SpatialBlend");
|
|
_rolloffMode = serializedObject.FindProperty("m_RolloffMode");
|
|
_minDistance = serializedObject.FindProperty("m_MinDistance");
|
|
_maxDistance = serializedObject.FindProperty("m_MaxDistance");
|
|
_useTriggerRange = serializedObject.FindProperty("m_UseTriggerRange");
|
|
_triggerRange = serializedObject.FindProperty("m_TriggerRange");
|
|
_triggerHysteresis = serializedObject.FindProperty("m_TriggerHysteresis");
|
|
_drawGizmos = serializedObject.FindProperty("m_DrawGizmos");
|
|
_drawOnlyWhenSelected = serializedObject.FindProperty("m_DrawOnlyWhenSelected");
|
|
_triggerColor = serializedObject.FindProperty("m_TriggerColor");
|
|
_minDistanceColor = serializedObject.FindProperty("m_MinDistanceColor");
|
|
_maxDistanceColor = serializedObject.FindProperty("m_MaxDistanceColor");
|
|
}
|
|
}
|
|
}
|