이득우의 언리얼 C++ 게임 개발의 정석
섹션이 BATTLE 상태로 전환되면 일정 시간 후에 AI와 아이템 상자를 스폰하도록 한다.
타이머를 실행시킬 때 전달하는 FTimerDelegate에 등록할 함수를 선언한다.
- FTimerDelegate는 일반 유니캐스트 델리게이트이므로 UFUNCTION() 매크로를 지정해주지 않아도 된다.
타이머를 실행할 때 FTimerDelegate 델리게이트를 전달하면 시간이 됐을 때 등록된 함수를 알아서 실행시켜 준다.
여기서는 별도 델리게이트를 선언하지 않고 FDelegate::CreateUObject() 함수를 이용해 즉석에서 델리게이트를 생성해 전달할 것이다.
AI와 아이템 상자가 생성될 시간을 선언한다.
타이머를 생성할 때 레퍼런스로 전달해 설정되는 FTimerHandle 관리 핸들도 선언한다.
필요한 헤더를 포함한다.
AI 생성, 아이템 상자 생성 타이머를 각각 등록한다.
- FTimerHandle 타입의 관리 핸들을 레퍼런스로 전달해 설정한다.
- FTimerDelegate::CreateUObjcet() 함수로 함수가 등록된 델리게이트를 즉석에서 만들어 전달한다.
- 각 시간 이후에 델리게이에 등록된 함수를 실행하고 반복하지 않는다.
섹션 중앙에서 위로 88cm 위치에서 AI를 생성한다.
섹션 중앙의 반경 6m 이내의 랜덤 지점에서 높이 30cm인 곳에 아이템 상자를 생성한다.
- FMath::RandPointInCircle(Radius) 함수로 반지름이 Radius인 원 내의 랜덤 지점을 가져올 수 있다.
- FVector(FVector2D, float)을 하면 자동으로 3차원 좌표로 변환해준다.
이때, 새로 생성된 섹션에는 자동으로 내비게이션 메시 계산이 되지 않는다.
Project Settings > Engine > Navigation Mesh > Runtime > Runtime Generaton: Dynamic으로 변경해준다.
- 이렇게 설정하면 새롭게 생성된 섹션에도 내비게이션 메시가 실시간으로 생성된다.
새로운 섹션에서도 AI와 아이템 상자가 생성되고 정상적으로 플레이어를 추격한다.
'Unreal Engine > 이득우의 언리얼 C++ 게임 개발의 정석' 카테고리의 다른 글
플레이어 스테이트(Player State) (0) | 2023.03.16 |
---|---|
캐릭터 상태 머신 적용 (0) | 2023.03.16 |
무한 맵을 위한 섹션 제작 (0) | 2023.03.14 |
INI 설정과 에셋 지연 로딩 (0) | 2023.03.14 |
프로젝트 정리와 모듈 추가 (0) | 2023.03.13 |