드라이브에 예제 사운드 파일을 추가했습니다.
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);
}
}
만약 오브젝트가 씬이 전환되어도 초기화되지 않고 유지되어야 하는 경우에는 위와 같이 수정하면 됩니다.
반응형
'유니티 게임 개발' 카테고리의 다른 글
[유니티 강좌] 2D RPG 게임 만들기 - 16 / 스테이터스 클래스 정리하기 (15) | 2021.05.13 |
---|---|
[유니티 강좌] 2D RPG 게임 만들기 - 15 / 플레이어의 죽음 (10) | 2021.05.02 |
[유니티 강좌] 2D RPG 게임 만들기 - 13 / 함정 (0) | 2021.03.24 |
[유니티 강좌] 2D RPG 게임 만들기 - 12 / 아이템 (6) | 2021.03.24 |
[유니티 강좌] 2D RPG 게임 만들기 - 11 / 간단한 적 AI (5) | 2021.03.21 |
댓글