public void PlanUpdateInThread() { if (mNavGroup.crowd.IsDisposed) { return; } //这里进入critter的dll,然后再调用recast的dll //目前有关crowd的方法还在研究中,没有使用 mNavGroup.crowd.Update(threadUpdateTimer); for (int i = 0; i < mPlanners.Length; i++) { NavState aPlan = mPlanners[i]; if (aPlan == null || aPlan.Update()) { continue; } aPlan.Exit(); if (!aPlan.Enter()) { RemoveAgent(i); } } }
//单独刷新一个plan的外部方法(这是一种很危险的方法,尽可能不要用) public void UpdateSinglePlan(int index) { NavState aPlan = mPlanners[index]; if (aPlan == null || aPlan.Update()) { return; } aPlan.Exit(); if (!aPlan.Enter()) { RemoveAgent(index); } }
//更新:寻路的计算更新循环 //这个更新是需要找一个unity上层的类来调用进行不断的更新的 public void MakeUpdate() { for (int i = 0; i < mPlanners.Length; i++) { NavState aMove = mMovers[i]; if (aMove == null || aMove.Update()) { continue; } aMove.Exit(); if (!aMove.Enter()) { RemoveAgent(i); } } }
public override bool Update() { //根据不同的移动计划进行不同的移动 HandleState(); if ((theAgent.flags & NavFlag.PlannerFailed) != 0) { //Debug.LogError(theAgent.transform.name + ": Planner failed."); Suspend(); } //在这里进行移动计划的移动,并根据返回值判断 else if (!mPlanner.Update()) { theAgent.flags |= NavFlag.PlannerFailed; //Debug.LogError(theAgent.transform.name + ": Planner update failed: " + mPlanner); } return(true); }