// Called every frame void UGrabber::TickComponent( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) { Super::TickComponent( DeltaTime, TickType, ThisTickFunction ); if (!PhysicsHandle) { return; } if (PhysicsHandle->GrabbedComponent) { PhysicsHandle->SetTargetLocation(GetReachLineEnd()); } }
const FHitResult UGrabber::GetFirstPhysicsBodyInReach() { // Line trace FHitResult HitResult; FCollisionQueryParams TraceParms(FName(TEXT("")), false, GetOwner()); GetWorld()->LineTraceSingleByObjectType(OUT HitResult, GetReachLineStart(), GetReachLineEnd(), FCollisionObjectQueryParams(ECollisionChannel::ECC_PhysicsBody), TraceParms); return HitResult; }
// Called every frame void UGrabber::TickComponent( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) { Super::TickComponent( DeltaTime, TickType, ThisTickFunction ); /// if the physics handle is attached if (PhysicsHandle && PhysicsHandle->GrabbedComponent) { /// move the object we're holding PhysicsHandle->SetTargetLocation(GetReachLineEnd()); } }
// Called every frame void UGrabber::TickComponent( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) { Super::TickComponent( DeltaTime, TickType, ThisTickFunction ); if (!PhysicsHandle) { return; } // If the physics component is attached if (PhysicsHandle->GrabbedComponent){ // move the objedt that we're holding PhysicsHandle->SetTargetLocation(GetReachLineEnd()); } }
// Called every frame void UGrabber::TickComponent( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) { Super::TickComponent( DeltaTime, TickType, ThisTickFunction ); /// If the physics handle is attached (holding some component) if (PhysicsHandle->GrabbedComponent) // Why is GrabbedComponent variable publicly accessable? { /// Move the object to match pawn's new position FVector LineTraceEnd = GetReachLineEnd(); PhysicsHandle->SetTargetLocation(LineTraceEnd); } }
/// Return hit for first physics body in reach const FHitResult UGrabber::GetFirstPhysicsBodyInReach(){ FVector PlayerViewPointLocation; /// Set up query parameters FCollisionQueryParams TraceParameters(FName(TEXT("")), false, GetOwner()); /// Line-trace (AKA ray-cast) out to reach distance FHitResult HitResult; GetWorld()->LineTraceSingleByObjectType( OUT HitResult, GetReachLineStart(), GetReachLineEnd(), FCollisionObjectQueryParams(ECC_PhysicsBody), TraceParameters ); return HitResult; }
const FHitResult UGrabber::GetFirstPhysicsBodyInReach() { /// Setup query parameters FCollisionQueryParams TraceParameters(FName(TEXT("")), false, GetOwner()); FHitResult HitResult; /// Line-trace (Aka Ray-cast) out to reach distance GetWorld()->LineTraceSingleByObjectType( OUT HitResult, GetReachLineStart(), GetReachLineEnd(), FCollisionObjectQueryParams(ECollisionChannel::ECC_PhysicsBody), TraceParameters ); /// See what we hit AActor* ActorHit = HitResult.GetActor(); if (ActorHit) { UE_LOG(LogTemp, Warning, TEXT("Line trace hit: %s"), *(ActorHit->GetName())) } return HitResult; }
const FHitResult UGrabber::GetFirstPhysicsBodyInReach() { FHitResult LineTraceHit; ///Setup query parameters FCollisionQueryParams TraceParameters(FName(TEXT("")), false, GetOwner()); GetWorld()->LineTraceSingleByObjectType( OUT LineTraceHit, GetReachLineStart(), GetReachLineEnd(), FCollisionObjectQueryParams(ECollisionChannel::ECC_PhysicsBody), TraceParameters ); AActor* actorHit = LineTraceHit.GetActor(); if (actorHit) { UE_LOG(LogTemp, Warning, TEXT("Line trace hit: %s"), *(actorHit->GetName())); } return LineTraceHit; }
const FHitResult UGrabber::GetFirstPysicsBodyInReach() { // Ray-cast to reach distance FHitResult LineTraceHitResult; FCollisionQueryParams CollisionQueryParams(FName(TEXT("")), false, GetOwner()); GetWorld()->LineTraceSingleByObjectType(OUT LineTraceHitResult, GetReachLineStart(), GetReachLineEnd(), FCollisionObjectQueryParams( ECC_PhysicsBody), CollisionQueryParams); // See what we hit auto ActorHit = LineTraceHitResult.GetActor(); if (ActorHit) { UE_LOG(LogTemp, Warning, TEXT("Hit %s"), *(ActorHit->GetName())); } return LineTraceHitResult; }