목록Game Dev/Unreal C++ : Tutorial (15)
KoreanFoodie's Study
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 게임 데이터의 저장과 로딩 SaveGame 이라는 언리얼의 클래스를 상속받은 클래스를 이용해 게임 데이터를 저장하고 로드해보자. 이름은 ABSaveGame 으로 만든다. 게임 세이브 기능에는 각 저장 파일에 접근할 수 있는 고유 이름인 슬롯 이름이 필요하다. 슬롯 이름을 다르게 지정해 세이브 데이터를 여러 개 만들 수 있는데, 우리는 Player1 이라는 슬롯 이름을 사용한다. 기본 세이브 데이터 생성 로직은 플레이어 스테이트의 InitPlay..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 캐릭터의 스테이트 설정 AI 의 캐릭터 스테이트와 비슷하게, 플레이어의 캐릭터에도 스테이트 머신 모델을 구현해보자. PREINIT 스테이트 : 캐릭터 생성 전의 스테이트. 애셋은 설정돼 있으나 캐릭터와 UI 를 숨겨둠 LOADING 스테이트 : 캐릭터 애셋을 로딩. 현재 컨트롤러가 AI 인지 플레이어인지 구분 가능. 플레이어 컨트롤러인 경우 애셋 로딩이 완료될 때까지 캐릭터를 조종하지 못하도록 입력을 비활성화. READY 스테이트 : 캐릭터 애..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 프로젝트의 정리와 모듈 추가 이전에 작업한 C++ 파일들은 전부 ArenaBattle 이라는 폴더 하나에 몰려 있었다. 모듈화 및 정리를 위해 폴더를 정리하자. 헤더파일은 Public 폴더에서, CPP 파일은 Private 폴더에서 보관하도록 만든다. 다음과 같이 구성한다. uproject 파일을 우클릭한 후 메뉴에서 Generate Visual Studio project files 을 클릭하면 솔루션 탐색기의 폴더 구조가 바뀐다. 마찬가지로 ..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) AIController 와 내비게이션 시스템 NPC(Non Player Character) 에 인공지능을 추가해 플레이어를 쫓아가서 공격하도록 만들어 보자. 먼저 AIController 를 부모 클래스로 하는 ABAIController 클래스를 생성하는 것부터 시작해 보자. ABCharacter.cpp ... #include "ABAIController.h" ... AABCharacter::AABCharacter() { ... AIControl..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 엑셀 데이터의 활용 엑셀에 저장돼 있는 캐릭터의 스탯 데이터 테이블을 언리얼 엔진에 불러들이는 기능을 구현해본다. 캐릭터 스탯 데이터는 게임의 기반을 이루는 변하지 않는 데이터이므로 보통 게임 앱이 초기화될 때 불러들인다. 언리얼엔진은 게임 앱을 관리하기 위한 용도로 게임 인스턴스라는 언리얼 오브젝트를 제공한다. 이 게임 인스턴스가 캐릭터의 스탯을 관리하도록 설계하면 게임 앱이 초기화될 때 캐릭터 스탯 데이터를 불러들이고, 게임 앱이 종료될 때..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 캐릭터 소켓 설정 무기는 메시에 착용해야 캐릭터 애니메이션에 따라 무기가 움직인다. 언리얼은 소켓이라는 시스템을 제공하는데, 우리가 사용하는 워리어 캐릭터의 스켈레탈 메시에는 이미 hand_rSocket 이라는 이름의 소켓이 생성돼 있다. 프리뷰 에셋을 추가해서, 소켓의 위치를 조정해보자. 무기 애셋은 InfinityBlade : Weapons 여기서는 소켓의 위치 값은 (-9.4, 3.0, 5.3), 회전 값은 (18.4, 23.2, 83.0..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 콜리전 설정 콜리전은 물리적 충돌 영역을 의미하는데, 언리얼에서 콜리전은 크게 세 가지 방법으로 제작할 수 있다. 스태틱메시 에셋 : 스태틱메시 에셋에 콜리전 영역을 심는 방법이다. 스태틱메시 컴포넌트에서 비주얼과 충돌이라는 두 가지 기능을 설정할 수 있어 관리가 편리하다. 기본 도형(Primitive) 컴포넌트 : 구체, 박스, 캡슐 등의 기본 도형을 사용해 스태틱메시와 별도로 충돌 영역을 지정한다. 스켈레탈 메시를 움직일 때 주로 사용한다...
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 몽타주(Montage) 애님 그래프에 스테이트 머신을 삽입해 모든 캐릭터의 애니메이션을 처리할 수도 있지만, 경우의 수가 많아지면 스테이트 머신으로 이를 관리하는 것은 매우 어렵다. 따라서 언리얼은 특정 상황에서 원하는 애니메이션을 발동시키는 애니메이션 몽타주라는 기능을 제공한다. 먼저, 애니메이션 블루프린트에서 몽타주를 생성한다. 몽타주는 섹션(Section) 단위로 애니메이션을 관리한다. 위에서 본 것처럼, Attack1, Attack2, ..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 애니메이션 블루프린트 : 애니메이션 블루프린트를 이용해 애니메이션 시스템을 제작하기 전에, 먼저 두 가지 구성 요소를 알아보자. 애님 인스턴스 : 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공한다. 블루프린트와 C++ 로 제작할 수 있다. 애님 그래프 : 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간이다. 블루프린트로만 제작할 수 있다. 엔진에서 "새로운 C++ 클래스 (모든 클래스 ..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 캐릭터 모델 Pawn 대신 Character 액터를 만들어 조작해보자. Character 액터는 Pawn 액터를 상속받는데, Pawn 과 다른 점은 CharacterMovement 컴포넌트를 사용해 움직임을 관리한다는 것이다(Actor>>Pawn>>Character). 이 컴포넌트가 FloatingMovement 에 비해 가지는 장점은 다음과 같다. 점프와 같은 중력을 반영한 움직임을 제공 다양한 움직임 설정 가능(기어가기, 날아가기, 수영하기..