GameDesign 板


LINE

网页版 https://yekdniwue.blogspot.tw/2018/02/unreal-avoidance.html 在上篇 我们提到使用Unreal内建的Detour回避有一些限制 这些限制主要是纯BP专案无法透过C++修改行为造成的。 所以本篇是以C++专案为基础,说明如果要使用Detour的功能, 可能要做哪些修改才能达到。 需要注意的是这篇文章为了重现当初改写时遇到的过程,会有大量的文字描述, 没兴趣的话应该会啃不下去。 但是里面有一些遇到问题的解法,对解题过程有兴趣的人可以看看, 或是有更好的建议也欢迎~ 本篇会介绍下面几个项目,可以先看看有没有你要的内容再继续~ 1. 为什麽要复写CrowdManager 2. 继承并复写CrowdManager 3. 在执行时期更改AvoidanceGroup *****为什麽要复写CrowdManager***** 这是个很冗长的流程,当初我发现RVO可以动态透过API修改Avoidance Group, 但是用CrowdPathFollowingComponent(以下简称CPFC)却不行时,我也是吓了一跳。 於是我跑去追CPFC的程式码,发现要修改Detour回避行为的函式 全部都被定义为private(图1), 然後标头档的最後标示了CPFC的friend class是 CrowdManager。 显示即使继承CPFC也没办法改写回避的行为, 设定全部都必须要透过CrowdManager处理。 [图1.] 图1. 设定Detour的函式都是private。 然後跑去CrowdManager挖程式码,却发现CPFC那些设定相关的函式都没被用到... 代表要继承CrowdManager才能达到我希望能修改回避参数的目标。 *****继承并复写CrowdManager***** 首先当然就是先继承CrowdManager: 在Unreal Editor->New C++ Class->Show all classes 输入CrowdManager,并选择CrowdManager,输入名字与路径就可以完成继承。 在Edit->Project Settings->Engine->NavigationSystem内有CrowdManagerClass 将此栏位指向刚刚创好的MyCrowdManager。可参考图2 图2. 在Engine设定CrowdManagerClass为自己复写的class。 然後你就可以使用自定义的CrowdManager了........................... . . . . . . . . . . 如果是这样我干嘛写这篇!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 由於这部份有点复杂,我也是追了一阵子的程式码才找到原因 (其实是有点久我忘记细节) 详情可以用中断点追一下NavigationSystem.cpp里面的 constructor,InitializeForWorld, PostInitProperties,CreateCrowdManager这几个函式里面 有关CrowdManagerClass的部份。 总之那个CrowdManagerClass虽然开成可编辑的项目,实际上根本没作用, 程式执行过程中不会吃你设定的值。 所以回过头来,该如何让我们的CrowdManager生效呢? 我找到这篇讨论有说明在不修改引擎程式码的状况下,如何使自定义的CrowdManager起作 用 https://answers.unrealengine.com/questions/100941/ucrowdfollowingcomponent-51st-bot-does-not-move.html?childToView=102163#answer-102163 缩短网址: https://goo.gl/HR12Aj 这边就直接step by step说明: 1. 继承NavigationSystem。 2. 复写NavigationSystem::CreateCrowdManager() 直接在函式内生成你的CrowdManager并传进SetCrowdManager: SetCrowdManager(NewObject<UCrowdManagerBase>(this, UMyCrowdManager::StaticClass())); 3. 到Engine/Config/DefaultEngine.ini加下面两行 [/Script/Engine.Engine] NavigationSystemClassName=/Script/[YourProjectName].[NavigationClassName] 4.关掉Editor重开,就可以试试看你的CrowdManager是不是运作了~ *****在执行时期更改AvoidanceGroup***** 复写的CrowdManager之後,所有要对CPFC设定的行为就都可以达到了,大致上就是写类似 的函式: void UMyCrowdManager::SetAvoidanceGroup( UCrowdFollowingComponent* AgentComponent, int32 GroupFlags, bool bUpdateAgent = true) { AgentComponent->SetAvoidanceGroup(GroupFlags, bUpdateAgent); } void UMyCrowdManager::SetCrowdSlowdownAtGoal( UCrowdFollowingComponent* AgentComponent, bool bEnable, bool bUpdateAgent) { AgentComponent->SetCrowdSlowdownAtGoal(bEnable, bUpdateAgent); } 有时候为了方便能够能在blueprint作处理会比较好, 而CrowdManager好像在bp是拿不到的, 反正都C++了就直接作一个吧~ 定义 UFUNCTION(BlueprintCallable, Category = "MyCrowdManager") static UCrowdManagerBase* GetMyCrowdManager(UObject* WorldContextObject); 实作 UCrowdManagerBase* UMyCrowdManager::GetMyCrowdManager( UObject* WorldContextObject) { UNavigationSystem* navSystem = WorldContextObject->GetWorld()->GetNavigationSystem(); return navSystem->GetCrowdManager(); } 後续其实还是有东西可以写,大致上是Detour有提供视觉化的Debug功能, 可以介绍如何开启以及观察;如何设定/调整自定义的回避样板; 如何回避玩家。 不过这次就先写到这里就好~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.41.55
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1519843307.A.16E.html
1F:推 coolrobin: 推推,坐等续集 www 03/01 20:17
2F:推 damody: 123 03/02 09:45
3F:推 breakself: 321 03/06 10:34
※ 编辑: yekdniw (59.120.146.90 台湾), 07/15/2020 11:08:10







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP