Условия в Unity — это способ заставить объекты реагировать на события, проверять состояния и принимать решения в коде. С их помощью персонаж может прыгать только когда стоит на земле, враг — атаковать, если игрок рядом, а дверь — открываться по кнопке.
В проверке условий мы часто используем
операции сравнения (например, ==
,
!=
, >
) и
логические операции (такие как &&
и
||
). Мы уже видели их в предыдущем уроке — теперь они
помогут нам решать, что делать в зависимости от ситуации.
В Unity (и вообще в C#) конструкция if
позволяет
выполнять код только если выполняется какое-то условие. А
else
— это то, что происходит, если условие не выполнено.
В круглых скобках после if
мы записываем
условие. Это выражение, которое проверяется и даёт
один из двух ответов: истина (true) или
ложь (false). Если результат — истина, выполняется
блок кода внутри фигурных скобок. Если ложь — код пропускается, либо
срабатывает else
, если он есть.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
int health = 10;
// Start вызывается один раз при запуске объекта
void Start()
{
}
// Update вызывается каждый кадр
void Update()
{
if (health > 0)
{
// Игрок ещё жив
Debug.Log("Вставай и сражайся!");
}
else
{
// Игрок мёртв
Debug.Log("Game Over");
}
}
}
Здесь мы проверяем, больше ли здоровье нуля. Если да — выводим сообщение о том, что игрок ещё в бою. Если нет — значит, пора перезапускать уровень. Именно так работает большинство логики в играх.
В Unity очень часто проверяют булевые переменные —
например, isJumping
, isDead
,
isGrounded
. Это удобно, потому что такие переменные прямо
говорят: включено что-то или нет, происходит или не происходит.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
bool isDead = true;
// Start вызывается один раз при запуске объекта
void Start()
{
}
// Update вызывается каждый кадр
void Update()
{
if (isDead)
{
// Персонаж мёртв
Debug.Log("Game Over");
}
}
}
Условия также можно вкладывать друг в друга для многоуровневой проверки. Это полезно, когда одно действие зависит сразу от нескольких факторов — например, персонаж может прыгнуть, только если он на земле и нажата нужная клавиша. Хотя в таком случае может быть проще использовать логические операторы, чтобы объединить несколько условий в одну строку.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
bool isGrounded = true;
bool jumpKeyPressed = true;
// Start вызывается один раз при запуске объекта
void Start()
{
}
// Update вызывается каждый кадр
void Update()
{
// Вложенные условия
if (isGrounded)
{
if (jumpKeyPressed)
{
Debug.Log("Прыжок выполнен (вложенный if)");
}
}
// То же самое, но с логическим оператором
if (isGrounded && jumpKeyPressed)
{
Debug.Log("Прыжок выполнен (логическое И)");
}
}
}
Когда у нас есть много возможных значений и нужно выбрать действие в
зависимости от них — удобно использовать switch
. Это как
меню: если выбрано одно — выполняем одно, если другое — выполняем
другое.
В круглых скобках после switch
мы указываем переменную
или выражение, значение которого хотим проверить. Дальше идут
case
— возможные варианты этого значения. Если один из
них совпадает, выполняется код внутри этого блока. Чтобы программа не
пошла дальше, в конце каждого case
пишем
break;
. Если ни один вариант не подошёл — срабатывает
default
.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
string enemyType = "зомби";
// Start вызывается один раз при запуске объекта
void Start()
{
switch (enemyType)
{
case "зомби":
Debug.Log("Зомби атакует!");
break;
case "робот":
Debug.Log("Робот стреляет!");
break;
case "призрак":
Debug.Log("Призрак исчезает!");
break;
default:
Debug.Log("Неизвестный враг...");
break;
}
}
// Update вызывается каждый кадр
void Update()
{
}
}
💡Команда break;
завершает выполнение текущего случая.
Если её не поставить — выполнение продолжится и перейдёт ко всем
следующим блокам, даже если они не подходят. Это называется
"проваливание" (fall-through). Иногда это делают специально, но чаще
забывают — и получают неожиданные результаты.