Make Unreal REAL.
article thumbnail
플레이어 스테이트(Player State)

이득우의 언리얼 C++ 게임 개발의 정석 언리얼 엔진은 게임 점수와 같은 플레이어의 데이터를 관리하기 위한 용도로 플레이어 스테이트를 제공한다. 새로운 플레이어 스테이트를 생성한다. CoreMinimal.h를 ArenaBattle.h로 변경해준다. PlayerState 클래스에는 다음 속성이 미리 설계되어 있다. FString PlayerName: 별명 float Score: 점수 여기서는 별도로 int32 타입의 GameScore 변수와 레벨을 표시하기 위한 CharacterLevel 변수를 선언한다. InitPlayerData() 함수에서 초깃값을 지정하기 때문에 기본이 무의미하므로 Transient 키워드를 지정한다. 생성자, Getter, 초기화 함수를 구현한다. SetPlayerName() 함수..

article thumbnail
캐릭터 상태 머신 적용

이득우의 언리얼 C++ 게임 개발의 정석 섹션에 상태 머신을 적용했던 것과 마찬가지로 캐릭터도 상태 머신 기반으로 동작하도록 변경한다. AI와 플레이어가 같은 캐릭터를 사용하므로, 각 동작은 구분해야 한다. 아래와 같은 상태를 갖도록 한다. PREINIT: 캐릭터 생성 전 초기화 상태. 캐릭터와 UI를 숨겨두며 데미지를 입지 않는다. LOADING: 지정된 캐릭터 에셋을 로딩하는 상태. 에셋 로딩이 완료될 때까지 조종을 비활성화 해야한다. 게임이 이미 시작된 시점이므로 컨트롤러가 AI인지 플레이어인지 구분할 수 있다. READY: 캐릭터 에셋 로딩이 완료된 상태. 이때부터 데미지를 입을 수 있으며 플레이어나 AI가 캐릭터를 조종할 수 있다. DEAD: HP가 0 이하가 되어 죽은 상태. 죽는 애니미에션 ..

article thumbnail
섹션에 AI, 아이템 상자 스폰

이득우의 언리얼 C++ 게임 개발의 정석 섹션이 BATTLE 상태로 전환되면 일정 시간 후에 AI와 아이템 상자를 스폰하도록 한다. 타이머를 실행시킬 때 전달하는 FTimerDelegate에 등록할 함수를 선언한다. FTimerDelegate는 일반 유니캐스트 델리게이트이므로 UFUNCTION() 매크로를 지정해주지 않아도 된다. 타이머를 실행할 때 FTimerDelegate 델리게이트를 전달하면 시간이 됐을 때 등록된 함수를 알아서 실행시켜 준다. 여기서는 별도 델리게이트를 선언하지 않고 FDelegate::CreateUObject() 함수를 이용해 즉석에서 델리게이트를 생성해 전달할 것이다. AI와 아이템 상자가 생성될 시간을 선언한다. 타이머를 생성할 때 레퍼런스로 전달해 설정되는 FTimerHan..

article thumbnail
무한 맵을 위한 섹션 제작

이득우의 언리얼 C++ 게임 개발의 정석 레벨을 하나의 섹션(구역) 단위로 나누고 하나의 섹션을 클리어하면 새로운 섹션이 등장하는 무한 맵을 만들기 위한 섹션을 제작해보겠다. 새로운 액터 클래스를 만든다. CoreMinimal.h를 ArenaBattle.h로 변경한다. SM_SQUARE 스태틱 메시를 저장할 컴포넌트 변수를 선언한다. Tick 기능은 사용하지 않을 것이므로 Tick() 함수 선언은 삭제한다. Tick 기능을 끄고 SM_SQUARE 스새틱 메시 에셋을 불러온 후 루트 컴포넌트로 지정한다. SM_SQUARE 스태틱 메시에는 각 방향별로 출입문과 섹션을 이어붙일 수 있도록 총 8개의 소켓이 부착되어 있다. 현재 가로 길이가 161cm인데 좌측 끝에 피벗이 존재하므로 배치할 떄는 Y축 -80.5..

article thumbnail
이름으로 Collision 채널 가져오는 방법
Unreal Engine/팁 2023. 3. 14. 20:29

How to get collision/trace channel by name in c++? Uh this should be marked as the answer. Unreal doesn’t expose the editor defined channel names in C++, so you need to define them manually as such: forums.unrealengine.com 같은 건 사실 없다.. 언리얼 엔진에서는 제공하지 않는 기능이다. 대신 프로젝트(주 게임 모듈)의 헤더인 {프로젝트명}.h 파일에 #define 전처리 지시자를 이용해 미리 매크로를 정의해놓고 사용하는 편법이 있다. 하지만 Collision 채널을 추가, 삭제, 이름 변경하는 경우에는 정의한 매크로와 일치하는지 ..

article thumbnail
INI 설정과 에셋 지연 로딩

이득우의 언리얼 C++ 게임 개발의 정석 우선 ABCharacterSetting 클래스는 ArenaBattleSetting 모듈에 생성된 언리얼 오브젝트이므로 CoreMiminal.h를 ArenaBattleSetting.h로 변경한다. 언리얼 엔진은 언리얼 오브젝트의 기본값을 유연하게 관리하도록 외부 INI 파일에서 기본 속성 값을 가져오는 기능을 제공한다. INI 파일에서 기본값을 불러들이기 위해서는 UCLASS 매크로에 config 키워드와 설정 이름을 추가해야 한다. 프로젝트의 Config/Default{설정 이름}.ini 파일을 참조한다. 애셋은 가상 경로만 알면 프로그램에서 로딩할 수 있다. INI에서 불러들인 가상 경로는 FSoftObjectPath라는 클래스로 저장된다. FSoftObject..

검색 태그