Exemplo n.º 1
0
 public LoadSoundInfo(int serialId, SoundGroup soundGroup, PlaySoundParams playSoundParams, object userData)
 {
     SerialId        = serialId;
     SoundGroup      = soundGroup;
     PlaySoundParams = playSoundParams;
     UserData        = userData;
 }
Exemplo n.º 2
0
        /// <summary>
        /// 播放声音
        /// </summary>
        /// <param name="serialId">声音的序列编号</param>
        /// <param name="soundAsset">声音资源</param>
        /// <param name="playSoundParams">播放声音参数</param>
        /// <param name="errorCode">错误码</param>
        /// <returns>用于播放的声音代理</returns>
        public SoundAgent PlaySound(int serialId, object soundAsset, PlaySoundParams playSoundParams, out PlaySoundErrorCode?errorCode)
        {
            errorCode = null;
            SoundAgent candidateAgent = null;

            foreach (SoundAgent soundAgent in m_SoundAgents)
            {
                if (!soundAgent.IsPlaying)
                {
                    candidateAgent = soundAgent;
                    break;
                }

                //如果当前声音代理正在播放
                if (soundAgent.Priority < playSoundParams.Priority)
                {
                    if (candidateAgent == null || soundAgent.Priority < candidateAgent.Priority)
                    {
                        candidateAgent = soundAgent;
                    }
                }
                else if (!AvoidBeingReplacedBySamePriority && soundAgent.Priority == playSoundParams.Priority)
                {
                    if (candidateAgent == null || soundAgent.SetSoundAssetTime < candidateAgent.SetSoundAssetTime)
                    {
                        candidateAgent = soundAgent;
                    }
                }
            }

            if (candidateAgent == null)
            {
                errorCode = PlaySoundErrorCode.IgnoredDueToLowPriority;
                return(null);
            }

            if (!candidateAgent.SetSoundAsset(soundAsset))
            {
                errorCode = PlaySoundErrorCode.SetSoundAssetFailure;
                return(null);
            }

            candidateAgent.SerialId           = serialId;
            candidateAgent.Time               = playSoundParams.Time;
            candidateAgent.MuteInSoundGroup   = playSoundParams.MuteInSoundGroup;
            candidateAgent.Loop               = playSoundParams.Loop;
            candidateAgent.Priority           = playSoundParams.Priority;
            candidateAgent.VolumeInSoundGroup = playSoundParams.VolumeInSoundGroup;
            candidateAgent.Pitch              = playSoundParams.Pitch;
            candidateAgent.PanStereo          = playSoundParams.PanStereo;
            candidateAgent.SpatialBlend       = playSoundParams.SpatialBlend;
            candidateAgent.MaxDistance        = playSoundParams.MaxDistance;

            //播放声音
            candidateAgent.Play(playSoundParams.FadeInSeconds);

            return(candidateAgent);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 播放声音
        /// </summary>
        /// <param name="soundAssetName">声音资源名称</param>
        /// <param name="soundGroupName">声音组名称</param>
        /// <param name="playSoundParams">播放声音参数</param>
        /// <param name="bindingEntity">声音绑定的实体</param>
        /// <param name="worldPosition">声音所在的世界坐标</param>
        /// <param name="userData">用户自定义数据</param>
        /// <returns>声音的序列编号</returns>
        public int PlaySound(string soundAssetName, string soundGroupName, PlaySoundParams playSoundParams = null, Entity.Entity bindingEntity = null, Vector3 worldPosition = default(Vector3), object userData = null)
        {
            if (m_ResourceManager == null)
            {
                Debug.LogError("资源管理器为空,无法播放声音");
                return(-1);
            }

            if (m_SoundHelper == null)
            {
                Debug.LogError("声音辅助器为空,无法播放声音");
                return(-1);
            }

            if (playSoundParams == null)
            {
                playSoundParams = new PlaySoundParams();
            }

            PlaySoundInfo playSoundInfo = new PlaySoundInfo(bindingEntity, worldPosition, userData);

            int serialId = m_Serial++;
            PlaySoundErrorCode?errorCode    = null;
            string             errorMessage = null;
            //获取声音组
            SoundGroup soundGroup = GetSoundGroup(soundGroupName);

            if (soundGroup == null)
            {
                errorCode    = PlaySoundErrorCode.SoundGroupNotExist;
                errorMessage = string.Format("声音组:{0} 不存在.", soundGroupName);
            }
            else if (soundGroup.SoundAgentCount <= 0)
            {
                errorCode    = PlaySoundErrorCode.SoundGroupHasNoAgent;
                errorMessage = string.Format("声音组: {0} 没有声音代理", soundGroupName);
            }

            //错误码有值时
            if (errorCode.HasValue)
            {
                //派发播放声音失败事件
                PlaySoundFailureEventArgs e = ReferencePool.Acquire <PlaySoundFailureEventArgs>();
                m_EventManager.Fire(this, e.Fill(playSoundInfo, serialId, soundAssetName, soundGroupName, playSoundParams, errorCode.Value, errorMessage));
                Debug.LogError("播放声音失败:" + errorMessage);
                return(serialId);
            }

            //加载声音
            m_SoundsBeingLoaded.Add(serialId);
            m_ResourceManager.LoadAsset(soundAssetName, m_LoadAssetCallbacks, new LoadSoundInfo(serialId, soundGroup, playSoundParams, playSoundInfo));

            return(serialId);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 填充播放声音更新事件
        /// </summary>
        /// <returns>播放声音更新事件。</returns>
        public PlaySoundUpdateEventArgs Fill(object userData, int serialId, string soundAssetName, string soundGroupName, PlaySoundParams playSoundParams, float progress)
        {
            PlaySoundInfo playSoundInfo = (PlaySoundInfo)userData;

            SerialId        = serialId;
            SoundAssetName  = soundAssetName;
            SoundGroupName  = soundGroupName;
            PlaySoundParams = playSoundParams;
            BindingEntity   = playSoundInfo.BindingEntity;
            UserData        = playSoundInfo.UserData;

            Progress = progress;

            return(this);
        }
        /// <summary>
        /// 填充播放声音失败事件
        /// </summary>
        /// <returns>播放声音失败事件</returns>
        public PlaySoundFailureEventArgs Fill(object userData, int serialId, string soundAssetName, string soundGroupName, PlaySoundParams playSoundParams, PlaySoundErrorCode errorCode, string errorMessage)
        {
            PlaySoundInfo playSoundInfo = (PlaySoundInfo)userData;

            SerialId        = serialId;
            SoundAssetName  = soundAssetName;
            SoundGroupName  = soundGroupName;
            PlaySoundParams = playSoundParams;
            BindingEntity   = playSoundInfo.BindingEntity;
            UserData        = playSoundInfo.UserData;

            ErrorCode    = errorCode;
            ErrorMessage = errorMessage;

            return(this);
        }
        /// <summary>
        /// 填充播放声音时加载依赖资源事件
        /// </summary>
        /// <returns>播放声音时加载依赖资源事件</returns>
        public PlaySoundDependencyAssetEventArgs Fill(object userData, int serialId, string soundAssetName, string soundGroupName, PlaySoundParams playSoundParams, string dependencyAssetName, int loadedCount, int totalCount)
        {
            PlaySoundInfo playSoundInfo = (PlaySoundInfo)userData;

            SerialId        = serialId;
            SoundAssetName  = soundAssetName;
            SoundGroupName  = soundGroupName;
            PlaySoundParams = playSoundParams;
            BindingEntity   = playSoundInfo.BindingEntity;
            UserData        = playSoundInfo.UserData;

            DependencyAssetName = dependencyAssetName;
            LoadedCount         = loadedCount;
            TotalCount          = totalCount;

            return(this);
        }