Make value change to anoter over time and back loop

Hello. How could I make a value to go from -1 to 1, then from 1 to -1 and back again. It should be a infinite loop. And every step (from -1 to 1 or from 1 to -1) should be happening over a given time? Thank you!

You can use Mathf.PingPong() or Mathf.Sin() in Update():

var val = Mathf.PingPong(Time.time * speed, 2.0) - 1.0;

or:

var val = Mathf.Sin(time.time * speed);

Mathf.Sin() will give a sinusoidal change between -1.0 and 1.0;

The way I do this is the following (taken from a Pac Man game I’m working on where the sprites cycle in a back-and-forth munching loop):

	// Set animation frame
	const int NUM_FRAMES = 4; // In our Pac Man animation, we have 4 frames.  
							  //We want the frames to go 0,1,2,3,2,1 and repeat.
	const float ANIM_SPEED = 0.4f; // Modify this parameter to determine the speed at which the frames progress
	
	int frame = ((int) (this.transform.x * ANIM_SPEED)) % NUM_FRAMES;
	
	if (frame > NUM_FRAMES * 0.5)
		frame = NUM_FRAMES - frame;

	// "frame" will now cycle from 0 to 3 and back again in reverse according to the "x" of the transform.

Edit: So in your case, you have 4 desired values. -1, 0, 1, 0, then repeat. For that, you can do:

	int counter = 0;

	void Update() {
		counter++; // I assume this is going up in some fashion
		int ticktock = (counter % 4); // ticktock is now 0 to 3
		if (ticktock > 2)
			ticktock = 1;		// ticktock is now 0 to 2
		ticktock--;			//ticktock is now -1 to 1
	}

Another way is to use an array to store the values you want to toggle through. This is perhaps one of the easier ways to understand:

	int counter = 0;

	void Update() {
		const int[] values = {-1, 0, 1, -1}
		int ticktock = values[(counter++) % 4];
		// ticktock is now at the desired value
	}

Wait stuff is different depending on are you using c# or unity script.

int a = 1;

for(;;){
//infinite loop
// if unity script use yield waitforseconds any function, if c#create new IEnumerator function, copy the for loop the 
//re because only in that function you can use yield waiforsecobds

//start coroutine from start or whatever

a *= -1; 
}