본문 바로가기
유니티 게임 개발

[유니티 강좌] 2D RPG 게임 만들기 - 14 / 사운드

by 호일이 2021. 3. 28.

 

 

RPG 만들기 - Google Drive

이 폴더에 파일이 없습니다.이 폴더에 파일을 추가하려면 로그인하세요.

drive.google.com

드라이브에 예제 사운드 파일을 추가했습니다. 

Scripts폴더에 Sounds폴더를 만들고 BGM, SFX를 관리하는 스크립트를 생성합니다.

 

SFXManager.cs

public class SFXManager : MonoBehaviour
{
    public static SFXManager Instance { get; private set; }

    public AudioClip playerAttack;
    AudioSource audioSource;
    
    private void Awake()
    {
    	Instance = this;
    }

    private void Start()
    {
        audioSource = GetComponent<AudioSource>();
        audioSource.volume = 0.5f;
    }

    public void PlaySound(AudioClip audioClip)
    {
        audioSource.clip = audioClip;
        audioSource.Play();
    }
}

 

BGMManager.cs

public class BGMManager : MonoBehaviour
{
    public static BGMManager Instance { get; private set; }

    public AudioClip bgm;
    AudioSource audioSource;
    
    private void Awake()
    {
    	Instance = this;
    }

    private void Start()
    {
        audioSource = GetComponent<AudioSource>();
        audioSource.volume = 0.5f;
        audioSource.loop = true;

        PlaySound(bgm);
    }

    public void PlaySound(AudioClip audioClip)
    {
        audioSource.clip = audioClip;
        audioSource.Play();
    }
}

 

빈 오브젝트를 위의 그림과 같이 생성하고, 밑의 그림처럼 Audio Source컴포넌트, 아까 생성한 스크립트를 추가합니다. playerAttack, bgm에 원하는 사운드를 넣으면 됩니다.

 

 

마지막으로 SwordMan 스크립트에 공격 키를 누를 때 사운드를 재생하는 코드를 추가합니다.

 

코드 설명

public static <classname> Instance;

Instance = this;

사운드 매니저 스크립트에 공통적으로 클래스를 전역 객체로 사용하기 위해 저 코드가 들어갑니다.

기본적으로 다른 클래스를 참조하는 것은 불가능합니다만, public static으로 선언하면 전역 객체가 되어서 public으로 선언된 변수와 함수는 다른 클래스에서도 사용이 가능합니다.

get, set 궁금하신 분은 c#의 속성 검색하면 자세히 나옵니다.

 

private void Awake()
{
    if (Instance == null)
    {
        Instance = this;
        DontDestroyOnLoad(gameObject);
    }
    else
    {
        Destroy(gameObject);
    }
}

만약 오브젝트가 씬이 전환되어도 초기화되지 않고 유지되어야 하는 경우에는 위와 같이 수정하면 됩니다.

 

반응형

댓글