【Audio】接口移入 phxh sdk
parent
2eb6005ddb
commit
708ed62756
|
|
@ -275,7 +275,7 @@ public class AudioManager: Singlenton<AudioManager>, IStart, IInitable, IUpdatab
|
|||
return _audioMgrObj.GetAudioByID(audioType, id);
|
||||
}
|
||||
|
||||
public AudioPlayer GetStoryAudioInst(AudioBase.AudioType audioType = AudioBase.AudioType.Sound)
|
||||
public AudioPlayer GetStoryAudioInst(PhxhSDK.AudioType audioType = PhxhSDK.AudioType.Sound)
|
||||
{
|
||||
return _audioMgrObj.GetStoryAudioInst(audioType);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@ using UnityEngine.Networking;
|
|||
|
||||
/// <summary>
|
||||
/// 音频播放器
|
||||
/// 实现 IAudioPlayer(核心功能)、IAudioSpatial(3D音效)、IAudioFade(淡入淡出)接口
|
||||
/// 继承 AudioBase(自动实现 IAudioPlayer)
|
||||
/// 实现 IAudioSpatial(3D音效)、IAudioFade(淡入淡出)接口
|
||||
/// </summary>
|
||||
public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
||||
public class AudioPlayer: AudioBase, IAudioSpatial, IAudioFade
|
||||
{
|
||||
private float _normalizeVolume = 1f;
|
||||
|
||||
|
|
@ -27,7 +28,7 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
|
||||
public bool IsSpeak => _isSpeak;
|
||||
|
||||
public float Volume => _audioSource.volume;
|
||||
public float Volume => _audioSource?.volume ?? 0f;
|
||||
|
||||
// 淡入淡出效果(使用独立的效果类)
|
||||
private AudioFadeEffect _fadeEffect;
|
||||
|
|
@ -35,25 +36,22 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
// 空间音效控制器(使用独立的控制器类)
|
||||
private AudioSpatialController _spatialController;
|
||||
|
||||
private bool _isPlayEnd
|
||||
/// <summary>
|
||||
/// 判断播放是否已结束
|
||||
/// </summary>
|
||||
private bool IsPlayEnd()
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!_audioSource || !_clip)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (_audioSource == null || _clip == null)
|
||||
return false;
|
||||
|
||||
if (_audioSource.isPlaying)
|
||||
return _audioSource.time > _clip.length;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
return _audioSource.isPlaying
|
||||
? _audioSource.time > _clip.length
|
||||
: true;
|
||||
}
|
||||
|
||||
#region Construct
|
||||
|
||||
public AudioPlayer(AudioType audioType, GameObject rootGo, GameObject posGo, AudioInfo audioInfo,
|
||||
public AudioPlayer(PhxhSDK.AudioType audioType, GameObject rootGo, GameObject posGo, AudioInfo audioInfo,
|
||||
bool loop = false, bool is3D = false)
|
||||
{
|
||||
this.audioType = audioType;
|
||||
|
|
@ -119,7 +117,7 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
|
||||
// 更新播放状态
|
||||
// 检查是否应该停止(播放结束或淡出完成)
|
||||
if (_isPlayEnd || shouldStop || playState == PlayState.Stopped)
|
||||
if (IsPlayEnd() || shouldStop || playState == PlayState.Stopped)
|
||||
{
|
||||
if (playState == PlayState.Loading)
|
||||
return;
|
||||
|
|
@ -146,9 +144,7 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
_fadeEffect.Stop(); // 停止任何淡入淡出效果
|
||||
targetVolume = 1f;
|
||||
_audioSource.Play();
|
||||
_playID = _GenPlayID();
|
||||
_playTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
||||
AudioManager.Instance.AudioMgrObj.Add2Playing(audioType, audioID, _isSpeak);
|
||||
UpdatePlayInfo(); // 使用统一的更新方法
|
||||
}
|
||||
|
||||
public void PlayWithFade(float volume = 1f)
|
||||
|
|
@ -164,7 +160,7 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
_fadeEffect.Stop(); // 停止淡入淡出效果
|
||||
AudioManager.Instance.AudioMgrObj.RemovePlaying(audioType, audioID);
|
||||
|
||||
if (_isPlayEnd)
|
||||
if (IsPlayEnd())
|
||||
{
|
||||
playState = PlayState.Stopped;
|
||||
return;
|
||||
|
|
@ -212,8 +208,8 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
// 根据音频类型和是否为语音选择对应的音量系数
|
||||
float typeVolume = audioType switch
|
||||
{
|
||||
AudioType.Music => settings.MusicVolume,
|
||||
AudioType.Sound => _isSpeak ? settings.SpeakVolume : settings.SoundVolume,
|
||||
PhxhSDK.AudioType.Music => settings.MusicVolume,
|
||||
PhxhSDK.AudioType.Sound => _isSpeak ? settings.SpeakVolume : settings.SoundVolume,
|
||||
_ => 1f
|
||||
};
|
||||
|
||||
|
|
@ -229,72 +225,91 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
targetVolume = 1f;
|
||||
_fadeEffect.Stop(); // 停止任何淡入淡出效果
|
||||
playState = PlayState.Playing;
|
||||
_playID = _GenPlayID();
|
||||
AudioManager.Instance.AudioMgrObj.Add2Playing(audioType, audioID, _isSpeak);
|
||||
UpdatePlayInfo(); // 使用统一的更新方法
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 异步加载并播放音频(不带淡入淡出)
|
||||
/// </summary>
|
||||
public void Play(string path)
|
||||
{
|
||||
playState = PlayState.Loading;
|
||||
PlayAsync(path);
|
||||
LoadAndPlayInternal(path, useFade: false);
|
||||
}
|
||||
|
||||
private async void PlayAsync(string path)
|
||||
/// <summary>
|
||||
/// 异步加载并播放音频(带淡入淡出)
|
||||
/// </summary>
|
||||
public void PlayWithFade(string path, float fadeInTime = 4f, float fadeOutTime = 4f)
|
||||
{
|
||||
playState = PlayState.Loading;
|
||||
LoadAndPlayInternal(path, useFade: true, fadeInTime, fadeOutTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 统一的异步加载和播放逻辑(消除重复代码)
|
||||
/// </summary>
|
||||
private async void LoadAndPlayInternal(string path, bool useFade, float fadeInTime = 4f, float fadeOutTime = 4f)
|
||||
{
|
||||
// 1. 异步加载音频资源
|
||||
_clip = await AssetManager.Instance.LoadAssetAsync<AudioClip>(path, null, true);
|
||||
if (_loadedAssetPaths.ContainsKey(path))
|
||||
{
|
||||
++_loadedAssetPaths[path];
|
||||
}
|
||||
else
|
||||
{
|
||||
_loadedAssetPaths.TryAdd(path, 1);
|
||||
}
|
||||
if (!_clip)
|
||||
|
||||
// 2. 跟踪已加载的资源(用于后续卸载)
|
||||
TrackLoadedAsset(path);
|
||||
|
||||
// 3. 加载失败处理
|
||||
if (_clip == null)
|
||||
{
|
||||
playState = PlayState.Stopped;
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. 设置AudioSource
|
||||
_audioSource.clip = _clip;
|
||||
|
||||
_fadeEffect.Stop(); // 停止任何淡入淡出效果
|
||||
targetVolume = 1f;
|
||||
|
||||
_playID = _GenPlayID();
|
||||
AudioManager.Instance.AudioMgrObj.Add2Playing(audioType, audioID, _isSpeak);
|
||||
_audioSource.Play();
|
||||
playState = PlayState.Playing;
|
||||
}
|
||||
|
||||
public async void PlayWithFade(string path, float fadeInTime = 4f, float fadeOutTime = 4f)
|
||||
{
|
||||
_clip = await AssetManager.Instance.LoadAssetAsync<AudioClip>(path, null, true);
|
||||
if (_loadedAssetPaths.ContainsKey(path))
|
||||
|
||||
// 5. 根据是否需要淡入淡出设置音量
|
||||
if (useFade)
|
||||
{
|
||||
++_loadedAssetPaths[path];
|
||||
// 淡入模式:从0音量开始,逐渐增加
|
||||
_fadeEffect.FadeInDuration = fadeInTime;
|
||||
_fadeEffect.FadeOutDuration = fadeOutTime;
|
||||
_fadeEffect.StartFadeIn();
|
||||
_audioSource.volume = 0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
_loadedAssetPaths.TryAdd(path, 1);
|
||||
// 正常模式:停止淡入淡出效果
|
||||
_fadeEffect.Stop();
|
||||
}
|
||||
if (!_clip)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_audioSource.clip = _clip;
|
||||
|
||||
// 设置淡入淡出时长并启动淡入
|
||||
_fadeEffect.FadeInDuration = fadeInTime;
|
||||
_fadeEffect.FadeOutDuration = fadeOutTime;
|
||||
_fadeEffect.StartFadeIn();
|
||||
|
||||
targetVolume = 1f;
|
||||
_audioSource.volume = 0f;
|
||||
|
||||
playState = PlayState.Playing;
|
||||
_playID = _GenPlayID();
|
||||
AudioManager.Instance.AudioMgrObj.Add2Playing(audioType, audioID, _isSpeak);
|
||||
// 6. 开始播放
|
||||
_audioSource.Play();
|
||||
playState = PlayState.Playing;
|
||||
|
||||
// 7. 更新播放信息并通知Manager
|
||||
UpdatePlayInfo();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 跟踪已加载的资源(用于引用计数)
|
||||
/// </summary>
|
||||
private void TrackLoadedAsset(string path)
|
||||
{
|
||||
if (_loadedAssetPaths.ContainsKey(path))
|
||||
++_loadedAssetPaths[path];
|
||||
else
|
||||
_loadedAssetPaths.TryAdd(path, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新播放信息(生成PlayID、时间戳、通知Manager)
|
||||
/// </summary>
|
||||
private void UpdatePlayInfo()
|
||||
{
|
||||
_playID = _GenPlayID();
|
||||
_playTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
||||
AudioManager.Instance.AudioMgrObj.Add2Playing(audioType, audioID, _isSpeak);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -381,54 +396,24 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region Interface Implementation - Public直接实现
|
||||
#region Interface Implementation
|
||||
|
||||
// ========================================
|
||||
// 接口属性实现(IAudioPlayer)
|
||||
// IAudioPlayer 接口实现(已在 AudioBase 中实现)
|
||||
// AudioId, State, IsPlaying, Play/Pause/Resume/Stop 继承自 AudioBase
|
||||
// ========================================
|
||||
|
||||
/// <summary>
|
||||
/// IAudioPlayer.AudioId - 实例ID
|
||||
/// AudioBase.SetClip 抽象方法实现(IAudioPlayer 要求)
|
||||
/// </summary>
|
||||
public int AudioId => audioID;
|
||||
|
||||
/// <summary>
|
||||
/// IAudioPlayer.State - 播放状态
|
||||
/// </summary>
|
||||
public AudioBase.PlayState State => playState;
|
||||
|
||||
// 注:IsPlaying 继承自 AudioBase
|
||||
// 注:Pause/Resume/Stop 继承自 AudioBase
|
||||
|
||||
// ========================================
|
||||
// 接口方法实现(直接public,无需显式实现)
|
||||
// ========================================
|
||||
|
||||
/// <summary>
|
||||
/// IAudioPlayer.Play - 无参数播放(调用Play(1f))
|
||||
/// </summary>
|
||||
public void Play() => Play(1f);
|
||||
|
||||
/// <summary>
|
||||
/// IAudioPlayer.SetClip - 设置音频片段
|
||||
/// </summary>
|
||||
public void SetClip(AudioClip clip)
|
||||
public override void SetClip(AudioClip clip)
|
||||
{
|
||||
_clip = clip;
|
||||
if (_audioSource != null)
|
||||
_audioSource.clip = clip;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IAudioPlayer.SetVolume - 设置音量
|
||||
/// </summary>
|
||||
public void SetVolume(float volume) => SetTargetVolume(volume);
|
||||
|
||||
/// <summary>
|
||||
/// IAudioPlayer.SetLoop - 设置循环
|
||||
/// </summary>
|
||||
public void SetLoop(bool loop) => SetIsLoop(loop);
|
||||
|
||||
// 注:SetVolume 和 SetLoop 已在 AudioBase 中实现,无需重写
|
||||
// 注:IAudioSpatial 的 SetPosition 和 SetFollowTarget 已在 API 区域实现
|
||||
|
||||
// ========================================
|
||||
|
|
@ -452,9 +437,7 @@ public class AudioPlayer: AudioBase, IAudioPlayer, IAudioSpatial, IAudioFade
|
|||
playState = PlayState.Playing;
|
||||
_audioSource.volume = 0f;
|
||||
_audioSource.Play();
|
||||
_playID = _GenPlayID();
|
||||
_playTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
||||
AudioManager.Instance.AudioMgrObj.Add2Playing(audioType, audioID, _isSpeak);
|
||||
UpdatePlayInfo(); // 使用统一的更新方法
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
/// </summary>
|
||||
/// <param name="audioType"></param>
|
||||
/// <returns></returns>
|
||||
private AudioPlayer _GetUsableAudio(AudioBase.AudioType audioType, bool isLoop, bool isSpeak = false)
|
||||
private AudioPlayer _GetUsableAudio(PhxhSDK.AudioType audioType, bool isLoop, bool isSpeak = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -249,7 +249,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return null;
|
||||
}
|
||||
|
||||
private AudioPlayer _GetOldAudio(AudioBase.AudioType audioType, bool isLoop, bool isSpeak)
|
||||
private AudioPlayer _GetOldAudio(PhxhSDK.AudioType audioType, bool isLoop, bool isSpeak)
|
||||
{
|
||||
var playingList = _playingLDic[GetPlayType(audioType, isSpeak)];
|
||||
if (playingList.Count > 0)
|
||||
|
|
@ -260,19 +260,19 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return _CreateNewAudio(audioType, isLoop);
|
||||
}
|
||||
|
||||
private int _GetLimit(AudioBase.AudioType audioType, bool isSpeak)
|
||||
private int _GetLimit(PhxhSDK.AudioType audioType, bool isSpeak)
|
||||
{
|
||||
if (isSpeak)
|
||||
{
|
||||
return SpeakPoolLimit;
|
||||
}
|
||||
|
||||
if (audioType == AudioBase.AudioType.Music)
|
||||
if (audioType == PhxhSDK.AudioType.Music)
|
||||
{
|
||||
return MusicPoolLimit;
|
||||
}
|
||||
|
||||
if (audioType == AudioBase.AudioType.Sound)
|
||||
if (audioType == PhxhSDK.AudioType.Sound)
|
||||
{
|
||||
return SoundPoolLimit;
|
||||
}
|
||||
|
|
@ -280,15 +280,15 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return -1;
|
||||
}
|
||||
|
||||
private AudioPlayType GetPlayType(AudioBase.AudioType audioType, bool isSpeak)
|
||||
private AudioPlayType GetPlayType(PhxhSDK.AudioType audioType, bool isSpeak)
|
||||
{
|
||||
if (isSpeak)
|
||||
return AudioPlayType.Speak;
|
||||
if (audioType == AudioBase.AudioType.Music)
|
||||
if (audioType == PhxhSDK.AudioType.Music)
|
||||
return AudioPlayType.Music;
|
||||
return AudioPlayType.Sound;
|
||||
}
|
||||
private bool _CheckIsAudioLimited(AudioBase.AudioType audioType, bool isSpeak)
|
||||
private bool _CheckIsAudioLimited(PhxhSDK.AudioType audioType, bool isSpeak)
|
||||
{
|
||||
var limit = _GetLimit(audioType, isSpeak);
|
||||
var playingList = _playingLDic[GetPlayType(audioType, isSpeak)];
|
||||
|
|
@ -300,13 +300,13 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return false;
|
||||
}
|
||||
|
||||
private Dictionary<int, AudioPlayer> _GetAudioDic(AudioBase.AudioType audioType, bool isLoop)
|
||||
private Dictionary<int, AudioPlayer> _GetAudioDic(PhxhSDK.AudioType audioType, bool isLoop)
|
||||
{
|
||||
switch (audioType)
|
||||
{
|
||||
case AudioBase.AudioType.Music:
|
||||
case PhxhSDK.AudioType.Music:
|
||||
return isLoop? _musicAudioLoopDic : _musicAudioDic;
|
||||
case AudioBase.AudioType.Sound:
|
||||
case PhxhSDK.AudioType.Sound:
|
||||
return isLoop? _soundAudioLoopDic : _soundAudioDic;
|
||||
default:
|
||||
{
|
||||
|
|
@ -316,7 +316,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
}
|
||||
}
|
||||
|
||||
private AudioPlayer _GetFreeAudio(AudioBase.AudioType audioType, bool isLoop)
|
||||
private AudioPlayer _GetFreeAudio(PhxhSDK.AudioType audioType, bool isLoop)
|
||||
{
|
||||
var dic = _GetAudioDic(audioType, isLoop);
|
||||
if (dic != null)
|
||||
|
|
@ -334,7 +334,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return null;
|
||||
}
|
||||
|
||||
private AudioPlayer _CreateStoryAudio(GameObject posGo = null, AudioBase.AudioType audioType = AudioBase.AudioType.Sound)
|
||||
private AudioPlayer _CreateStoryAudio(GameObject posGo = null, PhxhSDK.AudioType audioType = PhxhSDK.AudioType.Sound)
|
||||
{
|
||||
var rootGo = new GameObject()
|
||||
{
|
||||
|
|
@ -348,7 +348,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return audio;
|
||||
}
|
||||
|
||||
private AudioPlayer _CreateNewAudio(AudioBase.AudioType audioType, bool isLoop)
|
||||
private AudioPlayer _CreateNewAudio(PhxhSDK.AudioType audioType, bool isLoop)
|
||||
{
|
||||
var rootGo = new GameObject()
|
||||
{
|
||||
|
|
@ -357,7 +357,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
rootGo.transform.SetParent(AudioRoot.transform);
|
||||
var audio = new AudioPlayer(audioType, rootGo, null, new AudioInfo(), false, false);
|
||||
|
||||
if (audioType == AudioBase.AudioType.Music)
|
||||
if (audioType == PhxhSDK.AudioType.Music)
|
||||
{
|
||||
rootGo.name = "music";
|
||||
rootGo.name += audio.audioID;
|
||||
|
|
@ -371,7 +371,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
_musicAudioDic.TryAdd(audio.audioID, audio);
|
||||
}
|
||||
}
|
||||
if (audioType == AudioBase.AudioType.Sound)
|
||||
if (audioType == PhxhSDK.AudioType.Sound)
|
||||
{
|
||||
rootGo.name = "Sound";
|
||||
rootGo.name += audio.audioID;
|
||||
|
|
@ -501,7 +501,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
var path = GetFullPath(key);
|
||||
if (!isFade)
|
||||
{
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Music, isLoop);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Music, isLoop);
|
||||
|
||||
//错误打印,保护
|
||||
if (audio == null)
|
||||
|
|
@ -514,7 +514,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
audio.SetNormalizeVolume(norVol);
|
||||
audio.SetFollowTarget(posObj);
|
||||
audio.SetIsSpeak(false);
|
||||
audio.SetTargetVolume(volume * norVol);
|
||||
audio.SetVolume(volume * norVol);
|
||||
audio.SetIsLoop(isLoop);
|
||||
audio.Play(path);
|
||||
audio.SetIsLoop(isLoop);
|
||||
|
|
@ -522,11 +522,11 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
}
|
||||
else
|
||||
{
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Music, isLoop);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Music, isLoop);
|
||||
audio.SetFollowTarget(posObj);
|
||||
audio.SetIsSpeak(false);
|
||||
audio.Stop();
|
||||
audio.SetTargetVolume(0);
|
||||
audio.SetVolume(0);
|
||||
audio.PlayWithFade(path, fadeTime);
|
||||
audio.SetIsLoop(isLoop);
|
||||
return audio.audioID;
|
||||
|
|
@ -535,7 +535,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
|
||||
private int _PlayMusic(string key, Vector3 pos, bool isLoop, bool isFade = false, float fadeTime = 0f, float volume = 1f)
|
||||
{
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Music, isLoop);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Music, isLoop);
|
||||
var path = GetFullPath(key);
|
||||
|
||||
//错误打印,保护
|
||||
|
|
@ -555,8 +555,8 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
audio.Stop();
|
||||
if (isFade)
|
||||
{
|
||||
audio.SetTargetVolume(0);
|
||||
audio.SetTargetVolume(volume);
|
||||
audio.SetVolume(0);
|
||||
audio.SetVolume(volume);
|
||||
audio.PlayWithFade(path, fadeTime);
|
||||
}
|
||||
else
|
||||
|
|
@ -595,7 +595,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
}
|
||||
}
|
||||
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Sound, isLoop);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Sound, isLoop);
|
||||
|
||||
//错误打印,保护
|
||||
if (audio == null)
|
||||
|
|
@ -619,12 +619,12 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
|
||||
if (isFade)
|
||||
{
|
||||
audio.SetTargetVolume(0);
|
||||
audio.SetVolume(0);
|
||||
audio.PlayWithFade(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio.SetTargetVolume(volume * norVol);
|
||||
audio.SetVolume(volume * norVol);
|
||||
audio.Play(path);
|
||||
}
|
||||
|
||||
|
|
@ -659,7 +659,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
}
|
||||
}
|
||||
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Sound, isLoop);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Sound, isLoop);
|
||||
|
||||
//错误打印,保护
|
||||
if (audio == null)
|
||||
|
|
@ -680,12 +680,12 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
audio.SetIs3D(true);
|
||||
if (isFade)
|
||||
{
|
||||
audio.SetTargetVolume(0);
|
||||
audio.SetVolume(0);
|
||||
audio.PlayWithFade(path, fadeTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio.SetTargetVolume(volume * norVol);
|
||||
audio.SetVolume(volume * norVol);
|
||||
audio.Play(path);
|
||||
}
|
||||
|
||||
|
|
@ -700,7 +700,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
return -1;
|
||||
}
|
||||
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Sound, false);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Sound, false);
|
||||
|
||||
//错误打印,保护
|
||||
if (audio == null)
|
||||
|
|
@ -718,12 +718,12 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
|
||||
if (isFade)
|
||||
{
|
||||
audio.SetTargetVolume(0);
|
||||
audio.SetVolume(0);
|
||||
audio.PlayWithFade(path, fadeTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio.SetTargetVolume(volume * norVol);
|
||||
audio.SetVolume(volume * norVol);
|
||||
audio.Play(path);
|
||||
}
|
||||
audio.SetIsLoop(false);
|
||||
|
|
@ -733,7 +733,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
|
||||
private int _PlaySpeakSound(string key, Vector3 pos, bool isFade = false, float fadeTime = 0f, float volume = 1f)
|
||||
{
|
||||
var audio = _GetUsableAudio(AudioBase.AudioType.Sound, false);
|
||||
var audio = _GetUsableAudio(PhxhSDK.AudioType.Sound, false);
|
||||
var path = GetFullPath(key, true);
|
||||
var norVol = _GetNormalizeVolume(key);
|
||||
audio.SetNormalizeVolume(norVol);
|
||||
|
|
@ -741,12 +741,12 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
audio.SetIsSpeak(true);
|
||||
if (isFade)
|
||||
{
|
||||
audio.SetTargetVolume(0);
|
||||
audio.SetVolume(0);
|
||||
audio.PlayWithFade(path, fadeTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio.SetTargetVolume(volume * norVol);
|
||||
audio.SetVolume(volume * norVol);
|
||||
audio.Play(path);
|
||||
}
|
||||
audio.SetIsLoop(false);
|
||||
|
|
@ -1062,7 +1062,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
}
|
||||
}
|
||||
|
||||
public AudioPlayer GetStoryAudioInst(AudioBase.AudioType audioType)
|
||||
public AudioPlayer GetStoryAudioInst(PhxhSDK.AudioType audioType)
|
||||
{
|
||||
return _CreateStoryAudio(null, audioType);
|
||||
}
|
||||
|
|
@ -1100,7 +1100,7 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
if (_allAudioDic.TryGetValue(audioID, out var audio))
|
||||
{
|
||||
var fullPath = GetFullPath(key);
|
||||
audio.SetTargetVolume(targetVolume);
|
||||
audio.SetVolume(targetVolume);
|
||||
audio.PlayWithFade(fullPath, fadeInTime);
|
||||
}
|
||||
}
|
||||
|
|
@ -1179,10 +1179,10 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
AudioPlayer.ReleaseLoadedAssets();
|
||||
}
|
||||
|
||||
public void Add2Playing(AudioBase.AudioType audioType, int id, bool isSpeak = false)
|
||||
public void Add2Playing(PhxhSDK.AudioType audioType, int id, bool isSpeak = false)
|
||||
{
|
||||
AudioPlayType type;
|
||||
if (audioType == AudioBase.AudioType.Music)
|
||||
if (audioType == PhxhSDK.AudioType.Music)
|
||||
{
|
||||
type = AudioPlayType.Music;
|
||||
}
|
||||
|
|
@ -1202,10 +1202,10 @@ public class AudioUnityManager: Singlenton<AudioUnityManager>, IStart, IInitable
|
|||
}
|
||||
}
|
||||
|
||||
public void RemovePlaying(AudioBase.AudioType audioType, int id, bool isSpeak = false)
|
||||
public void RemovePlaying(PhxhSDK.AudioType audioType, int id, bool isSpeak = false)
|
||||
{
|
||||
AudioPlayType type;
|
||||
if (audioType == AudioBase.AudioType.Music)
|
||||
if (audioType == PhxhSDK.AudioType.Music)
|
||||
{
|
||||
type = AudioPlayType.Music;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,115 +0,0 @@
|
|||
using UnityEngine;
|
||||
using PhxhSDK;
|
||||
|
||||
/// <summary>
|
||||
/// 音频播放器核心接口(简化版)
|
||||
/// 包含最常用的功能,约占80%的使用场景
|
||||
/// 职责:播放控制、状态查询、音量和循环设置
|
||||
/// </summary>
|
||||
public interface IAudioPlayer
|
||||
{
|
||||
#region Identity
|
||||
|
||||
/// <summary>
|
||||
/// AudioPlayer实例ID(标识对象池中的实例)
|
||||
/// </summary>
|
||||
int AudioId { get; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Playback Control
|
||||
|
||||
/// <summary>
|
||||
/// 播放音频(需要先SetClip)
|
||||
/// </summary>
|
||||
void Play();
|
||||
|
||||
/// <summary>
|
||||
/// 暂停播放
|
||||
/// </summary>
|
||||
void Pause();
|
||||
|
||||
/// <summary>
|
||||
/// 恢复播放
|
||||
/// </summary>
|
||||
void Resume();
|
||||
|
||||
/// <summary>
|
||||
/// 停止播放
|
||||
/// </summary>
|
||||
void Stop();
|
||||
|
||||
#endregion
|
||||
|
||||
#region State Queries
|
||||
|
||||
/// <summary>
|
||||
/// 是否正在播放
|
||||
/// </summary>
|
||||
bool IsPlaying { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前播放状态(用于switch判断)
|
||||
/// </summary>
|
||||
AudioBase.PlayState State { get; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Basic Configuration
|
||||
|
||||
/// <summary>
|
||||
/// 设置音频片段
|
||||
/// </summary>
|
||||
void SetClip(AudioClip clip);
|
||||
|
||||
/// <summary>
|
||||
/// 设置音量(0-1)
|
||||
/// </summary>
|
||||
void SetVolume(float volume);
|
||||
|
||||
/// <summary>
|
||||
/// 设置是否循环播放
|
||||
/// </summary>
|
||||
void SetLoop(bool loop);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 3D空间音效接口(可选功能)
|
||||
/// 用于需要空间定位的音效,如脚步声、枪声、环境音等
|
||||
/// </summary>
|
||||
public interface IAudioSpatial
|
||||
{
|
||||
/// <summary>
|
||||
/// 设置静态位置(自动启用3D)
|
||||
/// </summary>
|
||||
/// <param name="position">世界坐标位置</param>
|
||||
void SetPosition(Vector3 position);
|
||||
|
||||
/// <summary>
|
||||
/// 设置跟随目标(自动启用3D,传null停止跟随并禁用3D)
|
||||
/// </summary>
|
||||
/// <param name="target">跟随的GameObject</param>
|
||||
void SetFollowTarget(GameObject target);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 淡入淡出效果接口(可选功能)
|
||||
/// 用于需要平滑音量过渡的BGM、环境音等
|
||||
/// </summary>
|
||||
public interface IAudioFade
|
||||
{
|
||||
/// <summary>
|
||||
/// 淡入播放(会自动调用Play)
|
||||
/// </summary>
|
||||
/// <param name="duration">淡入时长(秒)</param>
|
||||
void PlayWithFadeIn(float duration);
|
||||
|
||||
/// <summary>
|
||||
/// 淡出停止(淡出完成后自动调用Stop)
|
||||
/// </summary>
|
||||
/// <param name="duration">淡出时长(秒)</param>
|
||||
void StopWithFadeOut(float duration);
|
||||
}
|
||||
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d389c62d6c7a4423c84546dcd2acfd6b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
ProjectNLD/Assets/Code/Scripts/GamePlay_Dll/GamePlay.dll (Stored with Git LFS)
BIN
ProjectNLD/Assets/Code/Scripts/GamePlay_Dll/GamePlay.dll (Stored with Git LFS)
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
Subproject commit 0ae2bb713f4d0548deee9c8e6b0111467b142b31
|
||||
Subproject commit 25e73caa9903fb5efe32a1ab1f6fcd5058679764
|
||||
Loading…
Reference in New Issue