Циклы в Unity — это способ повторять действия в коде: например, запускать врагов по очереди, перебирать предметы в инвентаре или ждать, пока что-то произойдёт. Они позволяют не копировать один и тот же код много раз, а сделать это автоматически, сколько нужно.
В C# и Unity есть несколько видов циклов: for
,
while
, foreach
. Каждый из них работает чуть
по-своему, но суть одна: повторять, пока выполняется
какое-то условие.
Цикл for
— это способ повторить один и тот же код
несколько раз. Мы говорим компьютеру: начни с какого-то значения,
проверяй условие, и каждый раз меняй счётчик. Например: «повтори 10
раз», или «пройди по всем элементам от 0 до 5».
Такой цикл особенно удобен, когда мы заранее знаем, сколько раз нужно что-то сделать — например, создать 5 врагов, посчитать очки или нарисовать 10 платформ.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Start вызывается один раз при запуске объекта
void Start()
{
// Повторяем 5 раз
for (int i = 0; i < 5; i++)
{
Debug.Log("Итерация №" + i);
}
}
// Update вызывается каждый кадр
void Update()
{
}
}
В этом примере мы запускаем цикл for
, который повторяется
5 раз. Переменная i
начинается с 0, и каждый раз
увеличивается на 1. Пока i
меньше 5 — цикл продолжается,
и мы выводим номер итерации в консоль.
Так работает большинство простых повторений в Unity: можно перебирать уровни, создавать объекты, проверять массивы и многое другое.
Цикл while
выполняется,
пока условие остаётся истинным. Это как проверка
перед каждым шагом: если условие true
— продолжаем, если
false
— выходим из цикла.
Такой цикл удобно использовать, когда не знаешь заранее, сколько раз нужно повторить: например, ждать, пока игрок дойдёт до цели, или пока не нажата кнопка выхода.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
int energy = 3;
// Start вызывается один раз при запуске объекта
void Start()
{
// Пока энергия больше нуля — повторяем
while (energy > 0)
{
Debug.Log("Осталось энергии: " + energy);
energy--;
}
}
// Update вызывается каждый кадр
void Update()
{
}
}
В этом примере цикл while
повторяется, пока
energy
больше нуля. На каждом шаге мы выводим значение в
консоль и уменьшаем energy
на единицу.
Как только energy
станет равной нулю — условие больше не
выполняется, и цикл останавливается. Такой подход часто используют,
когда количество повторений зависит от состояния — например, пока есть
патроны или пока враг жив.
while
в Unity!
Если условие никогда не станет false
— цикл будет
бесконечным, и Unity может зависнуть или крашнуться. Это особенно
опасно, если цикл запускается в Update()
.
Всегда убедись, что внутри цикла меняется переменная, от которой зависит условие. Или поставь ограничитель — например, максимум 100 итераций, если не уверен.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
int energy = 10;
// Start вызывается один раз при запуске объекта
void Start()
{
while (true)
{
if (energy <= 0)
{
Debug.Log("Энергия закончилась — выходим из цикла");
break; // Прерываем цикл
}
Debug.Log("Осталось энергии: " + energy);
energy--;
}
}
// Update вызывается каждый кадр
void Update()
{
}
}
Здесь цикл while (true)
выглядит как бесконечный, но
внутри него есть проверка: если energy
меньше или равна
нулю — команда break
прерывает выполнение цикла.
Это полезный приём, если цикл должен идти «до тех пор, пока...» — но ты не знаешь точно, когда это произойдёт. Главное — не забыть условие выхода!
Цикл foreach
позволяет пройтись по всем элементам в
коллекции: массиве, списке или любом другом наборе. Он автоматически
берёт каждый элемент по очереди — не нужно считать вручную, как в
for
.
Это особенно удобно, когда тебе не важен номер элемента, а нужно просто перебрать всё подряд: всех врагов, все кнопки, все предметы в инвентаре.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
string[] names = { "Аня", "Боб", "Соня", "Мистер Ёж" };
// Start вызывается один раз при запуске объекта
void Start()
{
foreach (string name in names)
{
Debug.Log("Имя: " + name);
}
}
// Update вызывается каждый кадр
void Update()
{
}
}
В этом примере мы используем foreach
, чтобы пройтись по
массиву names
. На каждом шаге переменная
name
автоматически получает следующее значение из массива
— сначала "Аня", потом "Боб", потом "Соня", и, конечно,
Мистер Ёж.
Такой подход удобен, когда нужно просто перебрать все элементы без
счётчиков.
foreach
делает это просто и читабельно.