.
게임을 만들 때 사운드 처리도 필수도 들어가게 되죠.
최근 간단하게 사운드 재생 처리할 일이 있어서 모듈을 만들었습니다. 쉽고 간단한 코드라서 메모 차원에서 공유해봅니다.
GitHub 의 Rrepository 에 올리고 링크를 공유하는 것도 좋겠지만, 대부분의 코드는 개인 저장소로 관리하고 있어서, 이번처럼 간단한 코드 메모+공유 차원에서 다루게 된다면 스닙펫처럼 일부만 발췌해서 블로그로 공유하는 방식으로 해볼까 합니다.
우선 제목에서 다뤘듯이 아래는 SoundManager 의 풀 소스코드.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WSRSoundManager
{
Dictionary<int, AudioClip> oAudioClipsMap = new Dictionary<int, AudioClip>();
AudioSource oAS_Once = null;
AudioSource oAS_Loop = null;
private static WSRSoundManager _instance = null;
public static WSRSoundManager Instance
{
get
{
if (_instance == null) _instance = new WSRSoundManager();
return _instance;
}
}
public void CreateDefaultAudioSource()
{
if (null != oAS_Once && null != oAS_Loop)
{
Debug.Log("Already Created Dafault AudioSources!");
return;
}
GameObject oGameManager = GameObject.Find("SoundManager");
{
oGameManager = new GameObject("SoundManager");
Debug.Assert(oGameManager != null, "Can not create new SoundManager GameeObject");
}
GameObject.DontDestroyOnLoad(oGameManager);
oAS_Once = oGameManager.AddComponent<AudioSource>();
oAS_Once.loop = false;
oAS_Loop = oGameManager.AddComponent<AudioSource>();
oAS_Loop.loop = true;
}
public void Regist(int iInAudioKey, AudioClip oInAudioClip)
{
Debug.Assert(oInAudioClip != null, "Invalid AudioClip! AudioKey= " + iInAudioKey.ToString());
if (oAudioClipsMap.ContainsKey(iInAudioKey) == true)
{
Debug.Log("Already Registed AudioClip! AudioKey= " + iInAudioKey.ToString());
return;
}
oAudioClipsMap.Add(iInAudioKey, oInAudioClip);
}
public void PlayAudioClip(int iInAudioKey, bool bIsLoop)
{
if (oAudioClipsMap.ContainsKey(iInAudioKey) == false)
{
Debug.Log("Not exist AudioClip! AudioKey= " + iInAudioKey.ToString());
return;
}
if (bIsLoop)
{
Debug.Assert(oAS_Loop != null, "AudioSource is null!");
oAS_Loop.Stop();
oAS_Loop.clip = oAudioClipsMap[iInAudioKey];
oAS_Loop.Play();
}
else
{
Debug.Assert(oAS_Once != null, "AudioSource is null!");
oAS_Once.PlayOneShot(oAudioClipsMap[iInAudioKey]);
}
}
}
메소드도 3개 뿐인 클래스라 사용법도 간단합니다.
싱글턴으로 제작했기 때문에 별도로 객체를 생성할 필요는 없습니다만, 초기화는 필요합니다.
// 기본 오디오 소스 생성. 이 때 Hierarchy에 SoundManager 오브젝트가 생성 됨.
WSRSoundManager.Instance.CreateDefaultAudioSource();
// 재생하려는 사운드클립 등록
WSRSoundManager.Instance.Regist(100, BGM_Title);
WSRSoundManager.Instance.Regist(101, BGM_Play);
WSRSoundManager.Instance.Regist(1000, SE_Attack);
WSRSoundManager.Instance.Regist(1001, SE_Damage);
// 사운드 재생이 필요한 곳에서 재생
WSRSoundManager.Instance.PlayAudioClip(100, true);
WSRSoundManager.Instance.PlayAudioClip(1000, false);
WSRSoundManager.Instance.PlayAudioClip(1001, false);
간단한 코드 간단하게 공유 끝.
.게임,게임개발,게임프로그래밍,Unity,UnityEngine,사운드,사운드처리
728x90
반응형
'유니티 엔진 (Unity Engine)' 카테고리의 다른 글
[Unity] 빌드에러 AndroidManifest.xml:41: AAPT: error: unexpected element <queries> found in <manifest>. (0) | 2021.05.18 |
---|---|
[Unity] 아틀라스(Atlase)로 묶은 스프라이트(Sprite) 문제들 (0) | 2021.04.16 |
[Unity] Canvas Order 설정으로 팝업창 구현 (0) | 2021.04.06 |
[Unity] 유튜브의 Unity 강좌 채널 5개 (0) | 2020.12.01 |
[Unity] Custom Editor, ReorderableList 적용하기 (0) | 2020.10.13 |
[Unity] Serialize 타입, 값 유지하기 (FormerlySerializedAs) (0) | 2020.10.12 |
[Unity] UGUI, Scroll View 만들기 (0) | 2020.10.11 |