【UE4 C++】抛物线路径、发射轨道相关
阅读原文时间:2023年07月08日阅读:1

基于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
    );

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器