Make Unreal REAL.
article thumbnail
캐릭터 선택 레벨 제작

이득우의 언리얼 C++ 게임 개발의 정석 예제 폴더에 있는 Resource > Chapter15 > Book > UI > UI_Select.uasset 파일과 Resource > Chapter15 > Maps > Select.umap 파일을 프로젝트 폴더에 복사한다. 플레이하면 화면 중앙에 캐릭터가 서 있는 모습을 볼 수 있다. 3점 조명 기법은 아니지만, 비슷한 방식으로 캐릭터를 비춘다. 현재 Eye Adaptation (Auto Exposure) 기능이 활성화되어 있어 플레이를 시작한 후 서서히 캐릭터가 보이는 것을 볼 수 있다. Post Process Volume을 배치해 Eye Adaption 기능을 끈다. Min Brightness와 Max Brightness를 같은 값으로 설정한다. Infin..

article thumbnail
타이틀 화면 제작

이득우의 언리얼 C++ 게임 개발의 정석 예제 폴더의 Resource > Chapter15 > Book > UI 폴더에 있는 UI_Title.uasset 파일을 Content > Book > UI 폴더에 복사한다. 추가적인 오브젝트나 환경 없이 UI만 띄울 것이기 때문에 빈 레벨을 Empty Level로 생성하고 저장한다. UI를 조작하기 위해 게임 모드와 플레이어 컨트롤러를 제작한다. 우선 새로운 UI 제어용 플레이어 컨트롤러를 만든다. CoreMinimal.h를 ArenaBattle.h로 변경한다. BeginPlay() 함수를 오버라이드 하도록 선언하고 UI를 생성하기 위한 클래스 변수와 UI를 저장하기 위한 변수를 생성한다. BP에서 UI 클래스를 지정할 수 있도록 (EditDefaultsOnly,..

article thumbnail
전투 시스템의 설계

이득우의 언리얼 C++ 게임 개발의 정석 게임 진행 난이도를 점진적으로 높이고 재미를 위해 전투에 관련된 기획 요소를 추가해본다. HP는 레벨업 시에만 회복된다. 이것은 이미 구현되어 있다. 무기를 들고 있을 때 더 긴 공격 범위를 갖는다. 무기에 랜덤으로 공격력 증가치를 부여해 최종 공격력을 계산한다. 현재 게임 스코어에 따라 NPC의 레벨도 증가하도록 한다. ABWeapon 클래스에 다음 변수들을 선언한다. AttackRange: 공격 범위 AttackDamage: 공추가 공격력 AttackModifier: 공격력 증가치 AttackDamageMin: 랜덤으로 추가 공격력을 정할 때 최소 공격력 AttackDamageMax: 랜덤으로 추가 공격력을 정할 때 최대 공격력 AttackModifierMin..

article thumbnail
게임 데이터의 저장과 로딩

이득우의 언리얼 C++ 게임 개발의 정석 언리얼 엔진은 SaveGame이라는 클래스를 통해 게임 데이터를 저장하고 로딩하는 기능을 제공한다. 윈도우, 맥, 안드로이드 등 각 플랫폼별로 알맞은 최적의 장소에 데이터가 저장되며, 에디터 모드에서는 Saved/SaveGames 폴더에 .sav 파일로 저장된다. CoreMinimal.h를 ArenaBattle.h로 변경한다. 게임 데이터에 레벨, 경험치, 플레이어 이름, 최고 점수를 저장시킨다. 각 데이터의 기본값을 지정한다. 이 기본값들은 저장된 게임 데이터가 없을 경우 초깃값으로 사용된다. 게임 데이터를 저장하고 불러오기 위해서는 고유의 슬롯 이름이 필요하다. 슬롯을 여러 개 만들어 세이브 데이터를 여러 개 만들 수 있다. 각 슬롯은 플레이어 번호를 통해 여..

article thumbnail
게임 스테이트(Game State)

이득우의 언리얼 C++ 게임 개발의 정석 현재 레벨을 다른 이름으로 새로운 레벨로 저장한다. 새로운 레벨에서 테스트를 위해 시작 섹션에 배치돼 있는 캐릭터와 아이템 상자를 모두 제거한 후 NavMeshBoundsVolume을 충분히 크게 만들어준다. 새로운 레벨을 생성한 후에는 필요에 따라 Project Settings > Maps & Modes에서 기본 레벨을 지정해주는 것을 잊지 말아야 한다. 시작 섹션에서 0점으로 시작해 문을 통과하면 새로운 섹션이 생성된다. 새로운 섹션에서 AI를 처치하면 1점을 획득한다. 이 게임은 싱글 플레이이기 때문에 플레이어의 점수가 곧 게임 스코어라고 할 수 있다. 멀티 플레이의 경우 두 개가 같지 않을 수 있다. 1번 플레이어는 왼쪽 지역을 탐험하고 2번 플레이어는 오..

article thumbnail
HUD UI 바인딩: 경험치

이득우의 언리얼 C++ 게임 개발의 정석 HUD UI에 경험치 데이터를 바인딩해본다. AI를 죽이면 AI에게서 얻을 수 있는 경험치를 플레이어에게 전달하고 축적해 레벨업하는 기능을 구현한다. 캐릭터 스탯 컴포넌트에서는 죽일 시 얻을 수 있는 경험치를 제공해야 하고, 캐릭터 클래스에서 캐릭터 스탯 컴포넌트를 통해서 가져올 수 있어야 한다. 플레이어 스테이트에는 플레이어의 축적 경험치를 보관하도록 설계해야 한다. 캐릭터가 죽을 때 AI가 플레이어에게 죽은 것인지 검사하고, 플레이어 컨트롤러를 통해 플레이어 스테이트를 갱신하는 로직을 추가해야 한다. 우선, 플레이어 스테이트에서 경험치 비율을 반환하는 함수와 경험치를 축적하는 함수를 선언한다. 게임 인스턴스의 ABCharacterTable에서 레벨에 해당하는 ..

검색 태그