//์ปจํŠธ๋กค๋Ÿฌ ๋ฐ”๊พธ๊ธฐ ์šฉ ๋ณ€์ˆ˜ ์„ ์–ธ
APawn* PreviousPawn = UGameplayStatics::GetPlayerPawn(GetWorld(),0);
AController* HitActorController = Cast<APawn>(Hit.GetActor())->GetController();

//์ปจํŠธ๋กค๋Ÿฌ ๋ฐ”๊พธ๊ธฐ
UGameplayStatics::GetPlayerController(GetWorld(),0)->Possess(SelectedPawn);
HitActorController->Possess(PreviousPawn);

//๋ฐ”๋€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ดˆ๊ธฐํ™”&๋น„ํ—ค์ด๋น„์–ดํŠธ๋ฆฌ ๋‹ค์‹œ ์ž‘๋™์‹œํ‚ค๊ธฐ
Cast<AShooterAIController>(HitActorController)->SetUpAfterPossess();void AShooterAIController::SetUpAfterPossess()
{
//ํ”Œ๋ ˆ์ด์–ด์˜ ํฐ์ด ๋ฐ”๋€Œ๋ฉด ๋‹ค์‹œ ์ •์˜ํ•ด์ค˜์•ผํ•˜๋ฏ€๋กœ
PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);

if(AIBehavior != nullptr)
{
RunBehaviorTree(AIBehavior);
GetBlackboardComponent()->SetValueAsVector(TEXT("StartLocation"), GetPawn()->GetActorLocation());
}
}


์˜ค๋Š˜์˜ ๋„์ „

์ด์„์ด์„œ ๋งž์€ pawn(์ธ๊ณต์ง€๋Šฅ์ด ์กฐ์ข…ํ•˜๋Š” ์ ) ์— ๋น™์˜ํ•ด์„œ ๋‚ด๊ฐ€ ์กฐ์ข…ํ•˜๊ณ ,

ํ”Œ๋ ˆ์ด์–ด์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋น ์ ธ๋‚˜๊ฐ„ ํฐ์€ ๋‹ค์‹œ ์ธ๊ณต์ง€๋Šฅ์ด ์กฐ์ข…ํ•˜๋„๋ก ํ•˜์ž



์˜ค๋Š˜์˜ ํŠธ๋Ÿฌ๋ธ”

๋น™์˜ํ•˜๋Š”๊ฑฐ๊นŒ์ง„ ์–ด์บ์–ด์บ ๋๋Š”๋ฐ,

๋น ์ ธ๋‚˜๊ฐ„ ํฐ์ด AI์ปจํŠธ๋กค๋Ÿฌ๋กœ ์›€์ง์—ฌ์•ผ ํ•˜๋Š”๋ฐ ์•ˆ์›€์ง์ž„



์˜ค๋Š˜์˜ ๊ตํ›ˆ

ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋น™์˜ํ–ˆ๋‹ค๊ฐ€ ๋‚˜๊ฐ€๋ฉด AI์ปจํŠธ๋กค๋Ÿฌ์˜ ๋น„ํ—ค์ด๋น„์–ดํŠธ๋ฆฌ๊ฐ€ ๊บผ์ง€๋Š”๋“ฏํ•˜๋‹ค...

AI์ปจํŠธ๋กค๋Ÿฌ์˜ BeginPlay์—์„œ ๋น„ํ—ค์ด๋น„์–ดํŠธ๋ฆฌ๋ฅผ ์ž‘๋™ ์‹œ์ผœ์คฌ์œผ๋‹ˆ ๋‹ค์‹œ ๋น™์˜ํ•ด๋„ ์•ˆ์›€์ง์˜€๋˜๊ฑฐ๊ฐ™์Œ






ํ˜น์‹œ ๋‚ด๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ ์žˆ๋Š”๊ฑฐ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ๋ผ

๋นก๋Œ€๊ฐ€๋ฆฌ๋ผ ์ž˜๋ชจ๋ฆ„