コード例 #1
0
    void Update()
    {
        DisplayInView();

        if (!isFollowingPath)
        {
            return;
        }

        if (idleAtEachPoint)
        {
            if (!isStopped)
            {
                Vector3 tangent;
                MovePosition(curveMath.CalcPositionAndTangentByDistance(distanceDone, out tangent));
                LerpRotation(QuaternionExtensions.LookRotation(tangent));

                float currentDistanceDone = Time.deltaTime * movementSpeed;
                if (pointToPointDistanceDone + currentDistanceDone >= distanceToDo)
                {
                    float pointToPointDistanceDoneBefore = pointToPointDistanceDone;
                    pointToPointDistanceDone = distanceToDo;
                    distanceDone            += pointToPointDistanceDone - pointToPointDistanceDoneBefore;
                }
                else
                {
                    distanceDone             += currentDistanceDone;
                    pointToPointDistanceDone += currentDistanceDone;
                }
                if (pointToPointDistanceDone >= distanceToDo)
                {
                    isStopped    = true;
                    CurrentState = PathFollowerState.IDLE;
                    UpdatePointIndexAndDistanceToDo();
                    currentIdleTween = DOVirtual.DelayedCall(idleTime, () =>
                    {
                        CurrentState     = PathFollowerState.MOVING;
                        isStopped        = false;
                        currentIdleTween = null;
                    });
                }
                if (loop)
                {
                    distanceDone %= distanceTotal;
                }
            }
        }
        else
        {
            Vector3 tangent;
            MovePosition(curveMath.CalcPositionAndTangentByDistance(distanceDone, out tangent));
            LerpRotation(QuaternionExtensions.LookRotation(tangent));
            distanceDone += Time.deltaTime * movementSpeed;
            if (loop)
            {
                distanceDone %= distanceTotal;
            }
        }
    }
コード例 #2
0
 public void Stop()
 {
     isFollowingPath = false;
     CurrentState    = PathFollowerState.STOPPED;
     if (currentIdleTween != null)
     {
         currentIdleTween.Pause();
     }
 }
コード例 #3
0
    public void Begin()
    {
        isFollowingPath = true;

        if (idleAtEachPoint)
        {
            CurrentState = PathFollowerState.MOVING;
            if (currentIdleTween != null)
            {
                currentIdleTween.Play();
            }
        }
        else
        {
            CurrentState = PathFollowerState.MOVING;
        }
    }