Ejemplo n.º 1
0
 public ActiveEvent(AudioEvent audioEvent, GameObject emitter, AudioSource primarySource, AudioSource secondarySource, string messageOnAudioEnd = null)
 {
     this.AudioEvent   = audioEvent;
     AudioEmitter      = emitter;
     PrimarySource     = primarySource;
     SecondarySource   = secondarySource;
     MessageOnAudioEnd = messageOnAudioEnd;
     SetSourceProperties();
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Set the volume, spatialization, etc., on our AudioSources to match the settings on the event to play.
        /// </summary>
        private void SetSourceProperties()
        {
            Action <Action <AudioSource> > forEachSource = (action) =>
            {
                action(PrimarySource);
                if (SecondarySource != null)
                {
                    action(SecondarySource);
                }
            };

            AudioEvent audioEvent = this.AudioEvent;

            switch (audioEvent.Spatialization)
            {
            case SpatialPositioningType.TwoD:
                forEachSource((source) =>
                {
                    source.spatialBlend = 0f;
                    source.spatialize   = false;
                });
                break;

            case SpatialPositioningType.ThreeD:
                forEachSource((source) =>
                {
                    source.spatialBlend = 1f;
                    source.spatialize   = false;
                });
                break;

            case SpatialPositioningType.SpatialSound:
                forEachSource((source) =>
                {
                    source.spatialBlend = 1f;
                    source.spatialize   = true;
                });
                break;

            default:
                Debug.LogErrorFormat("Unexpected spatialization type: {0}", audioEvent.Spatialization.ToString());
                break;
            }

            if (audioEvent.Spatialization == SpatialPositioningType.SpatialSound)
            {
                forEachSource((source) =>
                {
                    SpatialSoundSettings.SetRoomSize(source, audioEvent.RoomSize);
                    source.rolloffMode = AudioRolloffMode.Custom;
                    source.maxDistance = audioEvent.MaxDistanceAttenuation3D;
                    source.SetCustomCurve(AudioSourceCurveType.CustomRolloff, audioEvent.AttenuationCurve);
                });
            }
            else
            {
                forEachSource((source) =>
                {
                    if (audioEvent.Spatialization == SpatialPositioningType.ThreeD)
                    {
                        source.rolloffMode = AudioRolloffMode.Custom;
                        source.maxDistance = audioEvent.MaxDistanceAttenuation3D;
                        source.SetCustomCurve(AudioSourceCurveType.CustomRolloff, audioEvent.AttenuationCurve);
                        source.SetCustomCurve(AudioSourceCurveType.SpatialBlend, audioEvent.SpatialCurve);
                        source.SetCustomCurve(AudioSourceCurveType.Spread, audioEvent.SpreadCurve);
                        source.SetCustomCurve(AudioSourceCurveType.ReverbZoneMix, audioEvent.ReverbCurve);
                    }
                    else
                    {
                        source.rolloffMode = AudioRolloffMode.Logarithmic;
                    }
                });
            }

            if (audioEvent.AudioBus != null)
            {
                forEachSource((source) => source.outputAudioMixerGroup = audioEvent.AudioBus);
            }

            float pitch = 1f;

            if (audioEvent.PitchRandomization != 0)
            {
                pitch = UnityEngine.Random.Range(audioEvent.PitchCenter - audioEvent.PitchRandomization, audioEvent.PitchCenter + audioEvent.PitchRandomization);
            }
            else
            {
                pitch = audioEvent.PitchCenter;
            }
            forEachSource((source) => source.pitch = pitch);

            float vol = 1f;

            if (audioEvent.FadeInTime > 0)
            {
                forEachSource((source) => source.volume = 0f);
                this.CurrentFade = audioEvent.FadeInTime;
                if (audioEvent.VolumeRandomization != 0)
                {
                    vol = UnityEngine.Random.Range(audioEvent.VolumeCenter - audioEvent.VolumeRandomization, audioEvent.VolumeCenter + audioEvent.VolumeRandomization);
                }
                else
                {
                    vol = audioEvent.VolumeCenter;
                }
                this.VolDest = vol;
            }
            else
            {
                if (audioEvent.VolumeRandomization != 0)
                {
                    vol = UnityEngine.Random.Range(audioEvent.VolumeCenter - audioEvent.VolumeRandomization, audioEvent.VolumeCenter + audioEvent.VolumeRandomization);
                }
                else
                {
                    vol = audioEvent.VolumeCenter;
                }
                forEachSource((source) => source.volume = vol);
            }

            float pan = audioEvent.PanCenter;

            if (audioEvent.PanRandomization != 0)
            {
                pan = UnityEngine.Random.Range(audioEvent.PanCenter - audioEvent.PanRandomization, audioEvent.PanCenter + audioEvent.PanRandomization);
            }
            forEachSource((source) => source.panStereo = pan);
        }