基于UGameplayStatics
根据 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()); }
根据 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 );
根据预测参数,推算结果
/** * 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 );
根据预测参数,推算结果
static bool Blueprint_PredictProjectilePath_Advanced( const UObject* WorldContextObject, const FPredictProjectilePathParams& PredictParams, FPredictProjectilePathResult& PredictResult );
根据目标点,反算初速度
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 );
根据目标点,反算初速度
static bool SuggestProjectileVelocity_CustomArc( const UObject* WorldContextObject, FVector& OutLaunchVelocity, FVector StartPos, FVector EndPos, float OverrideGravityZ = 0, float ArcParam = 0.5f );