목록Game Dev (261)
KoreanFoodie's Study
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 엑셀 데이터의 활용 엑셀에 저장돼 있는 캐릭터의 스탯 데이터 테이블을 언리얼 엔진에 불러들이는 기능을 구현해본다. 캐릭터 스탯 데이터는 게임의 기반을 이루는 변하지 않는 데이터이므로 보통 게임 앱이 초기화될 때 불러들인다. 언리얼엔진은 게임 앱을 관리하기 위한 용도로 게임 인스턴스라는 언리얼 오브젝트를 제공한다. 이 게임 인스턴스가 캐릭터의 스탯을 관리하도록 설계하면 게임 앱이 초기화될 때 캐릭터 스탯 데이터를 불러들이고, 게임 앱이 종료될 때..
Pure Virtual Function 이 왜 거기서 나와? 언리얼을 공부하던 중, 플레이 중에 ESC 버튼을 누르면 라는 에러가 나오면서 종료가 되는 현상이 발생했다. 그것도 지속적으로! pure virtual 함수가 호출되었다니?? 나는 만든적도 없는데.. 하며 에러로그를 보니 내 실수가 아닌, 엔진 쪽 버그로 보였다. 자세히 읽어보면 이 부분이 문제라는 건데... Fatal error: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/Core/Private/Windows/WindowsPlatformMisc.cpp] [Line: 475] Pure virtual function being called 일단 구글링을 조금 해보다가, 임시 방편으로 해당 소스코드를 약간..
이득우님의 "이득우의 언리얼 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 에 비해 가지는 장점은 다음과 같다. 점프와 같은 중력을 반영한 움직임을 제공 다양한 움직임 설정 가능(기어가기, 날아가기, 수영하기..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 폰의 구성 요소 폰은 플레이어가 조작할 수 있는 액터이다. 인간형 폰을 제작할 때는 다음과 같은 요소를 고려해야 한다. 시각적 요소 : 인간형 폰이 되려면 애니메이션 기능이 필요하다. 애니메이션을 재생하도록 리깅(Rigging) 데이터를 추가한 메시를 스켈레탈 메시라고 한다(스켈레탈 메시 컴포넌트가 관리). 충돌 요소 : 인간형의 경우 캡슐 컴포넌트를 사용한다. 움직임 요소 : 폰 무브먼트 컴포넌트(FloatingPawnMovement 또는 C..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 게임플레이 프레임워크 게임의 규칙을 관리하는 게임 모드와 플레이어가 조종하는 액터인 폰에 대해 알아보자. 프로젝트 세팅의 Selected GameMode 를 보면, Default Pawn Class 항목에서 게임에 입장한 플레이어에게 주어질 조종할 수 있는 액터, 폰의 타입을 지정할 수 있다. 언리얼 에디터에서 각각 GameMode, Pawn 을 상속받은 ABGameMode, ABPawn 을 생성하자. 그 후, 월드 세팅에서 GameMode O..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 로깅 환경 설정 언리얼은 로깅 환경을 위해 UE_LOG 라는 매크로를 제공한다. UE_LOG(카테고리, 로깅 수준, 형식 문자열, 인자.. ) 로깅 수준은 크게 메시지(Log), 경고(Warning), 에러(Error) 이렇게 세 가지로 나뉜다. 언리얼 형식 문자열은 FString 을 이용해서 처리하는데, 다음과 같은 형식을 띤다. FString::Printf(TEXT("Actor Name : %s, ID : %d, Location X : %...