게임 엔진/Unreal

[Unreal] [Example] 인공지능 에이전트 (AISense)

2021. 1. 10. 17:46

인공지능을 제작할 때, 인공지능의 인지능력을 개발해야하는 상황이 생긴다.

인지능력의 예로는,

주변 객체들을 시각적으로 인지함,

주변 객체의 소리를 인지함,

주변 객체로부터의 공격을 인지함,

등의 상황을 생각해볼 수 있다.

 

AISense를 사용하기 위해서는 필요한 객체들은 다음과 같다.

1. 인공지능이 들어간 객체 (Pawn)

2. 인지능력을 통해 Pawn을 조종할 객체 (AIController)

3. 인지능력들을 관리할 객체 (AIPerception)

4. 추가될 인지능력들 (AISense_Sight, AISense_Damage)

 

 

Pawn (AAICharacter.cpp)

// 공격을 받으면 이 함수를 호출해준다.
// ex) Player가 인공지능을 공격 시, Player의 함수에서 이 함수를 호출
bool AAICharacter::TakeDamage(const FHitData& HitData)
{
	if (HitData.Damage != 0.0f)
	{
		ReportDamage(HitData);
		// ..
		return true;
	}
	return false;
}

// Damage를 받았다는 사실을 리포트한다.
// 이를 통해 AIPerception에서 공격자를 인지할 수 있게 된다.
// AIPerception->GetKnownPerceivedActors(nullptr, OutActors); 를 통해 참조할 수 있다.
void AAICharacter::ReportDamage(const FHitData& InHitData)
{
	UAISense_Damage::ReportDamageEvent(
		GetWorld(), 
		this,
		InHitData.DamageCauser, 
		InHitData.Damage,
		InHitData.DamageCauser->GetActorLocation(),
		GetActorLocation());
}

Blueprint에서 이 캐릭터에 이후 제작할 ABaseAIController의 Blueprint를 넣어주어야 한다.

 

 

AIController (ABaseAIController.cpp)

// Timer를 이용하여 UpdateTarget 함수를 매초 실행시킨다.
void ABaseAIController::OnPossess(APawn* InPawn)
{
	Super::OnPossess(InPawn);
	PossesedAICharacter = Cast<AAICharacter>(InPawn);

	if (GameUtils::IsValid(PossesedAICharacter))
	{
		RunBehaviorTree(PossesedAICharacter->GetBTree());
		FTimerHandle UpdateTargetTimerHandle;
		GetWorld()->GetTimerManager().SetTimer(
			UpdateTargetTimerHandle, this, &ABaseAIController::UpdateTarget, 1.0f, true);
	}
}

// AIPerception->GetKnownPerceivedActors(nullptr, OutActors); 를 통해 인지된 모든 객체를 가져온다.
// AIPerception->GetKnownPerceivedActors(UAISense_Damage::StaticClass(), OutActors); 와 같이 하면
// 특정 인지능력으로 인한 객체들만 참조할 수 있다.
void ABaseAIController::UpdateTarget()
{
	TArray<AActor*> OutActors;
	AIPerception->GetKnownPerceivedActors(nullptr, OutActors);
	for (AActor* Actor : OutActors)
	{
    	//..
	}
}

 

AIPerception & (AISight, AIDamage)

AIPerception은 AIController의 컴포넌트로 다음과 같이 제작한다.

AIPerception의 config로 여러가지 인지능력의 세팅값을 넣어줄 수 있다.

 

이제 시야에 대한 인지와, 공격에 대한 인지가 가능한 인공지능을 제작할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

'게임 엔진 > Unreal' 카테고리의 다른 글

[Unreal] 언리얼 메모리 관리 시스템 (Smart Pointer, GC)  (5) 2021.01.19
[Unreal] 언리얼 엔진 디버깅  (0) 2021.01.12
[Unreal] 테이블 데이터 이용 방법 (DataTable)  (0) 2020.12.30
[Unreal] [Example] Delegate 사용방법  (1) 2020.12.29
[Unreal] [Example] 타이머 이용 방법 (Timer)  (0) 2020.12.15
'게임 엔진/Unreal' 카테고리의 다른 글
  • [Unreal] 언리얼 메모리 관리 시스템 (Smart Pointer, GC)
  • [Unreal] 언리얼 엔진 디버깅
  • [Unreal] 테이블 데이터 이용 방법 (DataTable)
  • [Unreal] [Example] Delegate 사용방법
AlgorFati
AlgorFati
algorfati@gmail.com
AlgorFati
AlgorFati의 개발 기록
AlgorFati
전체
오늘
어제
  • 분류 전체보기 (111)
    • 경제 (0)
    • 서비스 운영 (3)
    • 시행착오 (1)
    • 프로그래밍 (50)
      • CS 개념 (3)
      • 알고리즘 (32)
      • C++ (7)
      • C# (3)
      • OS (1)
      • Python (4)
    • 사업 (0)
    • Back End (1)
    • 생활 (1)
    • 정보 보안 (0)
    • 게임 개발 (1)
    • Tool (2)
    • 기술 (0)
    • AI (2)
    • 게임 엔진 (50)
      • Unreal (36)
      • Unity (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Event Handling
  • aggregate geom
  • customize
  • Collision
  • ml agent
  • 대기업
  • Nullable
  • Serialize
  • 프로그래머스
  • Editor
  • c#
  • data asset
  • pathfinding
  • Animation
  • unity
  • 알고리즘
  • TickGroup
  • 불변성
  • 비동기 프로그래밍
  • Slate
  • asset to editor
  • debug draw
  • 취업
  • hp bar
  • Unreal
  • 카카오
  • property editor
  • geom
  • 코딩테스트
  • navmesh

최근 댓글

최근 글

hELLO · Designed By 정상우.
AlgorFati
[Unreal] [Example] 인공지능 에이전트 (AISense)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.