您的位置:首页 > 大数据 > 人工智能

006_MyMOBA_AIPawnMove

2016-09-09 15:31 169 查看
---------------2015.8.17--------2015.8.--------李明阳--------------------

 

主要逻辑:

这个HeroAIPawn自动寻路,会和玩家抢“可拾取物”,首先在场景中放入可拾取物,然后AIPawn就走到“可拾取物”的位置。

UDNMOBAGame的Hero寻路是玩家鼠标点击的位置传到HeroAIController::StartMoveCommand(VectorWorldMoveLocation),这个过程中一直在传递参数WorldMoveLocation。在这里省掉那些逻辑,“可拾取物”位置直接作为WorldMoveLocation,HeroAIController直接进入StartMoveCommand()。

 

在这个过程中同步完成MiniMap来“监控”场景内容和AI的动向。

取消Findspot确认函数,取消场景管理生成的TempletPickup(TempletPickup,,AIPawn永远无法拾取到)

在场景中加入PathNode和Poly后,通过MiniMap和Log看到AI找不到路的时候会经常卡住,而且MoBaCreep自带的刚体布娃娃在AI卡住时好像工作起来不好,代码方面参考假装倒地做了适当改动,AI以胡萝卜作为目标点,寻路过程由于场景路况复杂,Path容易找不到路径,经常卡住,在原基础上做了点优化(当找不到路径时,随机选择一个PathNode作为新的目标点)

 

PostBeginPlay()

         AIPawn生成的时候,PostBeginPlay最终在Pawn::PostBeginPlay中生成HeroAIController,并最终在(父类)Controller中占有那个AIPawn。



可拾取物:

本打算用UTGame的可拾取物UTPickupFactory_SuperHealth,但是在SimpleGameInfo中UTGameInfo的东西,总感觉不太兼容。用UTPickupFactory,加入EventTouch和Bump都没有反应。(UTGame好像VS没法调试)

这里改用一个Trigger(Trigger_PawnsOnly.uc),

Components.Remove(Sprite)保留UTPickupFactory_SuperHealth的粒子特效,设为bNoDelete=false //Spawnable,设置可拾取物的Rotation

        

生成可拾取物:

functionSearchPickup()

场景管理缓存所有的PathNode在数组中,随机选择路点,生成可拾取物。可拾取物的位置作为AIpawn需要移动的目标点,进入移动状态,同时过一段时间后检查可拾取物是否还在,如果不在了重新进入Idle,同时30秒内没有获得拾取物,重新进入Idle,如果状态“挂了”,重新进入Idle。

 

角色可以移动了,移动过程中更像是在滑步(去掉AnimTree中的BlendbySpeed)



Event Touch

当这个Pickup被Touch后“告诉”场景管理器可拾取物数量变化,同时触碰者Pawn拥有的胡萝卜数量加1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息