Ctrl + Shit + space 를 누르면 함수의 매개변수를 볼 수 있다.
void AShooterCharacter::FireWeapon()
{
UE_LOG(LogTemp, Warning, TEXT("Fire Weapon."));
if (FireSound)
{
UGameplayStatics::PlaySound2D(this, FireSound);
}
const USkeletalMeshSocket* BarrelSocket = GetMesh()->GetSocketByName("Barrel");
if (BarrelSocket)
{
const FTransform SocketTransform = BarrelSocket->GetSocketTransform(GetMesh());
if (MuzzleFlash)
{
UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), MuzzleFlash, SocketTransform);
}
FHitResult FireHit;
const FVector Start{ SocketTransform.GetLocation() };
// 회전축을 얻는 것
const FQuat Rotation{ SocketTransform.GetRotation() };
// 소켓으로 부터 전방 Vector 을 얻는 과정
const FVector RotationAxis{ Rotation.GetAxisX() };
const FVector End{ Start + RotationAxis * 50'000.f };
GetWorld()->LineTraceSingleByChannel(FireHit, Start, End, ECollisionChannel::ECC_Visibility);
if (FireHit.bBlockingHit)
{
DrawDebugLine(GetWorld(), Start, End, FColor::Red, false, 2.0f);
DrawDebugPoint(GetWorld(), FireHit.Location, 5.f,FColor::Red,false,2.0f);
}
}
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
if (AnimInstance && HipFireMontage)
{
AnimInstance->Montage_Play(HipFireMontage);
AnimInstance->Montage_JumpToSection(FName("StartFire"));
}
}
위 선형 대수학을 사용해서 Barrel 으로 부터 전방지점을 구하고 투사체를 발사해서 만약 맞았다면 Ray 와 Sphere 을 그리도록 구현했다.
두다다다다다다닫다