/// <summary>
    /// 3d 사운드 재생(PlayAudioSourceAtPoint)
    /// </summary>
    public void PlayEffectSound(SoundClip clip, Vector3 position, float volume)
    {
        //찢어지는 사운드 방지(특정 채널 갯수 이하로만 재생)
        bool isPlaySuccess = false;

        for (int i = 0; i < this.EffectChannelCount; i++)
        {
            if (this.effect_audios[i].isPlaying == false)
            {
                PlayAudioSourceAtPoint(clip, position, volume);
                effect_PlayStartTime[i] = Time.realtimeSinceStartup;
                isPlaySuccess           = true;
                break;
            }
            else if (this.effect_audios[i].clip == clip.GetClip())
            {
                this.effect_audios[i].Stop();
                PlayAudioSourceAtPoint(clip, position, volume);
                effect_PlayStartTime[i] = Time.realtimeSinceStartup;
                isPlaySuccess           = true;
                break;
            }
        }

        if (isPlaySuccess == false)
        {
            PlayAudioSourceAtPoint(clip, position, volume);
        }
    }
Ejemplo n.º 2
0
 void PlaySound(SoundClip clip)
 {
     if (source)
     {
         AudioClip c = clip.GetClip();
         source.PlayOneShot(c);
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 사운드 재생.
 /// </summary>
 void PlayAudioSource(AudioSource source, SoundClip m)
 {
     if (source == null)
     {
         return;
     }
     source.Stop();
     source.clip         = m.GetClip();
     source.volume       = m.maxVolume;
     source.loop         = m.isLoop;
     source.pitch        = m.pitch;
     source.dopplerLevel = m.dopplerLevel;
     source.rolloffMode  = m.rollOffMode;
     source.minDistance  = m.minDistance;
     source.maxDistance  = m.maxDistance;
     source.spatialBlend = m.spatialBlend;
     source.Play();
 }
Ejemplo n.º 4
0
 void PlayAudioSource(AudioSource source, SoundClip clip, float volume)
 {
     if (source == null || clip == null)
     {
         return;
     }
     source.Stop();
     source.clip         = clip.GetClip();
     source.volume       = volume;
     source.loop         = clip.isLoop;
     source.pitch        = clip.pitch;
     source.dopplerLevel = clip.dopplerLevel;
     source.rolloffMode  = clip.rolloffMode;
     source.minDistance  = clip.minDistance;
     source.maxDistance  = clip.maxDistance;
     source.spatialBlend = clip.spatialBlend;
     source.Play();
 }
Ejemplo n.º 5
0
 void PlayAudioSource(AudioSource _source, SoundClip _clip, float _volume)
 {
     if (_source == null || _clip == null)
     {
         Debug.LogWarning("Plz check this PlayAudioSource");
         return;
     }
     _source.Stop();
     _source.clip         = _clip.GetClip();
     _source.volume       = _volume;
     _source.loop         = _clip.isLoop;
     _source.pitch        = _clip.pitch;
     _source.dopplerLevel = _clip.dopplerLevel;
     _source.rolloffMode  = _clip.audioRolloffMode;
     _source.minDistance  = _clip.minDistance;
     _source.maxDistance  = _clip.maxDistance;
     _source.spatialBlend = _clip.spatialBlend;
     _source.Play();
 }
    public void PlayEffectSound(SoundClip clip)
    {
        //찢어지는 사운드 방지(특정 채널 갯수 이하로만 재생)
        bool isPlaySuccess = false;

        for (int i = 0; i < this.EffectChannelCount; i++)
        {
            if (this.effect_audios[i].isPlaying == false)
            {
                PlayAudioSource(this.effect_audios[i], clip, clip.maxVolume);
                effect_PlayStartTime[i] = Time.realtimeSinceStartup;
                isPlaySuccess           = true;
                break;
            }
            else if (this.effect_audios[i].clip == clip.GetClip())
            {
                this.effect_audios[i].Stop();
                PlayAudioSource(this.effect_audios[i], clip, clip.maxVolume);
                effect_PlayStartTime[i] = Time.realtimeSinceStartup;
                isPlaySuccess           = true;
                break;
            }
        }


        // 이미 EffectChannelCount만큼 이펙트 사운드가 진행중이라면,
        // 현잰 진행중인 EffectSound 중에서 가장 오래 진행된 것을 꺼버리고 새로운 clip 재생
        if (isPlaySuccess == false)
        {
            float maxTime     = 0.0f;
            int   selectIndex = 0;
            for (int i = 0; i < EffectChannelCount; i++) //최대값 찾기
            {
                if (effect_PlayStartTime[i] > maxTime)
                {
                    maxTime     = effect_PlayStartTime[i];
                    selectIndex = i;
                }
            }

            PlayAudioSource(effect_audios[selectIndex], clip, clip.maxVolume);
        }
    }
    /// <summary>
    /// source를 clip, volume으로 세팅
    /// </summary>
    void PlayAudioSource(AudioSource source, SoundClip clip, float volume)
    {
        if (source == null || clip == null)
        {
            Debug.LogError("SoundManager/PlayAudioSource source or clip is null");
            return;
        }

        source.Stop();
        source.clip         = clip.GetClip();
        source.volume       = volume;
        source.pitch        = clip.pitch;
        source.dopplerLevel = clip.dopplerLevel;
        source.rolloffMode  = clip.rolloffMode;
        source.minDistance  = clip.minDistance;
        source.maxDistance  = clip.maxDistance;
        source.spatialBlend = clip.spatialBlend;
        source.Play();
    }
Ejemplo n.º 8
0
 void PlayAudioSource(AudioSource source, SoundClip clip, float volume)
 {
     if (source == null || clip == null)
     {
         Debug.LogWarning("Plz check this PlayAudioSource");
         return;
     }
     source.Stop();
     source.clip         = clip.GetClip();
     source.volume       = volume;
     source.loop         = clip.IsLoop;
     source.pitch        = clip.Pitch;
     source.dopplerLevel = clip.DopplerLevel;
     source.rolloffMode  = clip.audioRolloffMode;
     source.minDistance  = clip.MinDistance;
     source.maxDistance  = clip.MaxDistance;
     source.spatialBlend = clip.SpatialBlend;
     source.Play();
 }
Ejemplo n.º 9
0
    /// <summary>
    /// 이펙트 사운드 재생.
    /// </summary>
    void Play_EffectSound(SoundClip m)
    {
        bool isPlaySuccess = false;

        //가지고 있는 오디오 채널중에 플레이중이 아닌 채널을 찾아보거나.
        for (int idx = 0; idx < this.effectAudioChannelCount; idx++)
        {
            if (this.effect_audioSource[idx].isPlaying == false)
            {
                PlayAudioSource(this.effect_audioSource[idx], m);
                this.Effect_PlayStartTime[idx] = Time.realtimeSinceStartup;
                isPlaySuccess = true;
                break;
            }
            else if (this.effect_audioSource[idx].clip == m.GetClip())
            {
                //같은 사운드가 거의 동시에 재생하여야 하는 경우 특정 폰의 경우 소리가 클리핑이나 피크 현상이 발생.
                //기존 사운드를 멈췄다가 다시 재생하는게 덜 어색할지도.
                this.effect_audioSource[idx].Stop();
                PlayAudioSource(this.effect_audioSource[idx], m);
                this.Effect_PlayStartTime[idx] = Time.realtimeSinceStartup;

                isPlaySuccess = true;
                break;
            }
        }

        if (isPlaySuccess == false)
        {
            float standTime   = 0.0f;
            int   selectIndex = 0;
            for (int idx = 0; idx < this.effectAudioChannelCount; idx++)
            {
                if (this.Effect_PlayStartTime[idx] > standTime)
                {
                    standTime   = this.Effect_PlayStartTime[idx];
                    selectIndex = idx;
                }
            }
            PlayAudioSource(this.effect_audioSource[selectIndex], m);
        }
    }
Ejemplo n.º 10
0
    public void PlayEffectSound(SoundClip clip)
    {
        bool isPlaySuccess = false;

        for (int i = 0; i < effectChannelCount; i++)
        {
            if (effect_audios[i].isPlaying == false)
            {
                PlayAudioSource(effect_audios[i], clip, clip.maxVolume);
                effect_PlayStartTime[i] = Time.realtimeSinceStartup;
                isPlaySuccess           = true;
                break;
            }
            else
            if (effect_audios[i].clip == clip.GetClip())
            {
                effect_audios[i].Stop();
                PlayAudioSource(effect_audios[i], clip, clip.maxVolume);
                effect_PlayStartTime[i] = Time.realtimeSinceStartup;
                isPlaySuccess           = true;
                break;
            }
        }

        if (isPlaySuccess == false)
        {
            float maxTime     = 0.0f;
            int   selectIndex = 0;
            for (int i = 0; i < effectChannelCount; i++)
            {
                if (effect_PlayStartTime[i] > maxTime)
                {
                    maxTime     = effect_PlayStartTime[i];
                    selectIndex = i;
                }
            }

            PlayAudioSource(effect_audios[selectIndex], clip, clip.maxVolume);
        }
    }
 void PlayAudioSourceAtPoint(SoundClip clip, Vector3 position, float volume)
 {
     AudioSource.PlayClipAtPoint(clip.GetClip(), position, volume);
 }