I have a continuous loop that I need to stop and only activate on key down! Please Help!!

Hey,

So I have a script ill be posting below. It is for a lift. The whole thing moves like it should but I only need the lift to go down when I press a key. I tried to input the syntax but its not really working. Please help!!!

using UnityEngine;

public class Exit_Lift : MonoBehaviour {

    public Transform[] points;
    private int pointMarker = 0;
    private Transform currentPoint;
    private Vector3 lastPoint;
    private bool forward = true;
    public float speed = 1.0f;
    private float startTime;
    private float journeyLength;

    void Start ()
    {
        startTime = Time.time;
        lastPoint = transform.position;
    }

    // Update is called once per frame
    void Update () {

        if  (forward)
        {
            Input.GetKeyDown (KeyCode.E);
            currentPoint = points[pointMarker];
            journeyLength = Vector3.Distance(lastPoint, currentPoint.position);

            float distCovered = (Time.time - startTime) * speed;
            float fracJourney = distCovered / journeyLength;

            if (transform.position != currentPoint.transform.position)
            {
                transform.position = Vector3.Lerp(lastPoint, currentPoint.position, fracJourney);
            }
            else
            {
                // Get new time for next loop
                startTime = Time.time;
                lastPoint = transform.position;

                if (pointMarker != points.Length -1)
                    pointMarker++;
                else
                    forward = false;
            }
        }
        else
        {
            // go in reverse
            currentPoint = points[pointMarker];
            journeyLength = Vector3.Distance(lastPoint, currentPoint.position);

            float distCovered = (Time.time - startTime) * speed;
            float fracJourney = distCovered / journeyLength;

            if (transform.position != currentPoint.transform.position)
            {
                transform.position = Vector3.Lerp(lastPoint, currentPoint.position, fracJourney);
            }
            else
            {
                // Get new time for next loop
                startTime = Time.time;
                lastPoint = transform.position;

                if (pointMarker != 0)
                    pointMarker--;
                else
                    forward = true;
            }
        }
    }
}

I believe you want to do first part of code if key E is pressed and the other part if it’s not

            if (Input.GetKey(KeyCode.E))
            {
                //go up code here
            }else
            {
                //go down code here
            }

You just need to move all the lift code to a method and check if E key is pressed:

void Update()
{
        if (input.GetKey(KeyCode.E))
               MoveLift();
}
void MoveLift() {
        if  (forward)
        {
          
            currentPoint = points[pointMarker];
            journeyLength = Vector3.Distance(lastPoint, currentPoint.position);
            float distCovered = (Time.time - startTime) * speed;
            float fracJourney = distCovered / journeyLength;
            if (transform.position != currentPoint.transform.position)
            {
                transform.position = Vector3.Lerp(lastPoint, currentPoint.position, fracJourney);
            }
            else
            {
                // Get new time for next loop
                startTime = Time.time;
                lastPoint = transform.position;
                if (pointMarker != points.Length -1)
                    pointMarker++;
                else
                    forward = false;
            }
        }
        else
        {
            // go in reverse
            currentPoint = points[pointMarker];
            journeyLength = Vector3.Distance(lastPoint, currentPoint.position);
            float distCovered = (Time.time - startTime) * speed;
            float fracJourney = distCovered / journeyLength;
            if (transform.position != currentPoint.transform.position)
            {
                transform.position = Vector3.Lerp(lastPoint, currentPoint.position, fracJourney);
            }
            else
            {
                // Get new time for next loop
                startTime = Time.time;
                lastPoint = transform.position;
                if (pointMarker != 0)
                    pointMarker--;
                else
                    forward = true;
            }
        }
    }
2 Likes

The code is a mess. I would strongly suggest refactoring it to improve your logic flow. Look up DRY. You can cut your code in half and still have it do the same thing.

2 Likes

https://en.wikipedia.org/wiki/Don’t_repeat_yourself :stuck_out_tongue:

1 Like

Thanks I’ll try that when I get back home! your input is greatly appreciated.