카테고리 없음

2025.05.26 8주차 월요일

mochoa 2025. 5. 26. 20:31

주요 구현 내용 요약

버튼 사운드 처리 ▶ 버튼 클릭 시 효과음 재생 (TitleButtonSound)

페이드 인/아웃 + 씬 전환 ▶씬 이동/종료 시 SceneFader로 자연스러운 화면 전환 구현

저장 시스템 ▶ JSON 기반의 SaveManager와 MyGameData 사용

배경 음악 매니저 ▶ BGMManager를 통해 씬 전용 BGM 재생 및 볼륨 조절

아이템 구조 설계 ▶ ItemData ScriptableObject 기반으로 타입별 아이템 정의

 


UI - 버튼 클릭 사운드 & 페이드 전환

버튼 클릭 시 사운드가 나도록 TitleButtonSound를 작성하고,
SceneFader로 씬 전환 시 자연스럽게 검은 화면으로 Fade Out 되도록 구성했다.

foreach (var btn in buttons)
{
    btn.onClick.AddListener(PlayClickSound);
}

 

public void FadeToScene(string sceneName)
{
    StartCoroutine(FadeAndLoad(sceneName));
}

씬 이동뿐 아니라 게임 종료 시도에도 페이드를 넣고 자연스럽게 꺼지도록 처리했다.
다만, Application.Quit()은 빌드에서만 유효하므로 에디터에서는 주의가 필요했다.


Save System - JSON 기반 저장 & 불러오기

SaveManager를 싱글톤으로 구성하여 게임 데이터를 저장하고,
MyGameData를 통해 hp, gold, level 등의 기본 정보를 저장했다.

string json = JsonUtility.ToJson(data, true);
File.WriteAllText(savePath, json);

간단한 구조지만, Application.persistentDataPath를 이용해 플랫폼 간 경로 문제도 고려했다.


BGM 관리 - 씬마다 배경 음악 제어

타이틀 씬에서만 재생되는 로딩 BGM을 BGMManager로 재생하고,
DontDestroyOnLoad로 인스턴스를 유지하면서도 중복 생성을 방지했다.

audioSource = gameObject.AddComponent<AudioSource>();
audioSource.loop = true;
audioSource.playOnAwake = false;

씬 이동 시에는 audioSource.Stop()으로 깔끔히 정리할 수 있게 했다.


아이템 시스템 - ScriptableObject 기반 설계

아이템은 ItemData를 ScriptableObject로 구성하고,
타입별 분기(ITEMTYPE, CONSUMABLETYPE)를 명확히 분리했다.

public enum ITEMTYPE { Resource, Equipable, Consumable }
public ItemDataConsumable[] consumables;

여기에 ItemDatabase를 통해 ID 기반 검색 기능도 넣어서,
저장 시에는 ID + 수량만 저장하는 경량 구조로 확장 가능하게 했다.


느낀점

  • 씬 간의 부드러운 전환과 효과음은 UI/UX에 굉장히 큰 영향을 준다.
  • 데이터 저장 구조는 최소한으로 시작해 점진적으로 확장하는 것이 효율적이다.
  • ScriptableObject는 반복적인 구조를 설계할 때 강력한 도구이며,
    에디터 확장성과 분리 구조에 큰 도움이 된다.