Loops in Unity are a way to repeat actions in your code β for example, spawning enemies one by one, iterating through inventory items, or waiting until something happens. They let you avoid writing the same code over and over again by doing it automatically as many times as needed.
In C# and Unity, there are several types of loops: for,
while, and foreach. Each works a bit
differently, but the idea is the same: repeat as long
as a condition is true.
A for loop is a way to repeat the same block of code
multiple times. You tell the computer: start from a certain value,
check a condition, and update a counter each time. For example:
"repeat 10 times" or "go through all elements from 0 to 5".
This type of loop is especially useful when you know in advance how many times something should happen β like creating 5 enemies, counting points, or drawing 10 platforms.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Start is called once when the object starts
void Start()
{
// Repeat 5 times
for (int i = 0; i < 5; i++)
{
Debug.Log("Iteration #" + i);
}
}
// Update is called once per frame
void Update()
{
}
}
In this example, we run a for loop that repeats 5 times.
The variable i starts at 0 and increases by 1 each time.
As long as i is less than 5, the loop continues, and we
print the iteration number to the console.
This is how most simple repetitions work in Unity: you can iterate through levels, create objects, check arrays, and much more.
A while loop runs
as long as the condition remains true. It works like
a check before every step: if the condition is true, we
continue; if false, we exit the loop.
This type of loop is useful when you donβt know in advance how many times something should repeat β for example, waiting until the player reaches a target, or until an exit button is pressed.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
int energy = 3;
// Start is called once when the object starts
void Start()
{
// Repeat while energy is greater than zero
while (energy > 0)
{
Debug.Log("Energy left: " + energy);
energy--;
}
}
// Update is called once per frame
void Update()
{
}
}
In this example, the while loop runs as long as
energy is greater than zero. On each step, we print the
value to the console and decrease energy by one.
Once energy becomes zero, the condition is no longer true
and the loop stops. This approach is common when the number of
repetitions depends on some state β like remaining ammo or whether an
enemy is still alive.
while loops in
Unity!
If the condition never becomes false, the loop will be
infinite and Unity may freeze or crash. This is especially dangerous
if the loop runs inside Update().
Always make sure the variable in the condition is changing inside the loop. Or add a limit β like a maximum of 100 iterations β if you're not sure.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
int energy = 10;
// Start is called once when the object starts
void Start()
{
while (true)
{
if (energy <= 0)
{
Debug.Log("Energy is depleted β exiting loop");
break; // Exit the loop
}
Debug.Log("Energy left: " + energy);
energy--;
}
}
// Update is called once per frame
void Update()
{
}
}
Here the loop while (true) looks infinite, but there's
a condition inside: if energy is less than or equal to
zero, the break statement exits the loop.
This is useful when a loop should run "until something happens" β even if you donβt know exactly when. Just remember to include an exit condition!
A foreach loop lets you go through all elements in a
collection β an array, list, or any other set. It automatically grabs
each item in order, so you donβt need to count manually like in a
for loop.
This is especially useful when you donβt care about the index and just want to go through everything β like all enemies, all buttons, or all items in an inventory.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
string[] names = { "Anya", "Bob", "Sonya", "Mr. Hedgehog" };
// Start is called once when the object starts
void Start()
{
foreach (string name in names)
{
Debug.Log("Name: " + name);
}
}
// Update is called once per frame
void Update()
{
}
}
In this example, we use foreach to loop through the
names array. On each step, the name variable
automatically receives the next value β first "Anya", then "Bob", then
"Sonya", and of course, Mr. Hedgehog.
This approach is great when you just want to iterate over all elements
without using counters. foreach makes it simple and
readable.