求助,关于AI move to函数

[复制链接]
查看4448 | 回复9 | 2018-5-28 16:49:01 | 显示全部楼层 |阅读模式
为什么AI move to 可以移动到 character所在位置,却不能移动到 Pawn所在的位置
mknmknmk | 2018-5-28 19:43:53 | 显示全部楼层
controller moveTO
回复 支持 反对

使用道具 举报

韧一呀 | 2018-5-28 19:46:50 | 显示全部楼层

这是一个函数吗?在蓝图里没有找到
回复 支持 反对

使用道具 举报

suxinhao1996 | 2018-5-29 08:26:03 | 显示全部楼层
move to 不光可以移动到角色,还可以移动到相应位置,你穿个LOcation
回复 支持 反对

使用道具 举报

zhu24708 | 2018-5-29 08:29:59 | 显示全部楼层
AI move to这个节点是针对拥有characterMovement组件的actor的。
回复 支持 反对

使用道具 举报

韧一呀 | 2018-5-29 08:40:00 | 显示全部楼层
zhu24708 发表于 2018-5-29 08:29
AI move to这个节点是针对拥有characterMovement组件的actor的。

那如果需要pawn达到这个效果,应该添加什么组件?pawn无法添加charactermovement
回复 支持 反对

使用道具 举报

mknmknmk | 2018-5-29 16:41:47 | 显示全部楼层
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;
回复 支持 反对

使用道具 举报

mknmknmk | 2018-5-29 16:53:38 | 显示全部楼层
首先有nav mesh bounds volume 和 并且设置nav movement
回复 支持 反对

使用道具 举报

韧一呀 | 2018-5-29 21:38:25 | 显示全部楼层
mknmknmk 发表于 2018-5-29 16:41
UAIAsyncTaskBlueprintProxy* MyObj = NULL;
        AAIController* AIController = Cast(Pawn->GetController()) ...

多谢,有源代码就很棒了。
回复 支持 反对

使用道具 举报

dubaiworld | 2018-6-12 10:56:40 | 显示全部楼层
mark for use
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1

主题

10

回帖

36

积分

初始化成员

积分
36