// 参数: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);
                 }
             }
         }
     }
 }
 public static void Play(string clipName, ZombieAudioType type, float delay)
 {
     Play(clipName, type, null, delay, 1f, RandomPitch);
 }
 public static void Play(string clipName, ZombieAudioType type, Transform zombieTrans, float delay)
 {
     Play(clipName, type, zombieTrans, delay, 1f, RandomPitch);
 }
 public static void Play(string clipName, ZombieAudioType type)
 {
     Play(clipName, type, null, 0f, 1f, RandomPitch);
 }