I got a very simple shooter game so far. but I am facing one issue. I got a gun, and i am spawning a projectile from a muzzle of it and the projectile flys straight. But what is want is, to spawn from a muzzle and send a projectile to the centre of the screen (Crosshair) as usual Shooter games do.Hope you understood my issue, How can I handle this?
I have the same problem and not yet solved. Let’s stay in contact when one of us has solved it.
We have a player state that line traces through screen center. Code snippets for finding center and sending a trace through:
// get current camera location and rotation FVector cameraLocation = _playerController->PlayerCameraManager->GetCameraLocation(); FRotator cameraRotation = _playerController->PlayerCameraManager->GetCameraRotation(); FVector cameraDirection = cameraRotation.Vector().GetSafeNormal(); // calculate ray start point, ray end point, hit result, collision parameters // ray start point is the camera location // ray end point is a ray cast through the middle of the screen // collision query parameters determined by player controller (mainly to ignore hitting certain objects) FVector traceStartLocation = cameraLocation; FVector traceEndLocation = cameraLocation + MAXIMUM_INTERACTION_DISTANCE * cameraDirection; FHitResult traceHitResult(ForceInit); FCollisionQueryParams traceParameters = _playerController->GetCollisionQueryParameters(); // do ray trace _playerController->GetWorld()->LineTraceSingleByChannel(traceHitResult, // result traceStartLocation, // start traceEndLocation, // end ECC_Pawn, // collision channel traceParameters); // trace parameters
We need a projectile that spawns, not a line trace.
Dude i have solved this issue , but it might be little confusing, I’ll try my best)
I got a projectile.cpp class which contains UE4 engine’s component called “Projectile Movement component”
and has a custom function called “FireInDirection” which is responsible for firing bullet to the appropriate direction
Here is “ProjectileMovementComponent->Velocity” is responsible for both Direction and Speed
[FONT=Courier New]void AProjectile::FireInDirection(const FVector& ShootDirection)
//gives a velocity to the projectile with appropirate Shot Direction
ProjectileMovementComponent->Velocity = ShootDirection * ProjectileMovementComponent->InitialSpeed;
and then i got a gun.cpp class which has a function “SpawnProjectile” where you need to get a Player’s viewpoint which sets a current camera location and rotation .
then you need to use “CameraRotation.Vector()” which fives a center of the screen . and then you simply call “projectile.cpp” function LaunchInDirection() and pass value Center of the screen
and bullet will fire to the center of the screeen
[FONT=Courier New]void AGun::SpawnProjectile()
FVector LocationToSpawn = ProjectileSpawnPoint->GetComponentLocation();
FRotator RotationToSpawn = ProjectileSpawnPoint->GetComponentRotation();
TempProjectile = GetWorld()->SpawnActor<AProjectile>(ProjectileClass, LocationToSpawn, RotationToSpawn/Rotation of SM/);
TempProjectile->SetLifeSpan(2.f);//projectile will be destroyed after 2 secs after spawning
FVector LaunchDirection = CameraRotation.Vector();//gives a ceneter of the screen
TempProjectile->FireInDirection(LaunchDirection);//wiill send a projjectile to the center of the screen
Hope that will be helpful , I know that its a bit confusing explanation ))) I have tried all my best, or you can contact me to the e-mail:firstname.lastname@example.org for may be better explanation, but i don’t promise )))
wonderful ulanov, thank you very much for your effort, very big thank you. I will try the days to understand it.