IEnumerator MovePlayerByMarkSpeed() { bool isStopMove = false; int countNode = 0; int maxCountNode = PathNodes.Length; EndPos = PathNodes[1]; // Debug.Log("Unity:"+"MovePlayerByMarkSpeed -> start time "+Time.realtimeSinceStartup); float timeLastVal = Time.realtimeSinceStartup; float timeRotationVal = 0f; do { if (JiFenJieMianCtrl.GetInstance().GetIsShowFinishTask() && XkGameCtrl.IsLoadingLevel) { Debug.Log("Unity:" + "MovePlayerByMarkSpeed -> IsLoadingLevel " + XkGameCtrl.IsLoadingLevel + ", IsShowFinishTask " + JiFenJieMianCtrl.GetInstance().GetIsShowFinishTask()); yield break; } if (PlayerSt == PlayerTypeEnum.CartoonCamera) { if (XkGameCtrl.GetInstance().IsCartoonShootTest) { Debug.Log("Unity:" + "MovePlayerByMarkSpeed -> IsCartoonShootTest " + XkGameCtrl.GetInstance().IsCartoonShootTest); yield break; } if (!PlayerCamera.GetActiveCamera()) { PlayerObj.SetActive(false); isStopMove = true; IsStopMovePlayer = true; yield break; } } else { if (XKPlayerHeTiData.IsActiveHeTiPlayer) { IsStopMovePlayer = true; yield break; } } if (IsMoveToAiMark) { countNode = 0; yield return(new WaitForSeconds(0.1f)); continue; } if (XKTriggerStopMovePlayer.IsActiveTrigger) { yield return(new WaitForSeconds(0.1f)); continue; } if (pcvr.GetInstance().m_SSMiGuTvCheck != null && pcvr.GetInstance().m_SSMiGuTvCheck.IsDisplayMiGuPayUI) { //咪咕电视游戏支付界面显示时,停止镜头的运动. yield return(new WaitForSeconds(0.1f)); continue; } if (XkGameCtrl.GetInstance().m_GameUICom != null && XkGameCtrl.GetInstance().m_GameUICom.IsShowGameBaoYueUI) { //游戏包月UI界面显示时,停止镜头的运动. yield return(new WaitForSeconds(0.1f)); continue; } if (XkGameCtrl.PlayerActiveNum <= 0) { //玩家激活数量小于1时,镜头停止前进. if (PlayerSt == PlayerTypeEnum.FeiJi) { yield return(new WaitForSeconds(0.1f)); continue; } } if (XkGameCtrl.PlayerActiveNum <= 0 && PlayerSt != PlayerTypeEnum.CartoonCamera) { if (!XkGameCtrl.IsMoveOnPlayerDeath) { XkGameCtrl.PlayerYouLiangCur = 0; timeLastVal = Time.realtimeSinceStartup; yield return(new WaitForSeconds(0.1f)); continue; } } else { if (IsDelayMovePlayer) { IsDelayMovePlayer = false; ResetIsPlayerTingLiu(); yield return(new WaitForSeconds(TimeDelayMove)); continue; } } float ds = 0f; float dTime = Time.realtimeSinceStartup - timeLastVal; if (dTime > 1f) { dTime = TimeUnitMove; } /*else { * float minTimeUnit = 0.03f; * dTime = dTime > minTimeUnit ? minTimeUnit : dTime; * }*/ bool isRecordDTime = false; if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.FeiJiJiTai) { if (PlayerSt == PlayerTypeEnum.FeiJi) { isRecordDTime = true; } } else if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.TanKeJiTai) { if (PlayerSt == PlayerTypeEnum.TanKe) { isRecordDTime = true; } } if (isRecordDTime) { TestDTimeVal = dTime; } //dTime = TimeUnitMove; //test timeLastVal = Time.realtimeSinceStartup; float disAimNode = Vector3.Distance(transform.position, EndPos); if (JiaSuDuVal == 0) { ds = SpeedA * dTime; } else { ds = (SpeedA * dTime) + (0.5f * JiaSuDuVal * Mathf.Pow(dTime, 2f)); if ((SpeedA >= SpeedB && JiaSuDuVal >= 0f) || (SpeedA <= SpeedB && JiaSuDuVal <= 0f)) { SpeedA = SpeedB; } else { if (disAimNode >= ds) { SpeedA = SpeedA + (JiaSuDuVal * dTime); } else { float speedValTmp = 2f * JiaSuDuVal * disAimNode + Mathf.Pow(SpeedA, 2f); if (speedValTmp > 0) { SpeedA = Mathf.Sqrt(speedValTmp); } } if ((SpeedA >= SpeedB && JiaSuDuVal >= 0f) || (SpeedA <= SpeedB && JiaSuDuVal <= 0f)) { SpeedA = SpeedB; } } } if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.FeiJiJiTai && PlayerSt == PlayerTypeEnum.FeiJi) { TestSpeed = SpeedA; } else if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.TanKeJiTai && PlayerSt == PlayerTypeEnum.TanKe) { TestSpeed = SpeedA; } if (PlayerSt == PlayerTypeEnum.FeiJi || PlayerSt == PlayerTypeEnum.CartoonCamera) { timeRotationVal += dTime; if (timeRotationVal <= TimeRotation) { float perRot = timeRotationVal / TimeRotation; perRot = perRot > 1f ? 1f : perRot; transform.rotation = Quaternion.Lerp(RotationStart, RotationEnd, perRot); } } else { if (Vector3.Distance(EndPos, transform.position) > 0.01f) { Vector3 forwardVal = Vector3.Normalize(EndPos - transform.position); transform.forward = Vector3.Lerp(transform.forward, forwardVal, dTime * SpeedA * 0.5f); } } // Debug.Log("Unity:"+"SpeedA "+SpeedA+", ds "+ds+", dTime "+dTime); if (disAimNode <= ds) { // Debug.Log("Unity:"+"Over, ds "+ds+", realDis "+Vector3.Distance(transform.position, EndPos)+", time "+dTime); countNode++; float disVal = ds - disAimNode; float disNode = 0f; int count = 0; for (int i = countNode; i < (maxCountNode - 2); i++) { if ((i + 1) >= PathNodes.Length) { break; } disNode = Vector3.Distance(PathNodes[i], PathNodes[i + 1]); if (disVal > disNode) { disVal = disVal - disNode; count++; transform.position = PathNodes[countNode]; SmothMovePlayerCamera(); } else { break; } } countNode += count; /*if (count > 0) { * string outPut = PlayerSt == PlayerTypeEnum.FeiJi ? "feiJi: " : "tanKe: "; * outPut += "countNode "+countNode+",count "+count+", maxCountNode "+maxCountNode; * Debug.Log("Unity:"+outPut); * }*/ if (countNode < (maxCountNode - 1) && (countNode + 1) < PathNodes.Length) { transform.position = EndPos; SmothMovePlayerCamera(); EndPos = PathNodes[countNode + 1]; //更新EndPos. ForwardMoveVal = Vector3.Normalize(EndPos - transform.position); //更新ForwardMoveVal. // Debug.Log("Unity:"+"***realDis "+Vector3.Distance(transform.position, EndPos)); // Debug.Log("Unity:"+"***ForwardMoveVal "+Vector3.Distance(ForwardMoveVal, Vector3.zero)); yield return(new WaitForSeconds(TimeUnitMove)); continue; } else { if (IsPlayerTingLiu) { TimeTingLiuValStart = Time.realtimeSinceStartup; yield return(new WaitForSeconds(TimeTingLiuVal)); if (!XkGameCtrl.IsMoveOnPlayerDeath) { if (XkGameCtrl.IsActivePlayerOne || XkGameCtrl.IsActivePlayerTwo) { if (!IsDelayMovePlayer) { ResetIsPlayerTingLiu(); } } } else { if (!IsDelayMovePlayer) { ResetIsPlayerTingLiu(); } } } timeLastVal = Time.realtimeSinceStartup; timeRotationVal = 0f; SpeedA = SpeedB; transform.position = EndPos; SmothMovePlayerCamera(); if (!MovePlayerOnCompelteITween()) { isStopMove = true; break; } countNode = 0; maxCountNode = PathNodes.Length; yield return(new WaitForSeconds(TimeUnitMove)); continue; } } transform.position += (ForwardMoveVal * ds); SmothMovePlayerCamera(); yield return(new WaitForSeconds(TimeUnitMove)); } while (!isStopMove); }