UAIAsyncTaskBlueprintProxy* MyObj = NULL; 
        AAIController* AIController = Cast<AAIController>(Pawn->GetController()); 
        if (AIController) 
        { 
                UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject); 
                MyObj = NewObject<UAIAsyncTaskBlueprintProxy>(World); 
 
                FAIMoveRequest MoveReq; 
                MoveReq.SetUsePathfinding(true); 
                MoveReq.SetAcceptanceRadius(AcceptanceRadius); 
                MoveReq.SetReachTestIncludesAgentRadius(bStopOnOverlap); 
                if (TargetActor) 
                { 
                        MoveReq.SetGoalActor(TargetActor); 
                } 
                else 
                { 
                        MoveReq.SetGoalLocation(Destination); 
                } 
                MoveReq.SetNavigationFilter(AIController->GetDefaultNavigationFilterClass()); 
                 
                FPathFollowingRequestResult ResultData = AIController->MoveTo(MoveReq); 
                switch (ResultData.Code) 
                { 
                case EPathFollowingRequestResult::RequestSuccessful: 
                        MyObj->AIController = AIController; 
                        MyObj->AIController->ReceiveMoveCompleted.AddDynamic(MyObj, &UAIAsyncTaskBlueprintProxy::OnMoveCompleted); 
                        MyObj->MoveRequestId = ResultData.MoveId; 
                        break; 
 
                case EPathFollowingRequestResult::AlreadyAtGoal: 
                        World->GetTimerManager().SetTimer(MyObj->TimerHandle_OnInstantFinish, MyObj, &UAIAsyncTaskBlueprintProxy::OnAtGoal, 0.1f, false); 
                        break; 
 
                case EPathFollowingRequestResult::Failed: 
                default: 
                        World->GetTimerManager().SetTimer(MyObj->TimerHandle_OnInstantFinish, MyObj, &UAIAsyncTaskBlueprintProxy::OnNoPath, 0.1f, false); 
                        break; 
                } 
        } 
        return MyObj; |