Переменные — это способ хранить информацию в скриптах. Они позволяют задавать значения, которые может использовать игра: например, скорость игрока, количество жизней или имя персонажа. Благодаря переменным объекты в игре могут запоминать и изменять своё состояние.
У переменных есть имя — оно позволяет ссылаться на значение в коде.
Имена переменных могут содержать буквы, цифры и подчёркивания, но не
могут начинаться с цифры и совпадать с ключевыми словами языка. Обычно
используют понятные имена, вроде score
или
playerHealth
. Переменные можно объявлять внутри методов
(только для этого блока) или на уровне всего класса — тогда они доступны
во всех методах. Например, переменная tmp
может
использоваться внутри Start
для временного хранения данных,
а переменная уровня класса — для постоянной информации, такой как
здоровье игрока или ссылка на объект.
Также важно, кто может получить доступ к переменной. Если перед
переменной указано public
, её значение можно редактировать
прямо в инспекторе Unity — это удобно для настройки без изменения кода.
К такой переменной можно обратиться и из другого скрипта. Если
используется private
(по умолчанию), переменная доступна
только внутри самого скрипта.
💡 Если не указать модификатор доступа, переменная по умолчанию
считается private
. Это значит, что она доступна только
внутри этого скрипта. Тем не менее, писать private
явно —
хорошая привычка: код становится понятнее.
PS: Хотя, честно говоря, кто вообще любит лишнюю работу, дописывая
private
? 😊
Дальше мы покажем основные типы переменных, которые чаще всего используются в Unity.
int
используется для хранения целых чисел — без дробной
части. Такие переменные удобно применять для счёта очков, количества
жизней, патронов и других числовых значений.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Целочисленные переменные
public int score = 0;
public int lives = 3;
private int health = 10;
private int bullets = 30;
//тоже private
int flowersInTheBag = 1;
// Start вызывается один раз при запуске объекта
void Start()
{
int tmpHealth = health;
}
// Update вызывается каждый кадр
void Update()
{
}
}
float
используется для хранения чисел с дробной частью.
Такие переменные удобно применять для значений вроде скорости, урона,
таймеров или координат. В Unity часто используются
float
для расчётов движения, а также при работе с физикой
и анимацией.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Дробные переменные
public float speed = 5.5f;
float jumpHeight = 2.2f;
float damage = 1.75f;
float timeToExplode = 3.0f;
// Start вызывается один раз при запуске объекта
void Start()
{
}
// Update вызывается каждый кадр
void Update()
{
float tmpSpeed = speed;
}
}
bool
(булева переменная) может хранить только два
значения: true
(истина) или false
(ложь).
Внутри компьютера это обычно представляется как 1
и
0
соответственно. Такие переменные удобно использовать
для проверки состояний: например, жив ли игрок, нажата ли кнопка,
включён ли свет и т.д.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Логические переменные
bool isAlive = true;
bool hasKey = false;
bool isGamePaused = false;
// Start вызывается один раз при запуске объекта
void Start()
{
bool tmpAlive = isAlive;
}
// Update вызывается каждый кадр
void Update()
{
}
}
string
используется для хранения текста — слов, фраз,
символов. Такие переменные удобно применять для имён игроков,
сообщений, диалогов и любых других строковых данных. Текст заключается
в двойные кавычки: "..."
.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Строковые переменные
string playerName = "Kiava";
string greeting = "Привет, игрок!";
string levelName = "Лесная долина";
// Start вызывается один раз при запуске объекта
void Start()
{
//вывод в консоль: Привет, игрок! Твоё имя: Kiava
Debug.Log(greeting + " Твоё имя: " + playerName);
}
// Update вызывается каждый кадр
void Update()
{
}
}
Vector3
— это тип переменной, который хранит координаты в
трёхмерном пространстве: по осям X
, Y
и
Z
. Unity по умолчанию работает в 3D, где X
—
влево-вправо, Y
— вверх-вниз, а Z
—
вперёд-назад.
Если ты создаёшь 2D-игру, Unity всё равно использует 3D-сцену, просто
Z часто остаётся равным нулю. Для удобства есть отдельный тип
Vector2
, содержащий только X
и
Y
.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Векторные переменные
Vector3 startPosition = new Vector3(0f, 1f, 0f);
Vector3 jumpForce = new Vector3(0f, 5f, 0f);
// Start вызывается один раз при запуске объекта
void Start()
{
transform.position = startPosition;
}
// Update вызывается каждый кадр
void Update()
{
}
}