슈팅게임에서 캐릭터가 든 총의 조준선을 플레이어의 시선과 일치시키는건 굉장히 어렵다.
물론 방법은 있겠지만, 얕은 지식으론 접근하기 쉽지 않을 것같다.
그래서 아예 화면의 중앙에서 직선으로 총이 발사되도록 해버렸다.
-기존의 로직
FVector SpawnLocation = GetActorLocation();
FRotator SpawnRotation = GetActorRotation();
if (WeaponMesh && WeaponMesh->DoesSocketExist("MuzzleSocket"))
{
SpawnLocation = WeaponMesh->GetSocketLocation("MuzzleSocket");
SpawnRotation = WeaponMesh->GetSocketRotation("MuzzleSocket");
}
FinalAccuracy = MaxSpreadAngle * (1 - OriginalAccuracy);
FVector BaseDirection = SpawnRotation.Vector();
FVector SpreadDirection = FMath::VRandCone(BaseDirection, FMath::DegreesToRadians(FinalAccuracy));
FRotator FinalRotation = SpreadDirection.Rotation();
FActorSpawnParameters SpawnParams;
SpawnParams.Owner = this;
Bullet = GetWorld()->SpawnActor<ABullet>(BulletClass, SpawnLocation, FinalRotation, SpawnParams);
총구에 배치한 MuzzleSocket의 위치와 회전을 가져와 스폰시켰다.
그러나 이렇게하면 유저의 조준선에 궤적을 맞추기 어렵다.
-수정된 로직
FVector ControllerDirection;
FVector FinalLocation;
if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController())
{
if (AMyPlayerController* Controller = Cast<AMyPlayerController>(PlayerController))
{
FRotator ControlRotation = Controller->GetControlRotation();
ControllerDirection = ControlRotation.Vector();
FVector CameraLocation = Controller->PlayerCameraManager->GetCameraLocation();
FinalLocation = CameraLocation + (ControllerDirection * 20);
}
}
FinalAccuracy = MaxSpreadAngle * (1 - OriginalAccuracy);
FVector SpreadDirection = FMath::VRandCone(ControllerDirection, FMath::DegreesToRadians(FinalAccuracy));
FRotator FinalRotation = SpreadDirection.Rotation();
FActorSpawnParameters SpawnParams;
SpawnParams.Owner = this;
Bullet = GetWorld()->SpawnActor<ABullet>(BulletClass, FinalLocation, FinalRotation, SpawnParams);
캐릭터의 카메라위치와 컨트롤러의 회전을 가져와서 탄환을 스폰해줬다.
추가로, 카메라의 위치에서 곧바로 스폰하니 스프링암과 반응하여 카메라가 튀는 현상이 발생해서 위치를 앞으로 좀 전진시켜주었다.

'게임 개발 공부 > 언리얼엔진' 카테고리의 다른 글
| UE5 - aqProf.dll 오류 (0) | 2025.03.05 |
|---|---|
| UE5 | 블렌드 스페이스와 레이어드 블렌드 퍼 본 (1) | 2025.03.04 |
| UE5 - 랜드스케이프 블렌드 머티리얼 (0) | 2025.02.27 |
| UE5 | C++ - 수류탄 만들기 (0) | 2025.02.25 |
| UE5 | c++ - ProjectileMovement->SetUpdatedComponent() (0) | 2025.02.24 |