2024-05-12
깃허브! |
---|
https://github.com/ChangJin-Lee/ARproject |
★ https://github.com/ChangJin-Lee/SimpleShooter |
느낀점
DrawDebugCamera로 RayCast를 하기 위한 baseLocation을 뷰포트에서 어떻게 나타낼지에 대해서 탐구했다. 3인칭 슈팅게임에서는 총에서 raycast를 쏘는 것이 아닌 카메라에서 raycast를 쏘는 것이 일반적인데, GetPlayerViewPoint를 사용해서 카메라의 Location과 Rotator를 가져올 수 있었다.
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/DrawDebugCamera/
void DrawDebugCamera
(
const UWorld * InWorld,
FVector const & Location,
FRotator const & Rotation,
float FOVDeg,
float Scale,
FColor const & Color,
bool bPersistentLines,
float LifeTime,
uint8 DepthPriority
)
void AGun::PullTrigger()
{
UGameplayStatics::SpawnEmitterAttached(MuzzleFlash, Mesh, TEXT("MuzzleFlashSocket"));
APawn* OwnerPawn = Cast<APawn>(GetOwner());
if(OwnerPawn == nullptr) return;
AController* OwnerController = OwnerPawn->GetController();
if(OwnerController == nullptr) return;
FVector Location;
FRotator Rotation;
OwnerController->GetPlayerViewPoint(Location,Rotation);
DrawDebugCamera(GetWorld(), Location, Rotation, 90, 2, FColor::Red, true);
// DrawDebugCamera(GetWorld(), GetActorLocation(), GetActorRotation(), 90, 2, FColor::Red, true);
UE_LOG(LogTemp, Warning, TEXT("You Pull the Trigger!"));
}
Returns Player's Point of View For the AI this means the Pawn's 'Eyes' ViewPoint For a Human player, this means the Camera's ViewPoint
플레이어의 point of view를 가져옵니다. 3인칭 슈팅게임에서는 실제 총구에서 RayCast를 쏘아 총알이 맞았는지를 탐지하면 안됩니다. 카메라에서 Raycast를 쏘아야합니다. 즉 캐릭터에 부착된 카메라에서 RayCast를 쏘아야 합니다.
AI 들은 실제 눈을 통해 보지만 플레이어는 카메라를 통해 viewport를 봅니다.
UFUNCTION(BlueprintCallable, Category = Pawn)
ENGINE_API virtual void GetPlayerViewPoint( FVector& Location, FRotator& Rotation ) const;
void AController::GetPlayerViewPoint( FVector& out_Location, FRotator& out_Rotation ) const
{
GetActorEyesViewPoint( out_Location, out_Rotation);
}
void APawn::GetActorEyesViewPoint( FVector& out_Location, FRotator& out_Rotation ) const
{
out_Location = GetPawnViewLocation();
out_Rotation = GetViewRotation();
}