[Unreal]#15_Line Of Sight, Acceptance Radius of AI
Unreal 개발 중 "AI Controller"에 대해 알아보겠습니다.
"Simple Shooter Game"의 AI Player 개발 내용입니다.
Acceptance Radius
1. ShooterAIController.h
// ShooterAIController.h...
#pragma once
#include "CoreMinimal.h"
#include "AIController.h"
#include "ShooterAIController.generated.h"
/**
*
*/
UCLASS()
class SIMPLESHOOTERNEW_API AShooterAIController : public AAIController
{
GENERATED_BODY()
public:
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
private:
UPROPERTY()
class APawn* PlayerPawn;
private:
// 최대 시야 범위 값 Default 설정 및 Editor에 노출
UPROPERTY(EditAnywhere)
float AcceptanceRadius = 200.f;
};
- Acceptance Radius : AI가 목표지점에 도착했음을 인식하기 위한 최소한의 거리
2. ShooterAIController.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "ShooterAIController.h"
#include "Kismet/GameplayStatics.h"
void AShooterAIController::BeginPlay()
{
Super::BeginPlay();
PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
}
void AShooterAIController::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
SetFocus(PlayerPawn);
MoveToActor(PlayerPawn, AcceptanceRadius);
}
EPathFollowingRequestResult::Type MoveToActor
(
AActor * Goal,
float AcceptanceRadius,
bool bStopOnOverlap,
bool bUsePathfinding,
bool bCanStrafe,
TSubclassOf< UNavigationQueryFilter > FilterClass,
bool bAllowPartialPath
)
- Accceptance Radius 를 통해 Player를 중심으로 AI가 객체가 유지할 최소한의 거리를 보장합니다.
Line Of Sight
1. ShooterAIController::Tick(float DeltaSeconds)
void AShooterAIController::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
if (LineOfSightTo(PlayerPawn) == true)
{
SetFocus(PlayerPawn);
MoveToActor(PlayerPawn, AcceptanceRadius+300.f);
}else
{
ClearFocus(EAIFocusPriority::Gameplay);
StopMovement();
}
}
1. AAIController::LineOfSightTo()
bool AAIController::LineOfSightTo(
const AActor* Other,
FVector ViewPoint,
bool bAlternateChecks
) const
- AI의 Controller, 즉 AI를 소유하는 Controller가 특정 Actor를 볼 수 있는지 여부를 반환합니다.
2. AAIController::ClearFocus()
void AAIController::ClearFocus(EAIFocusPriority::Type InPriority)
- SetFocus()를 통해 설정한 Focal Point를 해제합니다.
3. AAIController::StopMovement()
void AAIController::StopMovement()
- Controller가 현재 수행 중인 Movemnt 동작을 멈춥니다.
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#17_Behavior Tree (1) | 2022.10.04 |
---|---|
[Unreal]#16_Behavior Tree Setting (0) | 2022.10.02 |
[Unreal]#15_FText, FString, FName (0) | 2022.09.27 |
[Unreal]#14_AI controller 생성 및 세팅 (0) | 2022.09.17 |
[Unreal]#13_State Machine, 상태 기계 (0) | 2022.08.29 |