Beispiel #1
0
        public SoundHandler PlayMusic(global::Utils.Sound.Sound sound)
        {
            if (sound == null)
            {
                return(null);
            }

            if (sound.Clip == null)
            {
                return(null);
            }


            if (MusicHandler != null)
            {
                MusicHandler.Source.clip = sound.Clip;
                //MusicHandler.Volume = clip.VolumeModifier;
                MusicHandler.Source.volume = sound.VolumeModifier;
                MusicHandler.IsLooped      = sound.Loop;
                MusicHandler.Pitch         = sound.Pitch;
                MusicHandler.Source.Play();
                MusicHandler.MixerGroup = sound.MixerGroup;
                return(MusicHandler);
            }

            var handler = Play(sound);

            DontDestroyOnLoad(handler.Source.gameObject);
            MusicHandler = handler;
            return(handler);
        }
Beispiel #2
0
        public SoundHandler Play(global::Utils.Sound.Sound sound)
        {
            if (sound == null)
            {
                return(null);
            }

            var isLimiting    = sound.MixerGroup != null && LimitSettings != null;
            var isInGroup     = false;
            var soundsInGroup = 0;

            if (isLimiting)
            {
                isInGroup = _groupCounter.ContainsKey(sound.MixerGroup);
                if (isInGroup)
                {
                    soundsInGroup = _groupCounter[sound.MixerGroup];
                    if (soundsInGroup >= LimitSettings.GetLimit(sound.MixerGroup))
                    {
                        //Debug.Log(string.Format("[SoundManager] Too many sounds for group {0}", sound.MixerGroup));
                        return(null);
                    }
                }
            }

            var pitch = sound.Pitch;

            if (sound.RandomizePitch)
            {
                pitch = Random.Range(pitch - sound.MaxPitchShift, pitch + sound.MaxPitchShift);
            }

            var delay = sound.Delay;

            if (sound.RandomizeDelay)
            {
                delay += Random.value * sound.MaxAdditionalDelay;
            }

            var handler = Play(sound.Clip, sound.VolumeModifier, sound.Loop, pitch, sound.IgnoreListenerPause, delay, sound.MixerGroup);

            if (isLimiting && handler != null)
            {
                if (isInGroup)
                {
                    // There are sounds in group so increment by one
                    _groupCounter[sound.MixerGroup] = soundsInGroup + 1;
                }
                else
                {
                    // First sound in group
                    _groupCounter.Add(sound.MixerGroup, 1);
                }
            }

            return(handler);
        }
Beispiel #3
0
        public SoundHandler Play(global::Utils.Sound.Sound sound, Transform attachTo)
        {
            var s = Play(sound);

            if (s != null)
            {
                s.AttachToObject(attachTo);
            }

            return(s);
        }