Основы языка C# cSharp

Основы языка cSharp

C# (читается как «Си Шарп») — это современный, объектно-ориентированный язык программирования, разработанный компанией Microsoft. В контексте разработки игр (особенно на Unity) это основной язык скриптов.

В этой статье предлагается подробный гайд по основам C#, адаптированный для начинающего разработчика игр.

Структура программы

В C# всё организовано внутри классов. Даже простая программа имеет структуру.

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);

Объявление переменной:

C#
int age = 25; 
var name = "John"; // 'var' позволяет компилятору самому угадать тип 
                   // удобно, но лучше не злоупотреблять

Важно: В C# регистр имеет значение! Health и health — это разные переменные.

Операторы

Используются для вычислений и сравнений.

  • Арифметические: +, -, *, /, % (остаток от деления).
  • Сравнения: == (равно), != (не равно), >, <, >=, <=.
  • Логические: && (И), || (ИЛИ), ! (НЕ).
C#
if (health > 0 && isAlive) 
{
    // Игрок жив
}

Условные конструкции (Ветвление)

Позволяют коду принимать решения.

if / else

C#
if (health <= 0)
{
    Die(); // Вызов функции смерти
}
else if (health < 30)
{
    PlayLowHealthSound();
}
else
{
    // Всё нормально
}

switch (Выбор варианта)

Удобно для состояний (например, анимаций или меню).

C#
switch (weaponType)
{
    case "Sword":
        AttackMelee();
        break;
    case "Gun":
        Shoot();
        break;
    default:
        Punch();
        break;
}

Циклы

Позволяют повторять действия.

for (Когда известно количество повторений)

C#
// Создать 10 врагов
for (int i = 0; i < 10; i++) 
{
    SpawnEnemy(i);
}

foreach (Перебор коллекций — очень часто в Unity)

C#
// Найти всех врагов на сцене
foreach (Enemy enemy in allEnemies) 
{
    enemy.TakeDamage(10);
}

while (Пока условие верно)

C#
while (isGameRunning) 
{
    // Ждем завершения игры
}

Методы (Функции)

Методы — это блоки кода, которые выполняют конкретную задачу. Это помогает не дублировать код.

C#
// Возвращает ничего (void), принимает целое число (damage)
void TakeDamage(int damage) 
{
    health -= damage;
    if (health <= 0) 
    {
        Die();
    }
}

// Возвращает число (int)
int GetHealthPercent() 
{
    return health / maxHealth * 100;
}

Объектно-Ориентированное Программирование (ООП)

Это фундамент C# и Unity. Всё в игре — это объекты.

Класс (Чертеж)

C#
public class Player
{
    // Поля (данные)
    public string name;
    private int health; // private видно только внутри класса

    // Конструктор (запускается при создании)
    public Player(string playerName)
    {
        name = playerName;
        health = 100;
    }

    // Метод (действие)
    public void Jump()
    {
        Console.WriteLine(name + " прыгает!");
    }
}

Наследование

Позволяет создавать новые классы на основе старых.

C#
// Enemy наследует всё от Character
public class Enemy : Character 
{
    public int rewardPoints;
}

Инкапсуляция

Скрытие данных. Используйте public (видно всем) и private (видно только внутри).
В Unity для показа переменных в Инспекторе используют [SerializeField]:

C#
[SerializeField] private float speed; // Видно в Unity Inspector, но скрыто для других скриптов

Коллекции (Хранение данных)

Массивы и списки нужны для хранения инвентаря, списков врагов, очков и т.д.

Массив (фиксированный размер)

C#
int[] scores = new int[5]; 
scores[0] = 100; // Доступ по индексу (начинается с 0!)

List (динамический размер — чаще всего в играх)

C#
using System.Collections.Generic;

List<string> inventory = new List<string>();
inventory.Add("Sword");
inventory.Add("Potion");
inventory.Remove("Potion");

Dictionary (Ключ -> Значение)

C#
// ID предмета -> Количество
Dictionary<int, int> items = new Dictionary<int, int>();
items.Add(101, 5); // Предмет 101, количество 5

Особенности C# в Unity

Хотя это тот же язык, в Unity есть специфика:

MonoBehaviour

Почти все скрипты в Unity наследуются от этого класса.

C#
public class PlayerController : MonoBehaviour 
{
    void Start() { } // Вызуется 1 раз при старте
    void Update() { } // Вызуется каждый кадр (здесь пишут движение)
}

Ссылки на объекты:

В Unity вы часто ссылаетесь на объекты сцены.

C#
public GameObject enemyPrefab; // Перетаскивается в инспекторе

Корутины (Coroutines):

Позволяют выполнять код с задержкой во времени.

C#
IEnumerator WaitAndShoot()
{
    yield return new WaitForSeconds(2.0f); // Ждать 2 секунды
    Shoot();
}

Где писать код? (IDE)

Вам нужна среда разработки. Лучшие варианты для Unity:

  • Visual Studio Community (Бесплатно, стандарт для Windows).
  • Visual Studio Code (Легковесный, требует настройки плагинов).
  • Rider (Платный, но очень мощный и удобный для Unity).

Советы для новичка

  1. Следите за точкой с запятой ;. В C# каждая команда должна заканчиваться ею.
  2. Фигурные скобки {}. Они обозначают начало и конец блока кода (метода, цикла, условия).
  3. Имена переменных. Используйте camelCase для переменных (playerHealth) и PascalCase для классов и методов (PlayerController).
  4. Читайте ошибки. Консоль ошибок (Console) в Unity подскажет номер строки, где код сломался.
  5. Практика. Не учите теорию без практики. Создайте скрипт, который вращает куб, затем скрипт, который двигает его по нажатию клавиши.

Что учить дальше?

После освоения основ переходите к темам:

  • События (Events/Actions) — для связи скриптов без прямых ссылок.
  • Интерфейсы (Interfaces) — для гибкой архитектуры.
  • Асинхронность (async/await) — для загрузки данных из интернета.
  • LINQ — для удобной работы с коллекциями.

C# — мощный инструмент. В начале он может показаться сложным из-за обилия правил, но именно строгость помогает избегать многих ошибок в больших проектах. Удачи в обучении!

Оцените статью
Unity Learn
Добавить комментарий