//根据服务器GC_MOVE包插入新的路经点 public void InsertAutoMovePoint(GC_MOVE packet) { if (Cutscene.CutsceneManager.Instance.IsPlayingCutscene) { return; } //if (null == m_posList || null == m_BindObj) //{ // return; //} if (null == m_BindObj) { return; } //校验ServerID if (packet.Serverid != m_BindObj.ServerID) { return; } bool isChange = false; for (int i = 0; i < packet.posserialCount; ++i) { AutoMovePos pos = new AutoMovePos(); pos.m_nPosSerial = packet.posserialList[i]; pos.m_fDstPosX = ((float)packet.posxList[i]) / 100; pos.m_fDstPosZ = ((float)packet.poszList[i]) / 100; //措施,当发现堆积点过多的时候,清空一下,只插入头一个点 //if (m_posList.Count >= 32) //{ // ResetAutoMove(); //} //m_posList.Add(pos); if (IsRightPosSerial(pos.m_nPosSerial)) { m_nCurPosSerial = pos.m_nPosSerial; m_AutoMovePos = pos; isChange = true; } } if (isChange && m_AutoMovePos.m_nPosSerial >= 0) { BeginMove(m_AutoMovePos); } }
//private bool IsReachPoint(AutoMovePos pos) //{ // //先判断序列号 // if (pos.m_nPosSerial != m_nCurPosSerial) // { // return false; // } // Vector2 dstPos = new Vector2(pos.m_fDstPosX, pos.m_fDstPosZ); // Vector2 curPos = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z); // if (Vector2.Distance(curPos, dstPos) < 0.5f) // { // return true; // } // return false; //} //到达当前点,删除当前点,向下一个点移动 // private void ReachPoint() // { // if (null == m_posList || m_posList.Count <= 0) // { // return; // } //#if UNITY_ANDROID // BeginMove(m_posList[0]); // 移除当前点 // m_posList.RemoveAt(0); //#else // 移除当前点 // m_posList.RemoveAt(0); // 判断剩余点 // if (m_posList.Count <= 0) // { // 已经无点,停止移动 // StopMove(); // } // else // { // BeginMove(m_posList[0]); // } //#endif // } //移动开始 private void BeginMove(AutoMovePos dstPos) { if (null == m_BindObj) { return; } //记录当前点序列号 m_nCurPosSerial = dstPos.m_nPosSerial; //开始移动 Vector3 dest = new Vector3(dstPos.m_fDstPosX, 0.0f, dstPos.m_fDstPosZ); dest = ActiveScene.GetTerrainPosition(dest); // m_bIsMove = true; m_BindObj.MoveTo(dest, null, 0.0f); }