UE5

AI (1)

개발꼬순내 ㅣ 2025. 4. 1. 21:55

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