当前位置: 首页 > news >正文

[UE4]创建自定义AIController的方法(C++)

[UE4]创建自定义AIController的方法(C++)

https://dawnarc.com/2017/09/ue4%E5%88%9B%E5%BB%BA%E8%87%AA%E5%AE%9A%E4%B9%89aicontroller%E7%9A%84%E6%96%B9%E6%B3%95c-/

[UE4]创建自定义AIController的方法(C++)

Wednesday, 20:09, Sep 13, 2017 in UnrealEngine4

之前写过如何用C++创建自定义PlayerController方式:

FActorSpawnParameters SpawnInfo;
SpawnInfo.Instigator = Instigator;	
SpawnInfo.ObjectFlags |= RF_Transient;	// We never want to save player controllers into a map
SpawnInfo.bDeferConstruction = true;
AMyPlayerController* NewPC = GetWorld()->SpawnActor<AMyPlayerController>(AMyPlayerController::StaticClass(), SpawnLocation, SpawnRotation, SpawnInfo);

如果用同样的方式,在服务端创建AIController,会有问题,执行:

EPathFollowingRequestResult::Type AAIController::MoveToLocation(const FVector& Dest, ...);

返回值是Success,但是没有任何效果。

原因:
自己设置FActorSpawnParameters相关参数,对PlayerController可行,但是对AIController,相关参数设置不一样,导致AIController在服务端失效。

解决办法:
两种方式

方式一:AIControllerClass指定

1,先为Character指定AI Controller Class,且禁用AutoPossessPlayer。这段代码可以放在构造函数中,保证在Possess之前设置好。以下3个属性也可以在角色蓝图中指定。

AutoPossessPlayer = EAutoReceiveInput::Type::Disabled;
AutoPossessAI = EAutoPossessAI::PlacedInWorld;
AIControllerClass = AMyAIController::StaticClass();

2,Character被Spawn出来后,再执行:

void APawn::SpawnDefaultController();

如果AutoPossessAI设置为Disable,则接着执行一下Possess:

void AController::Possess(APawn* InPawn);

方式一:SpawnActor时使用默认FActorSpawnParameters。

 AMyAIController* PC = GetWorld()->SpawnActor<AMyAIController>(AMyAIController::StaticClass(), SpawnLoc, SpawnRot);

不要自己设置FActorSpawnParameters,因为AIController和PlayerController表现不一样。


 

 

 

 

 

 

 

相关文章:

  • eclipse + pydev远程调试OpenStack
  • 调用shell jenkins不能自动结束
  • Unreal 第三方 Python平台
  • 【UE4_C++】<14-3>用户界面 UI和UMG——为UI创建屏幕尺寸自适应缩放
  • 虚幻4DPI自适应缩放规则解析
  • Eclipse中打开windows资源管理器或打开文件夹的设置!(实例)
  • 在Eclipse中快速定位当前文件所在位置
  • AssetBundle详解与优化
  • 苹果电脑远程管理/屏幕共享的客方设置
  • 使用UnrealPak.exe创建Pak文件
  • 正确配置 Visual Studio Code 开发和调试 TypeScript
  • Typescript 基本数据类型(boolean、number、string、any、联合)
  • typescript let和const区别
  • 关于TypeScript中null,undefined的使用
  • typescript 类型断言
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Elasticsearch 参考指南(升级前重新索引)
  • Java-详解HashMap
  • log4j2输出到kafka
  • Making An Indicator With Pure CSS
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Travix是如何部署应用程序到Kubernetes上的
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue.js框架原理浅析
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 你不可错过的前端面试题(一)
  • 微信开源mars源码分析1—上层samples分析
  • 小程序01:wepy框架整合iview webapp UI
  • 原生Ajax
  • 06-01 点餐小程序前台界面搭建
  • 数据库巡检项
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (4)(4.6) Triducer
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (算法)Travel Information Center
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)基于IDEA的JAVA基础12
  • (转)大道至简,职场上做人做事做管理
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Framework .NET Core与 .NET 的区别
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net对接阿里云CSB服务
  • .net反编译的九款神器
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @NestedConfigurationProperty 注解用法
  • @ResponseBody
  • @Transactional类内部访问失效原因详解