본문으로 건너뛰기
게임 수학 · 게임 AI 기초집LESSON 22

AI 난이도 조절

난이도초급
예상 시간50분
선수지식21강의 군집·회피

22강. AI 난이도 조절

1. 이번 강의에서 해결할 문제

난이도를 바꿀 때 AIController, Character와 Behavior Tree 여러 곳의 숫자를 수정합니다. 한 적 유형의 튜닝 값을 DataAsset로 모으고 유효성 관계를 검사합니다.

2. 학습 목표

3. 핵심 개념

난이도는 숫자 하나가 아닙니다. 더 긴 시야, 빠른 이동, 짧은 판단 주기와 공격 쿨다운은 서로 다른 플레이 경험과 CPU 비용을 만듭니다.

DataAsset은 설정 원본이고 현재 Target, CurrentState, LastSeenTime은 AI 인스턴스의 런타임 상태입니다. 설정 에셋을 실행 중 수정하지 않습니다.

4. 단계별 실습

C++ · 파일 경로: Source/TopDownSurvival/Data/EnemyAIConfigData.h

EnemyAIConfigData.h
#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "EnemyAIConfigData.generated.h"

UCLASS(BlueprintType)
class TOPDOWNSURVIVAL_API UEnemyAIConfigData : public UPrimaryDataAsset
{
GENERATED_BODY()

public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Senses",
meta = (ClampMin = "0.0", Units = "cm"))
float SightDistance = 1400.0f;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Senses",
meta = (ClampMin = "0.0", ClampMax = "360.0", Units = "deg"))
float ViewAngle = 100.0f;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "State",
meta = (ClampMin = "0.0", Units = "cm"))
float ChaseDistance = 1200.0f;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "State",
meta = (ClampMin = "0.0", Units = "cm"))
float AttackDistance = 150.0f;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Movement",
meta = (ClampMin = "0.0", Units = "cm/s"))
float MoveSpeed = 320.0f;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Combat",
meta = (ClampMin = "0.1", Units = "s"))
float AttackCooldown = 1.2f;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Performance",
meta = (ClampMin = "0.05", Units = "s"))
float DecisionInterval = 0.25f;

UFUNCTION(BlueprintPure, Category = "AI Config")
bool HasValidRanges() const
{
return AttackDistance <= ChaseDistance &&
ChaseDistance <= SightDistance;
}
};

C++ · Enemy Character 적용

MathAIEnemyCharacter.cpp · ApplyConfig
void AMathAIEnemyCharacter::ApplyConfig(UEnemyAIConfigData* Config)
{
if (!IsValid(Config) || !Config->HasValidRanges())
{
UE_LOG(LogTemp, Error, TEXT("Invalid AI config"));
return;
}

AIConfig = Config;
GetCharacterMovement()->MaxWalkSpeed = Config->MoveSpeed;
AttackCooldown = Config->AttackCooldown;
}

Blueprint·Editor 작업

DA_AI_Normal과 DA_AI_Hard를 만듭니다. Normal은 1400/1200/150cm, Speed 320, Cooldown 1.2, Interval 0.25를 사용합니다. Hard는 값 하나씩 바꾸고 플레이 느낌과 비용을 기록합니다.

5. 코드와 수학·AI가 동작하는 이유

범위 관계를 검증하면 추적 가능 거리보다 시야가 짧거나 공격 거리가 더 큰 모순을 막습니다. Character는 이동·공격 값, Controller는 감지·판단 값, Service는 DecisionInterval을 읽어 각 책임에 적용합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

AI 난이도 조절 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“AI 난이도 조절” 작업 전 검토에서 채택해야 할 안전 기준은 무엇인가요?
  2. 문제 2‘DataAsset에 CurrentState 저장’ 실수를 판단할 때 “AI 난이도 조절” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

22강. AI 난이도 조절 미완료 상태