개요
설명
기존에 사용한 사운드매니저는 ScriptableObject에 data를 입력하여 사용하는데 입력과정중 Audio Clip을 직접적으로 삽입하여 코드로 불러오는 방식이라 동적일때 ScriptableObject로 인해 메모리를 차지하는걸 우려하여 ResourceManager의 String값으로 경로를 불러 파일을 읽는 방식으로 적용하기로 함
코드 수정
ScriptableObject 구조
public class SoundDataSO
{
[Header("path/Key (경로/고유 이름)")]
public string soundName; // ex) "StartBGM", "ButtonClick"
[Header("종류 & 기본 볼륨")]
public SoundType soundType = SoundType.BGM;
[Header("종류 & 기본 볼륨")]
public VolumeType volumeType = VolumeType.Master;
[Range(0f, 1f)] public float volume = 1f;
[Header("클립들 (랜덤 재생)")] // 랜덤재생용
public AudioClip[] audioClips; // 하나만 넣어도 됨
}
| ● 설명 |
| 기존에 사용하던 Data 스크립트에 이름입력 부분만 제목 수정후 입력자한테 해당 양식으로 입력하라고 수정 |
SoundManager에서 Data 불러오는 방식 변경
>기존코드
private AudioClip GetRandomClip(SoundDataSO data)
{
if (data == null || data.audioClips == null || data.audioClips.Length == 0) return null;
if (data.audioClips.Length == 1) return data.audioClips[0];
int idx = Random.Range(0, data.audioClips.Length);
return data.audioClips[idx];
}

> 변경 코드
private AudioClip GetAudioClip(SoundDataSO data)
{
AudioClip a = GameManager.Resource.Load<AudioClip>(GamePath.Sound + data.soundName);
if (data == null || data.soundName == null || a == null) return null;
return a;
}
| ● 설명 |
| 기존의 코드는 클립 배열에서 여러 클립들을 랜덤으로 Pick해주는 코드였으면 새로운 코드는 특정 경로로 해당 클립 하나만 찾아주는 코드로 수정함 |

>사용시 코드
private void PlayMusic()
{
GameManager.Sound.PlayBGM("Game1/UnwelcomeSchool");
}
| ● 설명 |
| 사용시 String변수로 클립이 있는 경로와 클립명을 적어주면 됨 |
버그수정

| 발생 | 없음 |
| 문제 | 없음 |
| 해결 | 없음 |

마치며.
예전부터 신경쓰였던 부분인데 이번에 기회가 되어 고치게 됨

'연구노트' 카테고리의 다른 글
| [슬라임랜처] 슬라임건 기능구현-3(완) (0) | 2026.02.20 |
|---|---|
| [슬라임랜처] 슬라임건 기능구현-2 (0) | 2026.02.19 |
| [슬라임랜처] 슬라임건 기능구현-1 (1) | 2026.02.18 |