基于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
);
手机扫一扫
移动阅读更方便
你可能感兴趣的文章