Game Mode | Level Types | Level Loading & Unloading

김여울·2025년 5월 12일

사전캠프

목록 보기
17/24

Game Mode

  • 역할
    • 게임의 기본 규칙, 흐름, 플레이 방식을 정의하는 클래스
    • (예) 시작 조건, 플레이어 컨트롤 방식, 승패 조건 등
  • 특징
    • 레벨이 바뀌어도 게임 모드는 유지됨
    • 게임 전반의 공통 규칙을 일관되게 적용 가능


📍BP_GameMode

  • 디폴트 폰 클래스
    • 게임 시작 시 가장 먼저 생성되는 기본 캐릭터 (폰)
    • 게임 모드에 지정되어 있음
    • 레벨에서 플레이하면 이 폰이 자동으로 생성됨


게임 모드 설정


게임 모드 설정 & 실행 흐름 정리

1️⃣ 맵 설정

항목설명
에디터 시작 맵
(Editor Startup Map)
언리얼 에디터를 열었을 때 처음 열리는 맵
작업용 임시 맵 설정에 사용
게임 기본 맵
(Game Default Map)
게임을 실제로 실행(Play 또는 패키징)했을 때
처음 로딩되는 맵
설정 위치Edit > Project Settings > Maps & Modes
→ 각각 맵 지정 가능

2️⃣ 디폴트 폰 자동 생성
레벨에 직접 설치하지 않아도 게임 모드에서 설정된 Default Pawn Class(예: 르탄이)가 게임 시작 시 자동 생성됨

3️⃣ 게임 규칙에 따라 어디서든 실행 가능
게임 모드에 정의된 규칙(예: 어떤 캐릭터를 생성할지)을 기반으로 블루프린트 노드에서 호출하면 어디서든 해당 규칙 적용 가능
(예: Get GameMode ➡ 캐스팅 후 기능 실행 등)

🧠 요약
레벨에 캐릭터를 배치하지 않아도 게임 모드의 규칙에 따라 디폴트 폰(르탄이)이 자동 생성됨
해당 규칙은 블루프린트를 통해 어디서든 활용 가능

블루프린트 작성 방법



Persistent vs Streaming Level

🌀 개념

구분퍼시스턴트 레벨 (Persistent Level)스트리밍 레벨 (Streaming Level)
역할게임의 기본 뼈대가 되는 메인 레벨퍼시스턴트에 붙는 부속 레벨, 상황에 따라 추가/제거 가능
로딩 여부항상 로드되어 있음 (언로드 불가)필요할 때 로드하거나 언로드 가능
내용 구성전역 환경: 조명, UI, 게임 모드, 전역 기능 등 포함특정 기능 단위: 캐릭터, 파트 지역, AI 등 포함
예시게임 메인 씬, 월드의 기본 배경던전 구역, AI 전용 레벨, 임시 이벤트 씬 등

📌 레벨 구성 예시

  • 퍼시스턴트 레벨 (Default)

    • 땅, 조명, 하늘, UI 포함
    • 게임 시작 시 항상 로드됨
    • NavMesh 등 경로 탐색용 요소도 여기에 배치하는 것이 안정적
    • 장애물, 스테이지 콘텐츠는 스트리밍 레벨로 분리
  • 스트리밍 레벨 (Stage1)

    • 장애물, 액터, AI 등 콘텐츠 배치
    • 필요 시 동적으로 로드/언로드 가능

🔧 에디터 기본 맵 설정
1. 편집 > 프로젝트 세팅 > 맵 & 모드
2. 아래 항목 설정:

  • 에디터 시작 맵 (Editor Startup Map) ➡ Default (퍼시스턴트 레벨)
  • 게임 기본 맵 (Game Default Map) ➡ Default (퍼시스턴트 레벨)

이렇게 하면 에디터 실행 시, 그리고 게임 시작 시 퍼시스턴트 레벨이 항상 로드되며 안정적인 초기 상태 유지 가능


📦 스트리밍 레벨 빌드 포함 설정
1. 편집 > 프로젝트 세팅 > 패키징
2. 패키지된 빌드에 포함시킬 맵 목록에 스트리밍 레벨 추가
(예) /Game/Maps/Stage1

안 넣으면 빌드 후 게임에서 해당 레벨을 불러올 수 없음



Level Loading & Unloading

Load Level

AILevel 구성

1️⃣ AILevel 생성

  • 새로운 서브 레벨 AILevel 생성
  • Load AILevel이라는 로드용 함수 추가 예정

2️⃣ AILevel 구성

  • AI 르탄이만 배치
  • 아웃라이너에서 AI 르탄이를 제외한 모든 액터 삭제
    (조명, 카메라, 볼륨 등 전부 제거)

3️⃣ 불필요한 요소 제거 이유

  • 메인 레벨에서 조명·환경 등 이미 구성되어 있음
  • AILevel은 단순히 AI 객체(르탄이)만 로드하기 위한 목적

4️⃣ 기존 레벨에 로드

  • 메인 레벨이 실행 중일 때
    ➡ Load AILevel 함수 실행
    ➡ AILevel을 서브레벨로 로드

🧠 요약
AILevel은 AI 캐릭터만 포함된 서브레벨로, 메인 레벨 위에 로드되어 독립적인 AI 관리에 사용된다


✔ 레벨을 변수에 저장 가능

  • 스트리밍된 레벨은 레퍼런스(변수)로 저장할 수 있음
  • 이를 통해 언로드하거나 상태를 제어할 수 있음

✔ 언로드를 위한 Level 변수 생성

  • 레벨 언로드 시 어떤 레벨을 해제할지 지정해야 하므로
    로드한 레벨을 변수에 저장해두는 것이 필수

➡ 스트리밍된 레벨을 변수로 저장해두면 나중에 해당 레벨을 정확히 언로드하거나 제어할 수 있다



Unload Level

📍BP_GameMode > Unload AILevel 함수

  • 스트리밍된 AILevel을 언로드(제거)
  • Level 변수 : 언로드할 대상 레벨 참조
  • Set Is Requesting Unload and Removal
    ➡ In 체크 시 해당 레벨이 언로드됨
  • 🧠 게임 중 필요할 때 Unload AILevel 함수를 호출하면 변수로 저장된 AILevel을 제거할 수 있음

충돌 시 로드 트리거

📍BP_OverlapActor (Cube)

  • Trigger: Event Hit 어떤 물체가 이 액터와 부딪히면 실행

  • 흐름

    • Get Game Mode ➡ 현재 게임 모드 가져오기
    • Cast To BP_GameMode ➡ 우리가 만든 게임 모드로 캐스팅
    • Load AILevel 함수 호출
  • 🧠 무언가와 충돌 시, GameMode의 Load AILevel 함수를 호출하여 AILevel을 스트리밍 로드함

  • 레벨에 큐브 배치하기

    충돌 시 AILevel 로드 및 생성 정리

  • 큐브에 부딪힐 때마다 ➡ Event Hit 이벤트 발생

  • 그때마다 Load AILevel 함수 호출

  • 결과적으로 AI 르탄이가 포함된 AILevel이 계속 로드됨
    ➡ 따라서 충돌 횟수만큼 AI 르탄이가 생성됨

0개의 댓글