public LoadSoundInfo(int serialId, SoundGroup soundGroup, PlaySoundParams playSoundParams, object userData) { SerialId = serialId; SoundGroup = soundGroup; PlaySoundParams = playSoundParams; UserData = userData; }
/// <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); }
/// <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); }
/// <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); }