각 유저들의 PC 사양에 맞게 설정하여 쾌적한 환경에서 게임할 수 있도록 하기 위한 필수 기능
자동으로 맞춰줄 수도 있겠지만 비단 PC 사양만이 아닌 다양한 환경에서 플레이하므로
환경 설정 기능을 제공해주는 것이 좋다
본 글에선 인디 게임인 점을 감안해 AAA급 게임의 환경 설정까진 아니고 필수 요소들만 구현한다
구현 과정을 차근차근 정리해보자
첫 번째, 데이터 환경 구축
환경 설정 데이터를 담을 데이터 환경을 구축한다
구조체와 Enum을 활용하며 필요한 항목들은 아래와 같다
| 이름 | 설명 |
| ST_GameSetting | 환경 설정 근본 데이터 |
| ST_ScreenResolution | 환경 설정의 해상도 데이터 |
| E_GraphicPreset | 환경 설정의 그래픽 퀄리티 데이터 |
1. E_GraphicPreset

2. ST_ScreenResolution

- 데이터 테이블도 필요하다

- 데이터 테이블에 값은 엑셀로 작성 후 utf-8 csv로 저장한 뒤 리임포트해주면 쉽게 넣을 수 있다

3. ST_GameSetting

- 값 범위와 슬라이더 범위 설정이 필요한 항목은 Volume 옵션들과 Sensitivity 옵션들
- 나머지는 설정 불필요
기본값은 아래와 같이 설정한다

두 번째, SaveGame 블루프린트 생성
1. SaveGame 타입으로 BP 생성

2. SettingData 변수 추가

- 아까 생성했던 ST_GameSetting 타입으로 변수를 추가한다
세 번째, GameInstance 블루프린트 생성
1. GameInstance 타입으로 BP 생성

2. CurrentSetting 변수 추가

- 아까 생성했던 ST_GameSetting 타입으로 변수를 추가한다
네 번째, 프로젝트의 게임 인스턴스 클래스 설정
1. [ 편집 > 프로젝트 세팅 ] 선택해 프로젝트 세팅 창을 연다

2. [ 맵 & 모드 ] 맨 아래에 위치한 게임 인스턴스 클래스에 세 번째 단계에서 생성했던 GameInstance BP를 설정해준다

다섯 번째, SaveGame 로직 만들기
1. 세팅 불러오는 함수 만들기

- 기존에 저장된 세팅이 있다면 기존 것을 불러오고
- 없다면 새로 생성하는 역할
2. 불러온 세팅 저장하는 함수 만들기

3. SaveGame 초기화 실행하기

여섯 번째, 설정 변경 로직 만들기
1. 그래픽 관련 설정 적용 함수 만들기

2. 사운드 관련 설정 적용 함수 만들기

3. 조작 민감도 관련 설정 적용 함수 만들기

- 함수를 캐릭터에 적용해주기 위해 캐릭터 BP에 아래와 같이 그래프를 작성한다

4. 게임 플레이 관련 설정 적용 기능 만들기

- 별도 함수 불필요
- 대사 UI가 표시되는 곳에 위 그래프를 연결해 설정에 따라 대사 표시 여부를 결정하도록 한다
일곱 번째, UI 스케일 설정
1. [ 편집 > 프로젝트 세팅 ] 선택해 프로젝트 세팅 창을 연다
2. [ 유저 인터페이스 ]의 DPI 스케일 룰에서 원하는 항목으로 설정한다

- 선택할 수 있는 항목은 아래와 같다
| 항목 | 설명 |
| Shortest Side (기본값) | 뷰포트의 더 짧은 쪽을 기반으로 스케일 커브를 이밸류에이트 |
| Longest Side | 뷰포트의 더 긴쪽을 기반으로 스케일 커브를 이밸류에이트 |
| Horizontal | 뷰포트의 x 축을 기반으로 스케일 커브를 이밸류에이트 |
| Vertical | 뷰포트의 y 축을 기반으로 스케일 커브를 이밸류에이트 |
| Scal to Fit | 스케일 커브 사용 안 함 DesignScreenSize를 사용하며 이를 기준으로 콘텐츠를 조절하는 식으로 스케일 박스의 행동 모방 |
| Custom | 유저가 보간 방식을 정함 |
일곱 번째, 환경 설정 UI 만들기
1. 컨텐츠 브라우저에 마우스 우클릭 시 호출되는 컨텍스트 메뉴에서 [ 유저 인터페이스 > 위젯 블루프린트 ] 선택

2. 필요한 항목들로 UI 구성

- 배경 블러, 보더, 오버레이, 스크롤 박스, 세로 박스, 가로 박스, 콤보 박스, 슬라이더 등 여러 항목들 사용
- 앵커, 패딩, 가로 / 세로 정렬을 각 항목별로 적절하게 세팅해야 한다
- 일부 항목은 크기 설정을 자동이 아닌 채우기로 설정해줘야 하는 것도 있다
3. UI 기능 구현
CurrentSetting 값에 따라 콤보 박스, 슬라이더들을 세팅해야 한다
우선 콤보 박스 세팅

- 해상도의 경우, 초반에 생성했던 테이블 데이터를 활용한다
- 데이터 값을 불러와 콤보 박스 리스트를 구성하고 현재 설정 중인 해상도를 파악해 선택된 상태로 표시한다

- 그래픽 품질의 경우, 초반에 생성했던 Enum을 활용한다
- Enum 값 기준으로 반복문을 통해 콤보 박스 리스트를 구성하고 현재 설정 중인 항목을 파악해 선택된 상태로 표시한다
> StringData 참조해 String 표시하는 형태로 GetStringData 함수를 사용했으며 구성은 아래와 같다


- 켬 / 끔 같이 스위치 형태는 String 타입의 배열 변수를 활용한다
- 해당 변수 값 기준으로 반복문을 통해 콤보 박스 리스트를 구성하고 현재 설정 중인 항목을 파악해 선턱된 상태로 표시한다
다음은 슬라이더 세팅

- 슬라이더는 현재 값만 파악해 그대로 적용해주면 된다
적용 버튼

취소 버튼

'개발 > Unreal' 카테고리의 다른 글
| 랙돌 (0) | 2026.04.16 |
|---|---|
| 게임 메뉴 (0) | 2026.04.16 |
| 데이터 에셋 (0) | 2026.04.13 |
| 인터랙티브 컷신 모드 (0) | 2026.04.13 |
| 웅크리기 해제 가능 여부 판단 기능 구현 (0) | 2026.04.12 |
