Make Unreal REAL.
article thumbnail
HUD UI 바인딩: 이름, 체력, 레벨, 점수

이득우의 언리얼 C++ 게임 개발의 정석 현재 UI_HUD 위젯 블루프린트의 모습은 다음과 같다. 플레이어의 이름과 HP 정보 등이 표시돼야 하므로, 플레이어 스테이트와 캐릭터 스탯 컴포넌 둘 모두에 바인딩해야 한다. 플레이어 스테이트에 상태가 변경되었을 때 발동할 멀티캐스트 델리게이트를 선언한다. 캐릭터 스탯 컴포넌트에는 OnHPChanged 델리게이트가 이미 선언되어 있다. HUD UI에서 두 곳에 있는 델리게이트에 위젯을 갱신하는 함수를 등록해 바인딩할 것이다. 캐릭터 스탯 컴포넌트와 플레이어 스테이트의 델리게이트에 함수를 등록해 바인딩하는 선언한다. 두 델리게이트에 바인딩 할 UI 갱신 함수도 선언한다. NativeConstruct() 함수는 UI 생성이 완료된 후 위젯을 초기화하는 시점에 호출된..

article thumbnail
HUD UI 추가

이득우의 언리얼 C++ 게임 개발의 정석 예제 폴더의 Resource > Chapter14 > Book > UI 폴더에 있는 UI_HUD.uasset 파일을 복사해 프로젝트의 Content > Book > UI 폴더에 붙여넣는다. 위젯 블루프린트 에셋이다. UI_HUD의 부모 클래스로 지정할 새로운 UserWidget 클래스를 만든다. CoreMinimal.h를 ArenaBattle.h로 변경해준다. UI_HUD 위젯 블루프린트를 열어 부모 클래스를 UUserWidget 클래스를 상속한 ABHUDWidget 클래스로 변경해준다. 플레이어 컨트롤러에서 UI_HUD 위젯을 생성하고 화면에 띄워보겠다. 위젯 생성은 플레이어 컨트롤러의 BeginPlay() 함수에서 내부적으로 수행된다. 그러므로, 위젯 생성 코..

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..

검색 태그