목록Categories (1099)
KoreanFoodie's Study
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 게임 데이터의 저장과 로딩 SaveGame 이라는 언리얼의 클래스를 상속받은 클래스를 이용해 게임 데이터를 저장하고 로드해보자. 이름은 ABSaveGame 으로 만든다. 게임 세이브 기능에는 각 저장 파일에 접근할 수 있는 고유 이름인 슬롯 이름이 필요하다. 슬롯 이름을 다르게 지정해 세이브 데이터를 여러 개 만들 수 있는데, 우리는 Player1 이라는 슬롯 이름을 사용한다. 기본 세이브 데이터 생성 로직은 플레이어 스테이트의 InitPlay..
언리얼에서 멤버 변수 선언의 윗줄에 UPROPERTY 매크로를 추가하면 자동으로 하단의 변수 선언 구문이 오른쪽으로 이동한다. 이를 자동조정하기 위해서는 비주얼 스튜디오 추가 확장 도구를 비주얼 스튜디오에 설치해야 한다! 링크는 아래에 있다 : https://github.com/hackalyze/ue4-vs-extensions GitHub - hackalyze/ue4-vs-extensions: Useful UE4 Visual Studio extensions. Useful UE4 Visual Studio extensions. Contribute to hackalyze/ue4-vs-extensions development by creating an account on GitHub. github.com 일단 ..
이득우님의 "이득우의 언리얼 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 을 클릭하면 솔루션 탐색기의 폴더 구조가 바뀐다. 마찬가지로 ..
언리얼 프로젝트 구조를 변경하고, 모듈을 추가하는 작업을 한 후, 비주얼 스튜디오에서 "솔루션 다시 빌드" 를 했는데 빌드를 실패했다. 그리고 이런 에러 메시지가 떴다! (22/6/17 추가 : 문제가 되는 dll, pdb 파일을 삭제하면 해결됨) 그리고 나온 크래시 리포터. LoginId:be4263854175519d068bceae3ec68e43 EpicAccountId:8d541bf740fd4c8aa2ddbf45e5614f37 Assertion failed: Object->HasAnyFlags( RF_BeginDestroyed ) && !Object->HasAnyFlags( RF_FinishDestroyed ) [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/Co..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) AIController 와 내비게이션 시스템 NPC(Non Player Character) 에 인공지능을 추가해 플레이어를 쫓아가서 공격하도록 만들어 보자. 먼저 AIController 를 부모 클래스로 하는 ABAIController 클래스를 생성하는 것부터 시작해 보자. ABCharacter.cpp ... #include "ABAIController.h" ... AABCharacter::AABCharacter() { ... AIControl..
이득우님의 "이득우의 언리얼 C++ 게임 개발의 정석" 책을 따라가며 실습한 내용을 정리한 포스팅입니다. 실습에 필요한 자료들은 이 링크에서, 제가 작업한 예제 소스 완성본은 여기에서 찾아보실 수 있습니다. (저는 언리얼 4.27.2 버전 기준으로 작업하였습니다) 엑셀 데이터의 활용 엑셀에 저장돼 있는 캐릭터의 스탯 데이터 테이블을 언리얼 엔진에 불러들이는 기능을 구현해본다. 캐릭터 스탯 데이터는 게임의 기반을 이루는 변하지 않는 데이터이므로 보통 게임 앱이 초기화될 때 불러들인다. 언리얼엔진은 게임 앱을 관리하기 위한 용도로 게임 인스턴스라는 언리얼 오브젝트를 제공한다. 이 게임 인스턴스가 캐릭터의 스탯을 관리하도록 설계하면 게임 앱이 초기화될 때 캐릭터 스탯 데이터를 불러들이고, 게임 앱이 종료될 때..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 연관 컨테이너 (Associative Container) 연관 컨테이너는 Key - Value 구조를 가진 컨테이너를 의미한다. set 은 key 값만 가지고 만든 집합이고, map 은 key-value 페어를 이용한다. multiset 은 중복값을 허용하는 set, multimap 은 중복 키값을 허용하는 map 이다. set template void print_set(std::set& s) { // 셋의 모든 원소들을 출력하기 std::cout
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! C++ 표준 템플릿 라이브러리 (STL : Standard Template Library) STL 은 다음과 같은 세 개의 라이브러리들을 의미한다. Container : 임의 타입의 객체를 보관 Iterator : 컨테이너에 보관된 원소에 접근할 수 있는 지정자 Algorithm : 반복자들을 가지고 일련의 작업을 수행 Container 컨테이너에는 배열처럼 객체들을 순차적으로 보관하는 시퀀스 컨테이너(sequence container) 와 키를 바탕으로 대응되는 값을 찾아주는 연관 컨테이너(associative container) 가 있다. 먼저 시퀀스 컨테이너의 경우 vector..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! TMP를 이용한 소수 판별 프로그램 컴파일러는 구조상 어떠한 식별자를 보았을때 '값'인지 '타입'인지 결정을 해야 한다. 다음의 예시를 보자. template int func() { T::t* p; } class A { const static int t; }; class B { using t = int; }; 위에서, 클래스 A 에 대해 func 함수를 특수화한다면, t 가 어떠한 int 값이 되어 T::t* p; 가 단순히 클래스 A 의 t 와 p 를 곱하는 식으로 해석이 된다. 반면, func 함수가 클래스 B 에 대해 특수화 된다면, T::t* p; 는 int 형 포인터 p 를..