private void Process()
        {
            if (m_Status == InterpolationStatus.Inactive || m_Status == InterpolationStatus.Paused)
            {
                return;
            }

            if (m_Status == InterpolationStatus.Playing)
            {
                if (IsBehaviourComplete)  // Check only the behavior.
                {
                    m_Status = InterpolationStatus.Complete;
                    LocalOnStatusChange();
                }

                Helper.Update();

                if (IsComplete)  // Checks both behavior and helper.
                {
                    m_Status = InterpolationStatus.Complete;
                    LocalOnStatusChange();
                }
            }
            else if (!IsBehaviourComplete && ContinueOnComplete)
            {
                Helper.Update();
            }
            else
            {
                return;  // Don't want to do the post update.
            }
            LocalProcess();
        }
        /// <summary>
        /// Pauses the interpolator.
        /// </summary>
        /// <remarks>
        /// <para>
        /// It is only valid to call this method while <see cref="Status"/> is playing or paused.
        /// </para>
        /// </remarks>
        public void Pause()
        {
            switch (m_Status)
            {
            case InterpolationStatus.Playing:

                m_Status = InterpolationStatus.Paused;
                LocalOnStatusChange();
                return;

            case InterpolationStatus.Paused:

                return;
            }

            Debug.LogError("Can't pause from status: " + m_Status);
        }
        /// <summary>
        /// Resets the interpolator for re-use.
        /// </summary>
        public void Reset()
        {
            // Design note: Children can capture the reset by overriding OnStatusChange().
            // So don't make this virtual.

            if (Helper != null)
            {
                // Always reset helper.  Helper may need internal refresh.
                Helper.Reset();
            }

            if (m_Status != InterpolationStatus.Inactive)
            {
                m_Status = InterpolationStatus.Inactive;
                LocalOnStatusChange();
            }

            if (m_AutoPlay)
            {
                Play();
            }
        }
        /// <summary>
        /// Play the iterpolator.
        /// </summary>
        /// <remarks>
        /// <para>
        /// The interpolator will be reset and re-started if this method is called when
        /// <see cref="Status"/> is complete.
        /// </para>
        /// </remarks>
        public void Play()
        {
            switch (m_Status)
            {
            case InterpolationStatus.Playing:

                return;

            case InterpolationStatus.Paused:

                m_Status = InterpolationStatus.Playing;
                LocalOnStatusChange();
                return;

            case InterpolationStatus.Complete:

                Reset();
                break;
            }

            if (Helper == null)
            {
                if (!BaseSettings.ItemToTransform)
                {
                    BaseSettings.ItemToTransform = transform;
                }
                CreateHelper();
            }
            else
            {
                Helper.Reset();
            }

            m_Status = InterpolationStatus.Playing;
            LocalOnStatusChange();
        }