基於UGameplayStatics
Blueprint_PredictProjectilePath_ByObjectType
-
根據 Object Type,算出拋物線的點集合和檢測結果
static bool Blueprint_PredictProjectilePath_ByObjectType( const UObject* WorldContextObject, FHitResult& OutHit, TArray<FVector>& OutPathPositions, FVector& OutLastTraceDestination, FVector StartPos, FVector LaunchVelocity, bool bTracePath, float ProjectileRadius, const TArray<TEnumAsByte<EObjectTypeQuery> >& ObjectTypes, bool bTraceComplex, const TArray<AActor*>& ActorsToIgnore, EDrawDebugTrace::Type DrawDebugType, float DrawDebugTime, float SimFrequency = 15.f, float MaxSimTime = 2.f, float OverrideGravityZ = 0 );
-
代碼實現
FVector BeginLoc = GetActorLocation(); FVector LaunchVelocity = GetActorForwardVector() * 1000.0f; TArray<TEnumAsByte<EObjectTypeQuery> > ObjectTypes; ObjectTypes.Add(EObjectTypeQuery::ObjectTypeQuery1); TArray<AActor*> IgnoreActors; FHitResult HitResult; TArray<FVector> OutPatnPositions; FVector OutLastTraceDestination; //開始模擬 bool bIsHit = UGameplayStatics::Blueprint_PredictProjectilePath_ByObjectType( GetWorld(), HitResult, OutPatnPositions, OutLastTraceDestination, BeginLoc, LaunchVelocity, true, 0.0f, ObjectTypes, false, IgnoreActors, EDrawDebugTrace::ForDuration, 0.0f ); if (bIsHit) { UKismetSystemLibrary::PrintString(GetWorld(), HitResult.GetActor()->GetName()); }
Blueprint_PredictProjectilePath_ByTraceChannel
-
根據 ChannelChannel,算出拋物線的點集合和檢測結果
static bool Blueprint_PredictProjectilePath_ByTraceChannel( const UObject* WorldContextObject, FHitResult& OutHit, TArray<FVector>& OutPathPositions, FVector& OutLastTraceDestination, FVector StartPos, FVector LaunchVelocity, bool bTracePath, float ProjectileRadius, TEnumAsByte<ECollisionChannel> TraceChannel, bool bTraceComplex, const TArray<AActor*>& ActorsToIgnore, EDrawDebugTrace::Type DrawDebugType, float DrawDebugTime, float SimFrequency = 15.f, float MaxSimTime = 2.f, float OverrideGravityZ = 0 );
PredictProjectilePath
-
根據預測參數,推算結果
/** * Predict the arc of a virtual projectile affected by gravity with collision checks along the arc. * Returns true if it hit something. * * @param PredictParams Input params to the trace (start location, velocity, time to simulate, etc). * @param PredictResult Output result of the trace (Hit result, array of location/velocity/times for each trace step, etc). * @return True if hit something along the path (if tracing with collision). */ static bool PredictProjectilePath( const UObject* WorldContextObject, const FPredictProjectilePathParams& PredictParams, FPredictProjectilePathResult& PredictResult );
Blueprint_PredictProjectilePath_Advanced
-
根據預測參數,推算結果
static bool Blueprint_PredictProjectilePath_Advanced( const UObject* WorldContextObject, const FPredictProjectilePathParams& PredictParams, FPredictProjectilePathResult& PredictResult );
BlueprintSuggestProjectileVelocity
-
根據目標點,反算初速度
static bool BlueprintSuggestProjectileVelocity( const UObject* WorldContextObject, FVector& TossVelocity, FVector StartLocation, FVector EndLocation, float LaunchSpeed, float OverrideGravityZ, ESuggestProjVelocityTraceOption::Type TraceOption, float CollisionRadius, bool bFavorHighArc, bool bDrawDebug );
SuggestProjectileVelocity_CustomArc
-
根據目標點,反算初速度
static bool SuggestProjectileVelocity_CustomArc( const UObject* WorldContextObject, FVector& OutLaunchVelocity, FVector StartPos, FVector EndPos, float OverrideGravityZ = 0, float ArcParam = 0.5f );