private WalkStep DequeueStep() { if (curSteps == null || curSteps.Count <= 0) { return(null); } WalkStep step = curSteps[curSteps.Count - 1]; curSteps.RemoveAt(curSteps.Count - 1); return(step); }
public void DoWalk(List <WalkStep> steps) { curSteps = steps; DequeueStep(); curStep = DequeueStep(); startPos = trans.position; destPos = PathUtilEdit.LogicCenter2Real(curStep.pt); destPos.y = startPos.y; stepTm = (destPos - startPos).magnitude / moveSpeed; startTm = Time.realtimeSinceStartup; Quaternion rot = Quaternion.LookRotation(destPos - startPos); Vector3 rotv = rot.eulerAngles; rotv.x = 0; rotv.z = 0; // LoggerHelper.Debug("rot:" + rotv + ",stepTm:" + stepTm + ",curpos:" + startPos + ",destPos:" + destPos); trans.rotation = Quaternion.Euler(rotv); OnWalkStart(); }
void UpdateWalk() { if (curStep == null) { return; } float tm = Time.realtimeSinceStartup; float ratio = (tm - startTm) / stepTm; //LoggerHelper.Debug("lerp ratio:" + ratio); Vector3 pos = destPos; if (ratio >= 1) { curStep = DequeueStep(); if (curStep == null) { OnWalkEnd(); } else { startPos = destPos; destPos = PathUtilEdit.LogicCenter2Real(curStep.pt); stepTm = (destPos - startPos).sqrMagnitude / moveSpeed; startTm = Time.realtimeSinceStartup; } } else { pos = Vector3.Lerp(startPos, destPos, ratio); } pos.y = terrainMan.GetHeight(pos.x, pos.z); // LoggerHelper.Debug("pos:" + pos); trans.position = pos; LODLoader.rolePos = pos; }