본문 바로가기
AI 게임 제작/AI 코딩

첫 화면, 환경 설정 구현

by Yuriring 2025. 9. 29.

원시 프롬프트

* Start 버튼을 누르면 Game Scene으로 이동
* Setting 버튼을 누르면 Settings 팝업이 등장
* Exit 버튼을 누르면 게임 완전히 종료하고 바탕화면으로
* Settings에서 Display Mode의 드롭다운 메뉴 (Dropdown_DisplayMode)의 첫번째 항목-창모드를 누르면, 실행 중인 게임을 창모드로 변경, 두번째 항목-전체화면을 누르면, 실행 중인 게임을 전체 화면으로 변경
* Dropdown_Resolution의 첫번째 항목-Free를 누르면 자유 조정 가능한 해상도, 두번째 항목-1920x1080을 누르면 1920x1080 고정 해상도로 조정
* Slider_BGM의 슬라이더를 조정해 게임의 BGM (Stage.csv의 bgm컬럼에 입력한 bgm)의 사운드 크기 조정
* Slideder_SFX의 슬라이더를 조정해 게임의 나머지 모든 이펙트 사운드의 크기 조정

프롬프트

유니티 C# 스크립트를 작성해줘. 요구사항은 아래와 같다.

목적

Main Scene의 메뉴/옵션 UI를 동작시키는 매니저 스크립트 MainMenuController.cs 를 만든다. 코드는 URP/일반 렌더링 관계없이 동작해야 하고, Editor/Standalone 모두에서 문제없게 작성한다.

씬/오브젝트 이름 (Inspector로 연결할 필드)

버튼

Btn_Start (Game 시작)

Btn_Options(Settings 팝업 열기) ※ 만약 내 프로젝트에 Btn_Settings 라면 그걸로 연결해도 됨

Btn_Quit (게임 종료)

팝업 그룹

Popup_Settings (Dim + 팝업 패널을 포함하는 루트, 기본 비활성)

드롭다운

Dropdown_DisplayMode (0=창모드, 1=전체화면)

Dropdown_Resolution (0=Free, 1=1920x1080)

슬라이더

Slider_BGM (0.0~1.0)

Slider_SFX (0.0~1.0)

오디오

AudioMixer(UnityEngine.Audio) 1개: 이름은 자유.

그룹: BGM, SFX 두 그룹을 만들고, 각각 노출 파라미터를 다음 키로 공개한다:

BGM 볼륨 파라미터 키: BGM_dB

SFX 볼륨 파라미터 키: SFX_dB

슬라이더 0.0~1.0 값을 dB로 변환해 세팅한다:

값이 0이면 -80 dB, 그 외에는 20 * log10(value) 사용.

씬 이름

게임 씬 이름은 정확히 GameScene

동작 상세
1) Start 버튼

Btn_Start 클릭 시 UnityEngine.SceneManagement.SceneManager.LoadScene("GameScene");

2) Settings 버튼

Btn_Options 클릭 시 Popup_Settings.SetActive(true);

팝업이 열릴 때 현재 화면모드/해상도/볼륨 상태를 UI에 반영:

Display Mode: Screen.fullScreenMode 가 FullScreenWindow 이면 1(전체화면), 아니면 0(창모드)

Resolution:

현재가 1920x1080 정확히면 드롭다운을 1로 선택

그 외는 0(Free)

Slider_BGM/Slider_SFX: 현재 믹서 파라미터 dB 값을 0~1로 역변환해서 슬라이더에 반영

역변환: dB ≤ -80 이면 0, 그 외에는 Mathf.Pow(10, dB/20f)

3) Exit 버튼

Btn_Quit 클릭 시

Standalone: Application.Quit();

Editor 플레이 중이면 UnityEditor.EditorApplication.isPlaying = false; (조건부 컴파일)

4) Display Mode 드롭다운

Dropdown_DisplayMode의 값이 바뀌면 즉시 적용:

값 0(창모드): Screen.fullScreenMode = FullScreenMode.Windowed;

값 1(전체화면): Screen.fullScreenMode = FullScreenMode.FullScreenWindow;

적용 후에도 팝업은 열린 상태를 유지.

5) Resolution 드롭다운

Dropdown_Resolution 값 변경 시:

값 0(Free): 크기 고정하지 않음.

현재 Screen.width / Screen.height 를 읽어서 그대로 유지하면서 FullScreenMode만 현재 상태 유지.

윈도우가 사용자가 조절 가능하도록(자유 조정) 전제. (실제 자유 조정은 Player Settings의 Resizable Window 설정 필요)

값 1(1920x1080):

현재 화면 모드를 유지하며 Screen.SetResolution(1920, 1080, Screen.fullScreenMode);

적용 후에도 팝업은 열린 상태 유지.

6) BGM/SFX 볼륨 슬라이더

Slider_BGM 값 변경 시 오디오 믹서의 BGM_dB 파라미터 반영

Slider_SFX 값 변경 시 오디오 믹서의 SFX_dB 파라미터 반영

변환:

if value <= 0.0001f → dB = -80f

else → dB = 20f * Mathf.Log10(value)

주석으로 “Stage.csv의 bgm 컬럼으로 재생되는 BGM은 오디오 믹서의 BGM 그룹을 통해 볼륨만 제어한다”고 명시. (BGM 재생 자체 로직은 기존 시스템을 사용)

7) 팝업 닫기

확인/취소 버튼을 팝업 안에 만들어뒀다고 가정:

Btn_OK: 현재 UI 값들(모드/해상도/볼륨)이 이미 즉시적용이므로, 여기서는 단순히 Popup_Settings.SetActive(false);

Btn_Cancel: 이번 세션에서 바뀐 값을 되돌리고 닫는 로직(옵션)

간단화를 위해 이번 버전은 되돌리기 없이 Popup_Settings.SetActive(false);만 실행. (필요 시 이전 상태를 캐시하는 코드 블록 주석 제공)

스크립트 요구

파일명: MainMenuController.cs

네임스페이스 불필요.

using:

UnityEngine

UnityEngine.UI

UnityEngine.SceneManagement

UnityEngine.Audio

TMPro

클래스는 MonoBehaviour.

인스펙터에 연결할 public / [SerializeField] private 필드 선언:

Buttons, GameObject Popup, TMP_Dropdown 2개, Sliders 2개, AudioMixer 1개

Awake() 또는 Start()에서 모든 UI 이벤트 리스너 연결하고, 누락 시 경고 로그.

에디터 종료 분기에는 #if UNITY_EDITOR 사용.

볼륨 변환 유틸 메서드 2개 포함:

float LinearToDecibel(float v)

float DecibelToLinear(float dB)

널 체크 철저히, 누락된 레퍼런스는 Debug.LogWarning으로 알려줘.

주석은 한국어로 친절히 달아줘.

마지막으로, 스크립트 맨 아래에 Inspector 연결 체크리스트를 주석으로 첨부해:

버튼/드롭다운/슬라이더/Popup 연결

AudioMixer와 노출 파라미터 이름 일치 확인

Player Settings에서 Resizable Window 켜면 Resolution=Free가 자연스럽게 동작함