//确定下 3D 音效 衰减属性; void DecideSpreadProp(AudioSource source, Sound3DData soundData) { if (soundData.SoundLv == 0) //默认的 衰减属性 级别; { source.minDistance = 1f; source.maxDistance = 18f; } if (soundData.SoundLv == 1) // 级别 1 ; { source.minDistance = 1f; source.maxDistance = 21f; } if (soundData.SoundLv == 2) // 级别 2 ; { source.minDistance = 1f; source.maxDistance = 22f; } if (soundData.SoundLv == 3) // 级别 3 ; { source.minDistance = 1f; source.maxDistance = 23f; } //最后 再数据 匹配一次; (如有 设定的 有效数据的 话;) if (soundData.SoundMinDist > 0) { source.minDistance = soundData.SoundMinDist; } if (soundData.SoundMaxDist > 0) { source.maxDistance = soundData.SoundMaxDist; } }
void Play3DAudioClip(string audioname, AudioClip clip, Transform transfPosi, Vector3 position, float volume, bool isLoop, int soundTp, Sound3DData soundData) { if (clip == null) { return; } //已经有了的话; if (transfPosi.Find(audioname) != null) { if (isLoop) { //循环中的话, 不做处理; return; } else { // 不循环的话, 接着新增,往下走, 即时性 触发; } } GameObject go = new GameObject(audioname); go.transform.position = position; go.transform.parent = transfPosi; audio3Dctrl tmpCtrl = go.AddComponent <audio3Dctrl>(); tmpCtrl.AudioName = audioname; // tmpCtrl.OriginalVolume = volume; // //原生 音量 大小; tmpCtrl.SoundType = soundTp; // AudioSource source = go.AddComponent <AudioSource>(); source.clip = clip; source.volume = tmpCtrl.OriginalVolume * battleVolmRate; //最后的音量为: 原生 音量 大小 * curVolumeRate; source.spatialBlend = 1.0f; //3d效果的 设定; // source.minDistance = 1f; // source.maxDistance = 20f; //目前,此处暂定为 该定值, 后期有要求,可动态 根据数据 传递; //确定下 3D 音效 衰减属性; DecideSpreadProp(source, soundData); source.spread = 180f; source.rolloffMode = AudioRolloffMode.Linear; source.Play(); // BatAudioSrcList.Add(source); //// 不循环的话, 接着新增,往下走, 即时性 触发; if (isLoop) { source.loop = true; } else { Destroy(go, clip.length); } }
/// <summary> /// Play3s the D audio. /// </summary> /// <param name="audioname">Audioname.</param> /// <param name="transfPosi">Transf posi.</param> /// <param name="position">Position.</param> /// <param name="volume">Volume.</param> 自己的 原生 声音大小; /// <param name="isLoop">If set to <c>true</c> is loop.</param> /// <param name="soundTp">Sound tp.</param> /// <param name="soundData">Sound data.</param> public void Play3DAudio(string audioname, Transform transfPosi, Vector3 position, float volume, bool isLoop, int soundTp, Sound3DData soundData) { if (audioname.Equals("")) { return; } AudioClip clip = (AudioClip)Resources.Load(BattleAudio + audioname, typeof(AudioClip)); //调用Resources方法加载AudioClip资源 Play3DAudioClip(audioname, clip, transfPosi, position, volume, isLoop, soundTp, soundData); }