// 参数:clipName,僵尸声音类型,僵尸Transform,延迟,声音大小,音调 public static void Play(string clipName, ZombieAudioType type, Transform zombieTrans, float delay, float volMul, float pitch) { if (Profile.soundEnable) { int index = (int)type; string key = clipName + index; if (!clipInfoDict.ContainsKey(key)) { TypeInfo info = typeInfoArray[index]; if ((info.current < info.max) && (Time.realtimeSinceStartup >= (info.lastCallTime + info.interval))) { AudioClip clip = AudioClipManager.GetClip(clipName); if (clip == null) { Debug.Log("no clip" + clipName); } else { ClipInfo clipInfo = new ClipInfo { zombieTrans = zombieTrans, name = clipName, type = type, playTime = Time.realtimeSinceStartup, delay = delay, volMul = volMul, pitch = pitch }; info.current++; info.lastCallTime = Time.realtimeSinceStartup; // 如果没有延迟,直接播放,有延迟在update中处理 if (clipInfo.delay <= 0f) { AudioSource source = new GameObject("Audio:" + clipName) { transform = { parent = root } }.AddComponent <AudioSource>(); source.clip = clip; source.volume = clipInfo.volMul * info.volumeMul; source.loop = false; float num2 = Mathf.Clamp(Time.timeScale, 0.75f, 1f); source.pitch = clipInfo.pitch * num2; clipInfo.length = clip.length / source.pitch; clipInfo.audioSource = source; source.Play(); SpecialDeal(clipInfo); } clipInfoDict.Add(key, clipInfo); } } } } }
private void Update() { foreach (string str in clipInfoDict.Keys) { ClipInfo clipInfo = clipInfoDict[str]; int type = (int)clipInfo.type; TypeInfo info2 = typeInfoArray[type]; // 处理延迟播放 if ((clipInfo.delay > 0f) && ((Time.realtimeSinceStartup - clipInfo.playTime) >= clipInfo.delay)) { clipInfo.delay = 0f; clipInfo.playTime = Time.realtimeSinceStartup; AudioClip clip = AudioClipManager.GetClip(clipInfo.name); AudioSource source = new GameObject("Audio:" + clipInfo.name) { transform = { parent = root } }.AddComponent <AudioSource>(); source.clip = clip; source.volume = clipInfo.volMul * info2.volumeMul; source.loop = false; float num2 = Mathf.Clamp(Time.timeScale, 0.75f, 1f); source.pitch = clipInfo.pitch * num2; clipInfo.length = clip.length / source.pitch; clipInfo.audioSource = source; source.Play(); SpecialDeal(clipInfo); } else if (Time.realtimeSinceStartup >= (clipInfo.playTime + clipInfo.length)) { clipInfoDeleteList.Add(str); info2.current--; if (clipInfo.audioSource != null) { Destroy(clipInfo.audioSource.gameObject); } } } if (clipInfoDeleteList.Count > 0) { for (int i = 0; i < clipInfoDeleteList.Count; i++) { clipInfoDict.Remove(clipInfoDeleteList[i]); } clipInfoDeleteList.Clear(); } }
public AudioSource Play(string clipName, Vector3 point, float volume, float pitch, bool loop, bool ignoreTimeScale) { if (!Profile.soundEnable) { return(null); } AudioClip clip = AudioClipManager.GetClip(clipName); if (clip == null) { Debug.Log("no clip " + clipName); return(null); } GameObject go = new GameObject("Audio:" + clipName) { transform = { parent = base.transform, localPosition = point } }; AudioSource source = go.AddComponent <AudioSource>(); source.clip = clip; source.volume = volume; float num = 1f; // 时间缩放影响声音 if (!ignoreTimeScale) { num = Mathf.Clamp(Time.timeScale, 0.75f, 1f); } source.pitch = pitch * num; source.loop = loop; source.Play(); // 如果不是循环的,播放完消除掉 if (!loop) { Destroy(go, source.clip.length + 0.5f); } return(source); }
public void PlayBG(string clipName) { if (Profile.musicEnable) { string[] strArray = clipName.Split(new char[] { '/' }); string str = strArray[strArray.Length - 1]; if ((this.audioMgr != null) && (this.audioMgr.clip != null) && this.audioMgr.clip.name.Equals(str)) { if (!this.audioMgr.isPlaying) { this.audioMgr.volume = 1f; this.audioMgr.Play(); } } else { this.audioMgr.volume = 1f; this.audioMgr.clip = AudioClipManager.GetClip(clipName); this.audioMgr.Play(); } } }