Приветствую всех, меня зовут Виталий и я работаю с Unity 5 лет. Сейчас работаю разработчиком в компании YozmaTech.
В этой статье я расскажу вам о различных направлениях развития в сфере Unity девелопмента, которые помогут понять целостность проблемы, которую способен решать движок Unity, а именно, создание видео игры. Кроме этого, я опишу ряд ключевых понятий, о которых необходимо знать и понимать их основные принципы, и их вклад в создание конечного продукта. По моему мнению, эта статья в большей степени предназначена для разработчиков уровня junior и middle, хотя разработчики уровня senior также могут быть заинтересованы в данной информации, чтобы сопоставить ее со своей картиной мира разработчика. Я подчеркиваю, что информация в этой статье является моей рефлексией на долгий путь персонального роста как Unity разработчика, а не чем-то идеальным, эталонным. Скорее всего, вы можете встретить похожую информацию на иностранных ресурсах, которые ориентированы на нашу сферу деятельности.
Итак, начнем, для себя я выделяю 5 направлений развития, которые меня интересуют, а именно:
- Трехмерная математика и компьютерная графика;
- Язык С #, платформа Mono;
- Движок Unity;
- Дизайн программного обеспечения (ПО) (OOP, SOLID, Шаблоны проектирования ПО);
- Структуры данных, алгоритмы.
Моя заинтересованность заключается в том, что их изучение дает мне возможность покрыть все пробелы в моих знаниях по которым у меня возникали трудности и задержки в решении разного рода задач и воплощения моих идей. Пройдем по ним подробнее:
- Прежде всего, в Unity есть интересная особенность, это низкий порог вхождения. То есть, пользователь с поверхностными знаниями и маленьким опытом может создавать готовый, завершенный продукт и это может внушить мысль, что этих знаний достаточно для разработки игр, или, что Unity является спасением от изучения мат. и компьютерной графики. Но на самом деле это не так, понимание трехмерной математики и графики необходимо если вы хотите создавать интересный и конкурентный продукт. Эти 3 книги, 1, 2, 3 помогут Вам догнать предмет, их общая черта это большой объем материала и легкий старт в чтении, не требует сложных знаний. Кроме того, я считаю, что их желательно читать именно в таком порядке. Советую Вам разбираться в таких понятиях как vector, quaternion, dot product, cross product, rendering pipeline, shader, vertex, texture, mesh, global illumination, потому что они заполнят отсутствующие пазлы в вашей специфике работы двигателя Unity.
- Я прочитал около 10 книг, которые связаны с Unity, половину всей официальной документации и постоянно читаю Unity Blog. По моему мнению, документацию следует читать, потому что она логически структурирована и легко дает информацию. Более того, она покрывает все аспекты Unity. Blog Unity описывает текущие проблемы и их решения и конечно видение будущего направления куда будет развиваться движок. Кроме того, в блоге можно узнать детали различных частей движка, которые не описаны в документации. Что касается книг, то могу порекомендовать только две, первая об оптимизации, где представлены многие детали почему эта оптимизация важна и как она влияет на игровую сессию, а вторая об использовании шейдеров в Unity. Другие книги я считаю не стоят выделения времени на них.
- Язык C# обильный различным функционалом и возможностями, и я замечаю, что он постоянно совершенствуется. Для его изучения советую начать с книги Троелсена, она рассчитана на начинающего, объемная и с легким стартом, хотя автор не углубляется слишком в детали специфических тем. Затем советую обратить внимание на книгу Скита, особенностью книги является то, что она структурирована по версиям языка и .Net платформы. Далее было бы хорошо продолжить изучение по книге Рихтера, по моему мнению, он является глубоким исследователем и чувствуется его интерес разобрать на части самый интересный инструментарий языка. Еще одной интересной книгой является произведение братьев Альбахари, в отличие от предыдущих двух, авторы не касаются основ, а разбирают только более сложные темы, например в ней подробно расписано работу LINQ. В общем, эти книги мало повторяют друг друга, и у авторов различные подходы, поэтому не бойтесь тратить время, в каждой из них вы найдете что-то новое и интересное. Если вас интересуют более глубокие знания, то читайте Руководство по программированию на C#. Кроме того, советую разобраться, что такое Mono и .Net и особенности компиляции кода.
- Если вы хотите участвовать в проекте имеющем хотя бы несколько игровых механик, уровней или нагруженным бизнес-логикой с соответствующей визуальной частью, то вам не обойтись без паттернов проектирования, не говоря уже о таких базовых понятиях как OOP и SOLID. Советую начинать с масштабного произведения Мейера, опять же старт легкий и книга покрывает множество тем. Легкий для начинающего сайт рассказывает о паттернах, советую купить его книгу, она стоит своей цены. Для более глубокого изучения почитайте книгу Теплякова, здесь как и в предыдущей книге паттерны разбираются в контексте именно C#, кроме того, эта книга имеет отдельный самодостаточный раздел о принципах SOLID. И конечно изучайте первоисточник вывода понятия паттернов.
- Чтобы, эффективно использовать структуры данных недостаточно знать только работу коллекций в C#, потому что это большая и независимая от языка тема. Каждая коллекция имеет свои плюсы и минусы и чтобы знать как подобрать нужную коллекцию вы должны знать принципы работы всех коллекций или хотя бы основных. Работая с коллекцией необходимо понимать как она расположена в памяти и какая сложность операций над ней по времени и по памяти используя нотацию Ландау. Что качается алгоритмов, то конечно, многие из них уже являются частью языка С# и Unity, но когда вы получаете не тривиальную задачу вам приходится строить свой алгоритм, а для этого необходимо определить ряд критериев каким он должен следовать. И из этого можно сделать вывод, что чем лучше вы разбираетесь с алгоритмами и чем больше имеете опыт их написания, тем успешнее и быстрее вы выполните задание. Для этого рекомендую прочитать книгу «Введение в алгоритмы» и попрактиковаться на leetcode.
Еще хочу отдельно добавить владения десятипальцевым набором и на английском языке. Без них вы будете ползти как улитка, как постигая новый материал так и выполняя задания.
И прошу тебя, молодой разработчик, не нужно отчаиваться от объема знаний, которые необходимо освоить, потому что это очень интересный путь, хоть и длинный. Но систематический подход приведет тебя к невероятному результату.
Я буду очень рад комментариям особенно критике, но прошу Вас быть джентльменами 🙂
Спасибо за внимание и хорошего дня!