C# (читается как «Си Шарп») — это современный, объектно-ориентированный язык программирования, разработанный компанией Microsoft. В контексте разработки игр (особенно на Unity) это основной язык скриптов.
В этой статье предлагается подробный гайд по основам C#, адаптированный для начинающего разработчика игр.
- Структура программы
- Переменные и Типы данных
- Основные типы:
- Объявление переменной:
- Операторы
- Условные конструкции (Ветвление)
- if / else
- switch (Выбор варианта)
- Циклы
- for (Когда известно количество повторений)
- foreach (Перебор коллекций — очень часто в Unity)
- while (Пока условие верно)
- Методы (Функции)
- Объектно-Ориентированное Программирование (ООП)
- Класс (Чертеж)
- Наследование
- Инкапсуляция
- Коллекции (Хранение данных)
- Массив (фиксированный размер)
- List (динамический размер — чаще всего в играх)
- Dictionary (Ключ -> Значение)
- Особенности C# в Unity
- MonoBehaviour
- Ссылки на объекты:
- Корутины (Coroutines):
- Где писать код? (IDE)
- Советы для новичка
- Что учить дальше?
Структура программы
В C# всё организовано внутри классов. Даже простая программа имеет структуру.
using System; // Подключение библиотеки
namespace MyGame // Пространство имен (папка для кода)
{
class Program // Класс
{
static void Main(string[] args) // Точка входа (в Unity её нет, там есть MonoBehaviour)
{
Console.WriteLine("Привет, мир!"); // Вывод текста
}
}
}В Unity: Вы редко пишете
Main. Вместо этого вы создаете классы, наследующиеся отMonoBehaviour, и используете методыStart()иUpdate().
Переменные и Типы данных
C# — язык со строгой типизацией. Это значит, что нужно указывать тип данных для каждой переменной.
Основные типы:
|
Тип | Описание | Пример |
|---|---|---|
int | Целое число | int health = 100; |
float | Дробное число (важно для координат!) | float speed = 5.5f; |
double | Дробное число высокой точности | double pi = 3.14159; |
string | Текст | string playerName = "Alex"; |
bool | Логический тип (истина/ложь) | bool isAlive = true; |
Vector3 | (Специфично для Unity) 3 координаты | Vector3 position = new Vector3(0, 0, 0); |
Объявление переменной:
int age = 25;
var name = "John"; // 'var' позволяет компилятору самому угадать тип
// удобно, но лучше не злоупотреблятьВажно: В C# регистр имеет значение!
Healthиhealth— это разные переменные.
Операторы
Используются для вычислений и сравнений.
- Арифметические:
+,-,*,/,%(остаток от деления). - Сравнения:
==(равно),!=(не равно),>,<,>=,<=. - Логические:
&&(И),||(ИЛИ),!(НЕ).
if (health > 0 && isAlive)
{
// Игрок жив
}Условные конструкции (Ветвление)
Позволяют коду принимать решения.
if / else
if (health <= 0)
{
Die(); // Вызов функции смерти
}
else if (health < 30)
{
PlayLowHealthSound();
}
else
{
// Всё нормально
}switch (Выбор варианта)
Удобно для состояний (например, анимаций или меню).
switch (weaponType)
{
case "Sword":
AttackMelee();
break;
case "Gun":
Shoot();
break;
default:
Punch();
break;
}Циклы
Позволяют повторять действия.
for (Когда известно количество повторений)
// Создать 10 врагов
for (int i = 0; i < 10; i++)
{
SpawnEnemy(i);
}foreach (Перебор коллекций — очень часто в Unity)
// Найти всех врагов на сцене
foreach (Enemy enemy in allEnemies)
{
enemy.TakeDamage(10);
}while (Пока условие верно)
while (isGameRunning)
{
// Ждем завершения игры
}Методы (Функции)
Методы — это блоки кода, которые выполняют конкретную задачу. Это помогает не дублировать код.
// Возвращает ничего (void), принимает целое число (damage)
void TakeDamage(int damage)
{
health -= damage;
if (health <= 0)
{
Die();
}
}
// Возвращает число (int)
int GetHealthPercent()
{
return health / maxHealth * 100;
}Объектно-Ориентированное Программирование (ООП)
Это фундамент C# и Unity. Всё в игре — это объекты.
Класс (Чертеж)
public class Player
{
// Поля (данные)
public string name;
private int health; // private видно только внутри класса
// Конструктор (запускается при создании)
public Player(string playerName)
{
name = playerName;
health = 100;
}
// Метод (действие)
public void Jump()
{
Console.WriteLine(name + " прыгает!");
}
}Наследование
Позволяет создавать новые классы на основе старых.
// Enemy наследует всё от Character
public class Enemy : Character
{
public int rewardPoints;
}Инкапсуляция
Скрытие данных. Используйте public (видно всем) и private (видно только внутри).
В Unity для показа переменных в Инспекторе используют [SerializeField]:
[SerializeField] private float speed; // Видно в Unity Inspector, но скрыто для других скриптовКоллекции (Хранение данных)
Массивы и списки нужны для хранения инвентаря, списков врагов, очков и т.д.
Массив (фиксированный размер)
int[] scores = new int[5];
scores[0] = 100; // Доступ по индексу (начинается с 0!)List (динамический размер — чаще всего в играх)
using System.Collections.Generic;
List<string> inventory = new List<string>();
inventory.Add("Sword");
inventory.Add("Potion");
inventory.Remove("Potion");Dictionary (Ключ -> Значение)
// ID предмета -> Количество
Dictionary<int, int> items = new Dictionary<int, int>();
items.Add(101, 5); // Предмет 101, количество 5Особенности C# в Unity
Хотя это тот же язык, в Unity есть специфика:
MonoBehaviour
Почти все скрипты в Unity наследуются от этого класса.
public class PlayerController : MonoBehaviour
{
void Start() { } // Вызуется 1 раз при старте
void Update() { } // Вызуется каждый кадр (здесь пишут движение)
}Ссылки на объекты:
В Unity вы часто ссылаетесь на объекты сцены.
public GameObject enemyPrefab; // Перетаскивается в инспектореКорутины (Coroutines):
Позволяют выполнять код с задержкой во времени.
IEnumerator WaitAndShoot()
{
yield return new WaitForSeconds(2.0f); // Ждать 2 секунды
Shoot();
}Где писать код? (IDE)
Вам нужна среда разработки. Лучшие варианты для Unity:
- Visual Studio Community (Бесплатно, стандарт для Windows).
- Visual Studio Code (Легковесный, требует настройки плагинов).
- Rider (Платный, но очень мощный и удобный для Unity).
Советы для новичка
- Следите за точкой с запятой ;. В C# каждая команда должна заканчиваться ею.
- Фигурные скобки {}. Они обозначают начало и конец блока кода (метода, цикла, условия).
- Имена переменных. Используйте camelCase для переменных (playerHealth) и PascalCase для классов и методов (PlayerController).
- Читайте ошибки. Консоль ошибок (Console) в Unity подскажет номер строки, где код сломался.
- Практика. Не учите теорию без практики. Создайте скрипт, который вращает куб, затем скрипт, который двигает его по нажатию клавиши.
Что учить дальше?
После освоения основ переходите к темам:
- События (Events/Actions) — для связи скриптов без прямых ссылок.
- Интерфейсы (Interfaces) — для гибкой архитектуры.
- Асинхронность (async/await) — для загрузки данных из интернета.
- LINQ — для удобной работы с коллекциями.
C# — мощный инструмент. В начале он может показаться сложным из-за обилия правил, но именно строгость помогает избегать многих ошибок в больших проектах. Удачи в обучении!





