39 lines
1.4 KiB
C#
39 lines
1.4 KiB
C#
|
using System;
|
||
|
using System.Reflection;
|
||
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace AlicizaX.UI.Extension.Editor.Editor.Editor_Handlers
|
||
|
{
|
||
|
public static class ExtensionHelper
|
||
|
{
|
||
|
public static void PreviewAudioClip(AudioClip clip)
|
||
|
{
|
||
|
if (clip == null) return;
|
||
|
|
||
|
// 停止当前播放的所有预览音频
|
||
|
Assembly audioUtilAssembly = typeof(AudioImporter).Assembly;
|
||
|
Type audioUtilType = audioUtilAssembly.GetType("UnityEditor.AudioUtil");
|
||
|
MethodInfo stopMethod = audioUtilType.GetMethod("StopAllPreviewClips",
|
||
|
BindingFlags.Static | BindingFlags.Public);
|
||
|
stopMethod.Invoke(null, null);
|
||
|
|
||
|
// 播放音频
|
||
|
MethodInfo playMethod = audioUtilType.GetMethod("PlayPreviewClip",
|
||
|
BindingFlags.Static | BindingFlags.Public,
|
||
|
null,
|
||
|
new System.Type[] { typeof(AudioClip), typeof(int), typeof(bool) },
|
||
|
null);
|
||
|
playMethod.Invoke(null, new object[] { clip, 0, false });
|
||
|
|
||
|
// 设置播放进度(可选)
|
||
|
MethodInfo setTimeMethod = audioUtilType.GetMethod("SetPreviewClipSamplePosition",
|
||
|
BindingFlags.Static | BindingFlags.Public,
|
||
|
null,
|
||
|
new System.Type[] { typeof(AudioClip), typeof(int) },
|
||
|
null);
|
||
|
setTimeMethod.Invoke(null, new object[] { clip, 0 });
|
||
|
}
|
||
|
}
|
||
|
}
|