AI는 일반적으로 Character, 인간형이 아닌경우 Pawn을 사용하게 되고 이러한 AI를 위한 AIController Class가 따로 존재한다.
class CH3ASSIGNMENT6_API AEnemyCharacter : public ACharacter
{
GENERATED_BODY()
public:
AEnemyCharacter();
// 순찰 포인트들을 저장해둘 배열.
// 에디터에서 인스턴스 단위로 배열을 수정하거나 설정할 수 있도록
// EditInstanceOnly, BlueprintReadWrite 카테고리를 열어둠.
UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Category = "AI")
TArray<AActor*> PatrolPoints;
};
PatrolPoints 는 AI가 순찰할 포인트를 저장하는 배열이다.
AEnemyCharacter::AEnemyCharacter()
{
// 이 캐릭터를 컨트롤할 AIController 클래스를 EnemyAIController로 지정
AIControllerClass = AEnemyAIController::StaticClass();
// 레벨에 배치되거나 스폰되면 자동으로 AIController가 할당되도록 설정
AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
}
월드에 스폰된 모든 객체에 AIController를 할당
MoveToActor(
MyEnemyChar->PatrolPoints[CurrentPatrolIndex],
5.0f, // AcceptanceRadius: 목표 지점 근처 몇 유닛 이내에 도달하면 멈출지
true, // bStopOnOverlap 목표와 충돌시 이동종료
true, // bUsePathfinding 장애물을 피할지 여부 필수
false, // bCanStrafe: 기본 이동 모드에서 좌우로 회전 없이 이동 가능 여부
nullptr,// FilterClass: 경로 필터. 디폴트 사용
true // bAllowPartialPath: 부분 경로 허용 여부
);
AI를 첫번째 인자 (AActor*타입)로 이동시키는 함수이다.
void AEnemyAIController::OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& Result)
{
Super::OnMoveCompleted(RequestID, Result);
if (Result.Code == EPathFollowingResult::Success)
{
MoveToCurrentPatrolPoint();
}
}
OnMoveCompleted는 MoveToActor함수가 종료될 때 자동으로 함께 호출되는 함수이다.
위 코드는 다시 MoveToCurrentPatrolPoint를 호출하여 무한히 반복하게 된다.
'UE5' 카테고리의 다른 글
C++ Behavior Tree (0) | 2025.04.08 |
---|---|
AI(2): Behavior tree (0) | 2025.04.04 |
Chat Base Ball 과제물 (1) | 2025.03.28 |
Delegate, Mode-State-Instance (0) | 2025.03.05 |
2.27 작업목록 (0) | 2025.02.27 |