166 lines
4.2 KiB
C#
166 lines
4.2 KiB
C#
using UnityEngine;
|
||
|
||
namespace PhxhSDK
|
||
{
|
||
|
||
|
||
//音频播放对象的基类,需要兼容AudioClip和Criware
|
||
public abstract class AudioBase
|
||
{
|
||
protected static int _audioIDCount;
|
||
public static int GenAudioID()
|
||
{
|
||
return ++_audioIDCount;
|
||
}
|
||
|
||
public static void ReleaseAudioIDs()
|
||
{
|
||
_audioIDCount = 0;
|
||
}
|
||
public enum PlayState
|
||
{
|
||
Playing,
|
||
Stopped,
|
||
Paused,
|
||
Loading,
|
||
}
|
||
|
||
protected GameObject _rootGo;
|
||
|
||
public GameObject RootGo => _rootGo;
|
||
|
||
protected static int audioCounter = 0;
|
||
protected float volume;
|
||
protected float targetVolume;
|
||
protected float initTargetVolume;
|
||
protected float tempFadeSeconds;
|
||
protected float fadeInterpolater;
|
||
protected float onFadeStartVolume;
|
||
protected float spatialBlend;
|
||
public AudioType audioType;
|
||
protected Transform sourceTransform;
|
||
protected PlayState playState;
|
||
|
||
public int audioID { get; protected set; }
|
||
|
||
public bool loop { get; set; }
|
||
|
||
|
||
public bool persist { get; set; }
|
||
|
||
|
||
public float fadeInSeconds { get; set; }
|
||
|
||
|
||
public float fadeOutSeconds { get; set; }
|
||
|
||
public AudioBase()
|
||
{
|
||
audioID = GenAudioID();
|
||
}
|
||
|
||
public void GenNewID()
|
||
{
|
||
audioID = GenAudioID();
|
||
}
|
||
|
||
public bool IsPlaying
|
||
{
|
||
get => playState == PlayState.Playing;
|
||
}
|
||
|
||
public bool IsPaused
|
||
{
|
||
get => playState == PlayState.Paused;
|
||
}
|
||
|
||
public bool IsStopped
|
||
{
|
||
get => playState == PlayState.Stopped;
|
||
}
|
||
|
||
public bool IsLoading
|
||
{
|
||
get => playState == PlayState.Loading;
|
||
}
|
||
|
||
public bool activated { get; protected set; }
|
||
|
||
public enum AudioType
|
||
{
|
||
Music,
|
||
Sound,
|
||
}
|
||
|
||
//创建一个Source组件用以播放音频
|
||
public virtual void CreateSource()
|
||
{}
|
||
|
||
//设置音高
|
||
public virtual void SetPitch()
|
||
{}
|
||
|
||
//播放
|
||
public void Play()
|
||
{
|
||
Play(initTargetVolume);
|
||
}
|
||
|
||
public virtual void Play(string CueName, bool loop = false)
|
||
{
|
||
|
||
}
|
||
|
||
public abstract void Play(float volume);
|
||
|
||
//终止
|
||
public void Stop()
|
||
{
|
||
fadeInterpolater = 0f;
|
||
onFadeStartVolume = volume;
|
||
targetVolume = 0f;
|
||
|
||
playState = PlayState.Stopped;
|
||
}
|
||
|
||
//暂停
|
||
public abstract void Pause();
|
||
|
||
//继续播放
|
||
public abstract void Resume();
|
||
|
||
//设置音量
|
||
public void SetVolume(float volume, float fadeSeconds = -1.0f)
|
||
{
|
||
if (fadeSeconds > 0.0f)
|
||
{
|
||
SetVolume(volume, fadeSeconds, this.volume);
|
||
}
|
||
else if (volume > targetVolume)
|
||
{
|
||
SetVolume(volume, fadeOutSeconds, this.volume);
|
||
}
|
||
else
|
||
{
|
||
SetVolume(volume, fadeInSeconds, this.volume);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Sets the audio volume
|
||
/// </summary>
|
||
/// <param name="volume">The target volume</param>
|
||
/// <param name="fadeSeconds">How many seconds it needs for the audio to fade in/out to reach target volume. If passed, it will override the Audio's fade in/out seconds, but only for this transition</param>
|
||
/// <param name="startVolume">Immediately set the volume to this value before beginning the fade. If not passed, the Audio will start fading from the current volume towards the target volume</param>
|
||
public void SetVolume(float volume, float fadeSeconds, float startVolume)
|
||
{
|
||
targetVolume = Mathf.Clamp01(volume);
|
||
fadeInterpolater = 0;
|
||
onFadeStartVolume = startVolume;
|
||
tempFadeSeconds = fadeSeconds;
|
||
}
|
||
|
||
//刷新函数,需要子类去实现
|
||
public abstract void Update();
|
||
}
|
||
} |