// 参数: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();
     }
 }
Esempio n. 3
0
    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);
    }
Esempio n. 4
0
 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();
         }
     }
 }