왜.... 오셨나요?

부끄러워요

연구노트

연구노트_기존 사운드 매니저 방식 수정

와피했는데 2026. 2. 13. 15:47

개요


설명

 

기존에 사용한 사운드매니저는 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변수로 클립이 있는 경로와 클립명을 적어주면 됨

버그수정


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


마치며.


 

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