목록Game Dev (261)
KoreanFoodie's Study
언리얼 오브젝트 언리얼 오브젝트는 언리얼 엔진의 관리를 받는 객체이다. 언리얼이 객체를 관리하게 되는 이점은 여러가지가 있는데, 먼저 클래스의 타입체킹을 빠르고 간편하게 할 수 있다는 것, 그리고 가비지 컬렉션을 자동으로 해 주는 것 등이 있겠다. 언리얼 오브젝트는 U 로 시작하고, 일반 C++ 오브젝트는 F 로 시작하는 것을 권장하고 있다. 언리얼 오브젝트의 전체 특징은 다음과 같다 : CDO(Class Default Object) : 객체의 초기 값을 자체적으로 관리 Reflection : 객체 정보를 런타임에서 실시간 조회가 가능 GC(Garbage Collection) : 참조되지 않는 객체를 메모리에서 자동 해제할 수 있음 Serialization : 객체와 속성 정보를 통으로 안전하게 보관하고..
언리얼 빌드 시스템 그렇다면 UClass 타입의 정보는 무엇이고 실제 객체의 정보는 무엇일까? 이를 이해하기 위해서는, 언리얼 빌드 시스템에 대해 공부할 필요가 있다. (디테일한 내용은 이득우님 블로그를 참조함) 먼저, 언리얼은 크로스 플랫폼으로 동작해야 하기 때문에, 프로젝트의 폴더 구조와 소스파일을 기반으로 언리얼 빌드 툴이 OS 에 맞는 솔루션을 생성하게 된다. 비주얼 스튜디오에서 빌드시, Editor 로 끝나는 설정을 클릭하면 에디터용 dll 을 생성하는 구성이며, Editor 가 붙어 있지 않을 경우 실행용 exe 파일을 생성한다. 즉, Development Editor 설정을 누르면 디버깅할 수 있는 개발 버전으로, 에디터용 dll 을 만들도록 컴파일된다. 컴파일된 dll 파일들은 interm..
GetClass vs StaticClass 코드를 짜다보면, 특정 객체의 클래스 정보를 알기 위해 GetClass 혹은 StaticClass 를 쓰는 것을 볼 수 있다. 그런데 이 둘의 차이는 무엇일까? 한 줄 요악 : StaticClass 는 컴파일 타임에서 생성된 UClass 타입의 정보를 얻어오는 것이며, GetClass 는 런타임에서 실제 객체의 클래스를 조회할때 사용된다. AMyActor* ActorPtr = NewObject(...); UObject* ObjPtr = Actor; UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor UClass* ObjectClass = UObject::StaticClass(); // UObject UCla..
Level Design 컨셉 : 무한맵. 4 개중의 하나의 방향으로 이동함. 목표 지점이 정해져 있음. 목표지점에 도달하여, 성화를 봉송하면 게임이 클리어. 전투 : 새 공간에 도착하면, 문이 닫히면서 적이 랜덤으로 스폰된 적과 싸우게 됨. 목표 지점에 가까이 갈수록 적이 강력해짐. 목표 지점 방에서는 보스와 전투를 하게 만들 수도 있음. 전투 완료 : 적을 전부 무찌르면, 2개의 아이템 박스가 나옴. 이때 선택을 해야 함. 선택지는 다음과 같음. 무기변경 무기강화 무기 내구도 수리 캐릭터 HP 증가 캐릭터 이동속도 증가 캐릭터 공격속도 증가 다만 2 가지 전부 효과 카테고리는 같은데, 하나는 "100% 확률로 10% 성능 향상" 이며, 나머지 하나는 "10% 확률로 성능 50% 상승, 40%확률로 성능..
이득우님의 "이득우의 언리얼 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..