---------------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。