C# в Unity — что пригодится из курса
В движке Unity игры программируют на C#: поведение персонажей, управление, счёт, меню — всё это скрипты, то есть классы на C#. Язык тот же, что в этом курсе: переменные, условия, циклы, списки, методы, классы и наследование работают так же. Отличается то, кто и когда вызывает ваш код.
Как выглядит скрипт
using UnityEngine;
public class Spinner : MonoBehaviour
{
public float speed = 90f;
void Start()
{
Debug.Log("Игра началась");
}
void Update()
{
transform.Rotate(0, speed * Time.deltaTime, 0);
}
}using UnityEngine;— подключает классы движка.Spinner : MonoBehaviour— скрипт наследует классMonoBehaviour(урок Наследование и интерфейсы). Так Unity понимает, что класс — компонент, который можно повесить на объект сцены.- Метода
Mainнет. Unity сам вызываетStart()один раз перед первым кадром иUpdate()— каждый кадр, то есть десятки раз в секунду. ЗдесьUpdateкаждый кадр немного поворачивает объект:Time.deltaTime— время с прошлого кадра в секундах, поэтому за секунду набираетсяspeedградусов. Debug.Logпечатает в окно Console редактора Unity.Console.WriteLineтам ничего не покажет.- Открытое поле
speedпоявляется в окне Inspector, и его можно менять мышью, не трогая код. - Имя класса должно совпадать с именем файла: класс
Spinner— в файлеSpinner.cs.
Что знать до Unity
Unity добавляет много своего: сцены, объекты, физику, анимацию. Если одновременно учить и движок, и язык, легко запутаться, где ошибка — в C# или в настройках сцены. Поэтому полезно сначала пройти основы языка в консольных программах — уроки этого курса с первого по десятый, — особенно:
- переменные и типы —
int,float,bool,string; - условия и циклы;
- массивы и списки;
- методы, классы и свойства, наследование.
Чем Unity отличается от обычного .NET
- Unity использует свою среду выполнения, а не установленный .NET SDK, и поддерживает не все новые возможности языка. Какая версия C# доступна, написано в документации Unity для вашей версии движка.
- Вместо
doubleв Unity чащеfloat(5f): так устроены позиции, скорости и другие значения движка. - Случайные числа —
UnityEngine.Random.Range, а неSystem.Random(справка Как получить случайное число). Thread.Sleepи долгие циклы вUpdateостанавливают всю игру. Паузы делают средствами Unity.NullReferenceExceptionв Unity чаще всего значит, что поле скрипта не заполнено в Inspector илиGetComponentне нашёл компонент (справка Ошибка NullReferenceException).
Всё остальное — окна редактора, компоненты, физика, ввод, сборка игры — описано в официальной документации Unity: docs.unity3d.com и курсы Unity Learn.