네비게이션 메시 시스템 설정

  • 섹션에서 NPC와 아이템 상자를 생성하는 기능을 추가
  • NPC와 아이템 상자가 생성될 시간을 지정할 속성을 추가
  • 타이머 기능(FTimerHandle 사용)을 사용해 일정 시간 이후에 생성한다
//h
class KGAME_API AABSection : public AActor
{
private:

    void OnNPCSpawn();

    UPROPERTY(EditAnywhere, Category = Spawn, Meta = (AllowPrivateAccess = true))
    float EnemySpawnTime;

    UPROPERTY(EditAnywhere, Category = Spawn, Meta = (AllowPrivateAccess = true))
    float ItemBoxSpawnTime;

    FTimerHandle SpawnNPCTimerHandle = { };
    FTimerHandle SpawnItemBoxTimerHandle = { };
  }

//cpp
AABSection::AABSection()
{
...
    EnemySpawnTime = 2.0f;
    ItemBoxSpawnTime = 5.0f;
}


void AABSection::SetState(ESectionState NewState)
{

.....
    case ESectionState::BATTLE:
    {
        Trigger->SetCollisionProfileName(TEXT("NoCollision"));
        for (UBoxComponent* GateTrigger : GateTriggers)
        {
            GateTrigger->SetCollisionProfileName(TEXT("NoCollision"));
        }

        OperateGates(false);


        GetWorld()->GetTimerManager().SetTimer(
            SpawnNPCTimerHandle,
            FTimerDelegate::CreateUObject(this, &AABSection::OnNPCSpawn),
            EnemySpawnTime,false);

        GetWorld()->GetTimerManager().SetTimer(SpawnItemBoxTimerHandle,
            FTimerDelegate::CreateLambda([this]()-> void 
        {
            FVector2D RandXY = FMath::RandPointInCircle(600.0f);
            GetWorld()->SpawnActor<AABItemBox>(GetActorLocation() + FVector(RandXY, 30.0f), FRotator::ZeroRotator);
        }), ItemBoxSpawnTime, false);

        break;
    }
.....
}

void AABSection::OnNPCSpawn()
{
    GetWorld()->SpawnActor<AABCharacter>(GetActorLocation() + FVector::UpVector * 88.0f, FRotator::ZeroRotator);
}

실행하면 플레이어 진입하고 2초 후에 가운데 위치에서 NPC 생성되고, 5초후에 NPC 반경 6미터 내의 랜덤한 위치에 아이템 상자가 생성된다
그러나 생성된 NPC 가만히 있는다. 그래서 새로 생성된 섹션 영역에도 내비게이션 메시가 만들어져야 NPC가 이를 활용해 플레이어로 이동할 수 있다.
이를 위해 게임 실행 중에 동적으로 내비 게이션 메시를 생성하도록 프로젝트에서 추가설정을 해줘야 한다. 프로젝트 세팅의 내비게이션 메시설정에서 RunTime Generation 속성의 값을 Dynamic으로 변경하면, 새롭게 생성된 섹션에도 내비게이션 메시가 실시간으로 만들어져 적용된다.

이 설정면 변경하면 새롭게 생성한 섹션 액터에도 내비게이션 시스템이 만들어져서 NPC는 플레이어를 쫓아온다

+ Recent posts