53 lines
1.3 KiB
C#
53 lines
1.3 KiB
C#
using UnityEngine;
|
|
|
|
public class SoundManager : MonoBehaviour
|
|
{
|
|
public static SoundManager instance;
|
|
|
|
[Header("Audio Sources")]
|
|
[SerializeField] private AudioSource bgmSource;
|
|
[SerializeField] private AudioSource sfxSource;
|
|
[SerializeField] private AudioSource footstepSource;
|
|
|
|
PlayerController playerController;
|
|
|
|
void Awake()
|
|
{
|
|
if (instance == null) instance = this;
|
|
else Destroy(gameObject);
|
|
}
|
|
|
|
// 배경음악 재생/변경
|
|
public void PlayBGM(AudioClip clip)
|
|
{
|
|
bgmSource.clip = clip;
|
|
bgmSource.loop = true;
|
|
bgmSource.Play();
|
|
}
|
|
|
|
// 효과음 한 번 재생 (여러 개 겹치기 가능)
|
|
public void PlaySFX(AudioClip clip)
|
|
{
|
|
sfxSource.PlayOneShot(clip);
|
|
}
|
|
|
|
public void PlayFootstep(AudioClip clip)
|
|
{
|
|
// 이미 걷는 소리가 재생 중이고, 같은 클립이라면 다시 재생하지 않음 (자연스러운 루프 위해)
|
|
if (footstepSource.isPlaying && footstepSource.clip == clip) return;
|
|
|
|
footstepSource.clip = clip;
|
|
footstepSource.loop = true; // 걷는 소리는 보통 반복되어야 함
|
|
footstepSource.Play();
|
|
}
|
|
|
|
// 걷기 멈춤 함수 (수정됨)
|
|
public void StopFootstep()
|
|
{
|
|
if (footstepSource.isPlaying)
|
|
{
|
|
footstepSource.Stop(); // 인자 없이 호출해야 함!
|
|
}
|
|
}
|
|
}
|