Пример #1
0
        private WalkStep DequeueStep()
        {
            if (curSteps == null || curSteps.Count <= 0)
            {
                return(null);
            }
            WalkStep step = curSteps[curSteps.Count - 1];

            curSteps.RemoveAt(curSteps.Count - 1);
            return(step);
        }
Пример #2
0
        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();
        }
Пример #3
0
        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;
        }