게임 수학 · 게임 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
0 / 2AI 난이도 조절 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
22강. AI 난이도 조절 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.