이득우의 언리얼 C++ 게임 개발의 정석 예제 폴더에서 UI_Result 위젯 블루프린트를 프로젝트 폴더에 복사한다. UI_Result 위젯 블루프린트도 UI_Menu와 비슷한 구성을 가진다. UI_Menu와 UI_Result는 btnReturnToTitle 버튼이 겹치고 여러 기능이 비슷하기 때문에, UI_Menu에서 부모로 지정했던 ABGameplayWidget을 상속한 클래스를 생성해 기존 기능을 이용하면서 남은 기능을 구현할 것이다. 지금부터 해야할 것은 결과를 띄우기 위한 점수 표시와 각 버튼의 기능들을 구현해 바인딩하는 것이다. btnReturnToTitle: 타이틀 화면 btnRetryGame: 재도전 상속 받은 클래스를 생성하기 전에 버튼 이벤트 처리는 그냥 부모 클래스에서 모두 처리하도록..
이득우의 언리얼 C++ 게임 개발의 정석 예제 폴더에서 UI_Menu 위젯 블루프린트를 프로젝트 폴더에 복사한다. UI_Menu 위젯 블루프린트는 대략 다음과 같은 구성이다. 배경 블러가 설정되어 있다. Size Box를 통해 크기를 설정한다. Vertical Box를 안에 배치해 스택처럼 하위 위젯들을 쌓는다. 디자이너의 Hierarchy에서 Is Variable이 체크되어 변수로 사용할 수 있는 하위 위젯은 굵은 글씨로 표시된다. 지금부터 해야할 것은 메뉴를 띄우기 위한 일시 정지 기능 구현과 각 버튼의 기능들을 구현해 바인딩하는 것이다. btnResume: 게임으로 돌아가기 btnReturnToTitle: 타이틀 화면 Project Settings에서 M 키를 GamePause 액션에 매핑한다. 현..
이득우의 언리얼 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..
언리얼 엔진은 다음 폴더를 알아서 헤더 경로에 포함시킨다. Source/{프로젝트명} Source/{프로젝트명}/Public Source/{프로젝트명}/Private Source/{프로젝트명}/Classes (Deprecated) 따라서 각 폴더에 세분화시킬 폴더를 생성한 후 .h 헤더 파일과 .cpp 소스 파일을 위치시켜 주면 된다. 세분화 폴더에는 엔진이 제공하는 헤더와 혼동되지 않도록 접두사를 붙여주면 좋다. 정리하고 나면 아래와 같은 구조를 갖는다. 기존에 이렇게 가져왔다면 #include "MyPawn.h" 앞으로는 이렇게 가져오면 된다. #include "FPSPawn/MyPawn.h"
이득우의 언리얼 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,..
이득우의 언리얼 C++ 게임 개발의 정석 게임 진행 난이도를 점진적으로 높이고 재미를 위해 전투에 관련된 기획 요소를 추가해본다. HP는 레벨업 시에만 회복된다. 이것은 이미 구현되어 있다. 무기를 들고 있을 때 더 긴 공격 범위를 갖는다. 무기에 랜덤으로 공격력 증가치를 부여해 최종 공격력을 계산한다. 현재 게임 스코어에 따라 NPC의 레벨도 증가하도록 한다. ABWeapon 클래스에 다음 변수들을 선언한다. AttackRange: 공격 범위 AttackDamage: 공추가 공격력 AttackModifier: 공격력 증가치 AttackDamageMin: 랜덤으로 추가 공격력을 정할 때 최소 공격력 AttackDamageMax: 랜덤으로 추가 공격력을 정할 때 최대 공격력 AttackModifierMin..