Для начинающих Unity3d программистов

Полезная информаци для начинающих Unity3d Разработчиков

Полезный материал для начинающих (и не только) программистов unity3d: ссылки, мнения, литература, ресурсы для обучения, как проходить интервью и готовиться к нему. Как учиться программировать под Unity3d?

Дисклеймер

По большей части мысли, мнения и советы — мои. Они работают для меня, и, я надеюсь, сработают и для вас. Я даю субъективные оценки книгам и другим источникам информации. Даю рекомендации проверенные только моим опытом.

Решил написать эту статью, после нескольких комментариев с просьбой привести ответы на список вопросов для программистов unity3d.

Прямых ответов на список вопросов не будет. Чуть позже прямо в статье я дополню вопросы комментариями почему тот или иной вопрос хороший и какого рода ответ ожидается. Это позволит кандидату узнать на что обратить внимание при обучении, а интервьюверу, что подсказать кандидату и тп.

Прямые ответы — очень плохая практика еще и потому, что некоторые HR-manager’ы могут неправильно использовать такой список в качестве тестов, чего совсем не хочется допустить. Да и для начинашек, мне кажется вредно все готовенькое, гораздо полезнее знать где ответы получить и поучиться.

В этой статье хочу привести источники, из которых нужные знания можно почерпнуть. И бонусом добавлю комментарии для самых-самых начинающих: как учиться/где/на что обратить внимание.

Просьба. Если Вам что-то не понравится, ПОЖАЛУЙСТА, высказывайтесь в комментариях к статье, а не вконтакте или на форумах). Ваши полезные комментарии тонут, а я не успеваю отвечать и вносить по ним правки в статью

Готовимся к интервью

Чтобы хорошо подготовиться к техническому собеседованию нужно вспомнить/изучить/проработать многие вопросы. Я разбил вопросы по группам, они совпадают с темами из вопросов для unity3d программиста). Давайте их подробно рассмотрим.

Общие вопросы

Техническое собеседование скорее всего начнется с простых вопросов о предыдущем опыте кандидата или не технических вопросов. Часто кандидату предлагают самому рассказать о себе и своем опыте. Мои мысли на счет этой части интервью такие: нужно быть готовым. Порепетируйте. Очень часто я пишу сопроводительные письма к отклику на вакансию на хедхантере или когда просто шлю резюме на почту. Это примерно и есть то, что Вас попросят рассказать. Расскажите заранее, заодно потренеруетесь.
Если коммерческого опыта нет: расскажите о ваших наработках, лабораторных, собственных проектах и даже принесите ноутбук с вашим кодом!

Алгоритмы и структуры данных

Эта область, кмк, которая программиста-профессионала отличает от начинашки. Лучшим ресурсом для изучения базовых алгоритмов считаю русскоязычный курс Александра Куликова в Computer Science Center: Семестр раз, Семестр два.
А сам Computer Science Center очень хороший обучающий центр, который всем очень рекомендую.
Рекомендаций по книгам в этом разделе никаких приводить не буду, их довольно много.
Видео-курс смотрится очень быстро, и на самой первой лекции рекомендации по книгам, для тех кто предпочитает читать, а не смотреть/слушать тоже дадут.

Графика/3D математика/Rendering pipeline

Программирование графики очень тесно связано с математикой. Линейной алгеброй в частности. Матрицы, векторы, кватернионы и операции над ними — это необходимый базис, без которого в программировании графики никак не обойтись.

Математика

Лучшие книги для изучения математики. Две из них можно найти в pdf, в интернете, а Foundations не встречал.
Очень советую приобрести ее на амазоне. Довольно неплохой paperback, качественная бумага, картинки. Содержание, само собой, просто супер.

Все три книги ориентированы именно на тех, кто интересуется математикой применительно к программированию графики и игр в целом. В книге 3D Math Primer for Graphics and Game Development даже главы про работу графического пайплайна и шейдеры есть.

Графика

Непосредственно посвященные программированию графики книги:

Книги

Давайте начнем с книг. Очень хороший туториал есть у nVidia, лаконичный и очень по делу.
Еще есть книга Кенни Ламмерса. Это сборник рецептов, можно пытаться повторять, можно полистывать иногда, но учиться писать шейдеры по ней нельзя с нуля. Нужно изучить математику, нужно изучить синтаксис и возможности CgFx. У Ламмерса этого нет. Поможет книга от nVidia и чтение документации Unity.

C# и .Net

Я рекомендую подойти к изучению языка основательно. Не стоит смотреть видео «как сделать платформер/три-в-ряд/другой-жанр» на ютубе от героев-скриптеров. Даже обучающие видео от Unity я не рекомендую, не нужно изучать язык по ним.

C# мощное оружие, которым нужно уметь владеть основательно. На мой субъективный взгляд лучше всего изучить C# вне Unity вообще, писать консольный, оконные приложения в студии и читать книгу Эндрю Троелсена. Поднаторев перейти на Рихтера и Скита.

Книга Джефри Рихтера — это огромный талмуд и прочитать ее очень сложно, там все тонкости CLR, .NET. А вот книга Джона Скита читается очень легко, и становится ясно почему разработчики языка привносили те или иные синтаксические удобства.

Unity3d

Я не читал ни одной книги по Unity, но слышал о существовании «Unity в действии» (Unity in Action). Если кто-то читал, отпишитесь пожалуйста, в комментариях.

На момент моего начала с Unity я довольно хорошо был знаком с C#. Порог входа у нее очень низкий. Тоесть время, чтобы начать программировать на Unity очень небольшое, по сравнению с другими игровыми движками и .NET технологиями.

Советы от меня

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

Сначала алгоритмы, концепции, аббревиатуры (имею ввиду, почитайте про выработанные практики: SOLID, DRY, GRASP, KISS). И много-много практики, пишите код, много кода. Изучите слепой десятипальцевый метод печати и пишите код быстро. Сейчас я тьфу-тьфу-тьфу боюсь представить на сколько замедлится моя производительность если я сломаю палец (однажды в детстве ломал, почти вся кисть в гипсе). Уже очень привык и думать и печатать с определенной скоростью. Если скорость печати будет в 3-4 раза ниже, чем скорость мысли, наверняка и сконцентрироваться очень сложно. Бррр, страшно подумать.

В каокй-то момент вы доберетесь до паттернов проектирования, архитектурных паттернов и книги про рефакторинг Мартина Фаулера. Потянет лепить эти самые паттерны в самые разные места ваших программ/игр. Просто чтобы попробовать. Потому что это будет казаться верным и нужным.

А потом придет, рационализм, и Вы будете писать код, которые решает задачи. Не без оглядки на возможные изменения в задачах, конечно.

Про устройство в студию мечты

Совсем недавно читал большую дискуссию в твиттере, которую организовала @sehurlburt, с участием известных графических инженеров и выцепил несколько хороших идей. Далее следует мой вольный их перевод. Ссылки с символом «@» ведут на оригинальные твиты, которые можно прочитать. А так же можно подписаться на их авторов в твиттере, порой там появляются очень интересные ссылки и мысли.

@sehurlburt (Stephanie Hurlburt, Graphics Engineer)
Начинайте изучать новую большой область, такую, как например, программирование графики понемногу. Ставьте себе небольшие задачи и выполняйте их, таким образом вы научитесь очень многому. Огромный плюс такого подхода заключается в том, что вы будете оставаться сфокусированы на конкретной задаче. И, что немаловажно, выполнив какое-то завершенное демо, вы сможете представить его на интервью в качестве портфолио.

@Atrix256 (Alan Wolfe, Graphics Programmer at Blizzard)
Рекомендую пробовать проходить интервью в студию мечты и в случае отказа, пытаться через полгода.

@IonSwitz (Henrik Jonsson, Graphics Programmer EA)
Посылайте резюме, даже если в данный момент открытых вакансий нет.

Особенно полезен 1й совет Стефани! Сам стараюсь придерживаться такой же тактики. Сейчас я делаю небольшой игровой движок в качестве обучения. И всегда ставлю небольшую цель для демки, например: «Сделать демо с летающим космическим кораблем». Исходя из такого определения задачи для демо, я разбил это на подзадачи: скайбокс со звездами, космическая станция относительно которой будет заметно движение корабля, загрузка моделей, загрузка текстур, математика трансформа и тд. Посмотреть, что у меня получилось: первое демо.

Конец

В конце хочу сказать, никогда не отчаивайтесь, если что-то не получается. Учитесь программировать, читайте книги по разным областям программирования: графика, AI, физика. Ходите на интервью часто, не оседайте и вообще оставайтесь голодными до новых знаний. Учитесь всегда! Ставьте под сомнение все!
Эта статью в том числе :)

Буду признателен более опытным коллегам за любые советы программистам в комментариях!

Полезные ссылки

Подборка ресурсов по Unity3d — собранные мной полезные материалы по теме Unity3d.

Ресурсы для программистов графики — полезнейшие ссылки по теме программирования графики: рецепты, статьи и видео.

Понравилась статья? Поделиться с друзьями:
Комментариев: 50
    1. Сергей Кормишин

      Все в порядке :) Это не баг, это стандартное средство WordPress, использовал чтобы показать нескольким ребятам черновик статьи. А сейчас решил открыть всем, чтобы больше фидбека собрать и подредактировать.

  1. Sasha Domase

    Можно больше ссылок на сами книги и конечно доработать все моменты, а так статья отличная. Можно еще поподробнее о каждой из книг?

    1. Сергей Кормишин

      Привет, Саша, а что именно нужно рассказать о каждой из книг?

      1. Sasha Domase

        Вот прям по пунктам, что в каждой книге описано, так же на вакансиях требуют математическую подготовку, у вас указаны книги по Графике, а можно что-то общее или это вообще не требуется

        1. Сергей Кормишин

          Обычно математика в играх это векторная алгебра, матричные преобразования. Они в этих книгах как раз и рассматриваются, пусть Вас не смущает, что они указаны как «математика для программистов графики», для «программистов геймплея» все очень применимо. Тоесть это общее как раз.

      2. Hack

        Привет, скажи как относишься к книге Изучаем С# 3-издание, вроде так называется?)

        1. Сергей Кормишин

          Привет, не читал ее)

  2. MacKot

    А могли бы вы дать ссылки на какие нить готовые проекты в которых вы считаете патерны проектирования, интерфейсы, и вобще архитектура приложения хорошо реализована в специфике юнити?

    1. Сергей Кормишин

      Привет, давай на «ты» :) ?

      Хорошая архитектура приложения это скорее академическая величина.
      В книгах описываются подходы, чтобы решить ту или иную задачу, но в реальных условиях это чаще всего не работает. Меняются требования к игре, добавляются фичи, накапливается технический долг, который не всегда выгодно решать. Всегда есть trade-off со скоростью реализации фичи/бюджетом и качеством кода.

      Пример хорошего кода? На unity3d, я мало видел открытых репозиториев. Те что видел, язык не повернется назвать примером хорошего кода. Видел на хабре хорошие статьи про Entity Component system (примерно так называлась), идея вроде хорошая, но в большинстве проектов излишняя сложность.

      Если не в разрезе Unity3d — исходный код Doom3 классный. Но опять, как посмотреть, какие задачи команда решала, какие аппаратные ограничения были в то время, сейчас многие из них уже не актуальны.

      Универсально хорошего кода/подхода, наверное нет. Игры разные ведь: жанры, требования к производительности, всякий социальный обвес, все это накладывает след.
      Мне кажется все с опытом приходит, программист становится по хорошему «ленивым». Делает все ровно как в ТЗ, с минимальным закладыванием на изменения, а уровни косвенности вводит только когда это действительно требуется.

      1. MacKot

        Давай)
        Ну проблема как раз в том что не видно хорошишь репозиториев именно по Юнити. Про компонентно ориентированное програмирования я знаю, тогда возникает следущий вопрос к чему тогда везде требуют знания ООП если по сути, использовать компоненты из Юнити куда более полезно и расширяет функционал нежели пытатся построить монстра из ООП, и не понятно чего хотят увидеть в следствии выполнения тестового задания.

        1. Сергей Кормишин

          А какие задания примерно? Можешь условия написать?

          Обычно тестовые задания — маленькие игры, настолько, что даже не задумываешься о каких-либо сложных иерархиях.
          И дают их очень редко (из моего опыта). Я посетил несколько десятков интервью: и всего пару раз меня просили сделать тестовое задание.
          Одно ТЗ я помню. Мне понравилось, что попросили прямо на месте (дали компьютер, разрешили пользоваться интернетом) его выполнить.
          Задание было такое: Проверить является ли скобочная последовательность правильной. Есть разные скобки [, (, { и в последовательности каждой открытой скобке определенного типа должна соответстовать закрытая скобка такого же типа.
          Кмк, просто, вкусно и быстренько проверить умеет ли человек программировать.

          1. MacKot

            Походу сайт не дает ответить потому что я кидаю картинку с тестовым или ссылку а он ее не пропускает

          2. Сергей Кормишин

            Видимо, что-то непонятно с системой комментирования, происходит. Это сторонний сервис Disquss. Я пару раз на почте видел твои сообщения,- представил что за задача :)
            Думал, что ты сам удаляешь комментарии, и в модераторской панели их не вижу почему-то, как будто действительно фильтруются :(

            * Ссылка для читающих комментарии вот: goo.gl/KboSdW

            По твоему описанию в комментарии на почте — вполне достаточно и хорошо решил задачу, отказали? Что-то в ответном письме/звонке сказали? А что за студия? В каком городе?

          3. MacKot

            Понятно)
            Ну там было сообщение явно скопирование по шаблону тип мы внимательно ознакомились с тестовым, но мы вам ниче предложить не можем, а как я в ответном спросил про какой то фидбэк, мне ответили у нас нету времени отвечать каждому, ничем не можем помочь до свидания, вобщем то я вобще не встречал чтоб давали какой то фидбэк когда либо после тестового, прост показная вежливость, а компания Nekki.

          4. Сергей Кормишин

            Так бывает, ничего не поделать. У меня есть примеры гораздо более неприятных опытов. А есть и наоборот очень приятный опыт именно отказов!
            Это в целом как с людьми :)
            Не знаю насколько Nekki хорошая компания в плане работы, но вроде неплохие игры делают. А ты сейчас где работаешь?

          5. MacKot

            Ну сейчас в soviet games на удаленке, там по сути движок для визуальных новелл их производства, а свободное время все зубрежка нового, наконец нашел очень хорошую ресурсоемкую статъю, чтоб как то разложить по полкам что везде нахватал

          6. Сергей Кормишин

            А что за статья?) О чем?

          7. MacKot

            Твоя :D

          8. Сергей Кормишин

            Хаха) Польстил :) Постараюсь, кого-то привлечь, чтобы улучшить ее

  3. Max Postnikov

    Порекомендую книжку:
    3D Graphics for Game Programming, автор JungHyun Han https://www.amazon.com/Graphics-Game-Programming-JungHyun-Han/dp/1439827370

    Книга объясняет графический пайплайн безотносительно конкретных апи. Читается очень хорошо, минимум воды.

    1. Сергей Кормишин

      Привет! По содержанию (нашел на сайте автора: goo.gl/FDFmvW) очень интересный материал! А Вы графический программист?

      1. Max Postnikov

        Нет, не графический. Но осознание необходимости почитать такую книжку, думаю рано или поздно приходит к любому, кто работает с 3d, с юнити в частности :)
        Саму книгу можно найти в сети, в виде pdf.

      2. Hack

        Подскажи, а есть на русском книги какие то по Графика/3D математика/Rendering pipeline? И что делать если не очень знаешь английский?)

        1. Сергей Кормишин

          Однозначно, если у Вас серьезные намерения в программировании, причем любом программировании — английский учить. Лучше чтобы от зубов отлетал. Чтобы бегло любую документацию читать.
          По книгам — ничего порекомендовать на русском не могу. Может кто из коллег набредет на этот комментарий — откликнется. Я ни одной книги не встречал.

  4. Vladimir

    Ты изучал насколько я понял шейдерный язык от Nvidia(Cg). Но насколько я понял, что поддержка компанией этого языка прекращена. Так вот стоит ли его учить? Есть смысл? Что говорят в твоей компании по поводу этого? Тут еще просто Vulkan вышел, так это вообще по-моему мнению знак, что либо DX скоро конец настанет, либо его кроссплатформенным сделают и поэтому HLSL изучать тоже как бы не вариант.
    Воот, мне интересно, что ты думаешь насчет всего этого. Возможно, моя позиция неправильная и поэтому с радостью бы послушал твою точку зрения и аргументы) Спасибо:)

    1. Сергей Кормишин

      Привет, я читал книгу от nVidia, да. Шейдерные языки что GLSL, что HLSL очень похожи, они гораздо беднее чем привычные языки программирования. Система типов беднее, набор операций сильно меньше. И мне кажется принципиальной разницы нет, на каком учиться. Я выбирал OpenGL и GLSL из-за того, что думал что эта связка используется на консолях (у XBOX — понятно DirectX, а у PS gnm, у всяких Nintendo может быть OpenGL, но точно я не знаю).

      Из-за того, что вышел Vulkan, DX не настанет конец. Я не знаком ни с тем, ни с другим, но представляю что DX12 и Vulkan предоставляют схожие низкоуровневые API.

  5. MacKot

    Привет, можешь посоветовать какие то книги по клиент серверную разработку игр, там как лучше синхронизовывать рантайм геймплей, и не только?

    1. Сергей Кормишин

      Привет, это к сожалению, абсолютно не моя область, поэтому ничего посоветовать не могу.

  6. Леонид

    Купил готовый продукт анимации, открывается только в Unity, а мне в итоге нужны PNG и далее скомпилировать их в SWF файл для того, что бы задить в клиент игровой. Как мне это сделать? Могу оплатить за урок. Ссылка на купленный продукт в assetstore

    1. Сергей Кормишин

      Привет, Леонид. То, что вы купили — это настроенные системы частиц. Чтобы получить секвенцию этих эффектов, вам нужно их поместить в пустую сцену и чем-то захватывать картинки каждый кадр. И прозрачность из отрендеренных кадров по цвету выделить. Поэтому можно у камеры поставить Clear Method — Solid Color с хромакеем.

  7. Попкин

    «не бросайтесь делать поделки, когда вы не знакомы с языком и программированием вообще» вот это бред)) Так как просто на теории года 4 потратите))А если будете одновременно и практику и теорию то за год))

    1. Сергей Кормишин

      Привет, не очень приятно ваше резковатое заявление, но отвечу — Каков по-вашему будет прогресс человека — который не знаком с программированием вообще и с языком на котором собирается что-то делать? По-моему — нулевой или близкий к тому, постоянно обращаться в поисковик или книгу с вопросами: Как реализовать то или иное поведение?
      «Лучше день потратить, потом за 5 минут долететь»(с)

      1. ывапвапвап

        Ну фиг его знает, там есть ПлейМейкер, где можно игру делать гипотетически и без знания программирования. Но меня оторопь берет от всех этих диаграмм и прочего, полазил полазил, пришел к выводу, легче мне самому и удобнее скрипты писать для своих нужд, небольшие знания языка C# есть, да и сижу разбираюсь как что там функционирует)). Что-то даже начинает получаться уже. Да и хорошая тренировка в программировании, самому все делать.

        1. Сергей Кормишин

          Причем здесь плеймейкер?! Мы обсуждаем статью для начинающих Unity3d программистов. Если хотите вашим опытом поделиться — welcome, на форум — coremission.net/forums

          1. ывапвапвап

            Как это причем? Тут же про создание игр на движке Юнити говориться? А там есть Плеймейкер, диаграммы делаешь и все к примеру.
            Для тех, кто хочет делать игру на этом движке, но не особо хочет программированием заниматься.

            Хотя по мне проще скрипты написать, чем в этом Плеймейкере возиться.

          2. Сергей Кормишин

            Да) Сорри, я плеймейкер и гейммейкер перепутал. Все верно ;)

  8. Vladimir

    Скажите сильно ли вам помог язык Cg, когда вы работали в Unity? Просто шейдеры же это из отрасли компьютерной графики, а здесь уже готовый двиг. Математика, алгоритмы и С# — это 100%. А вот насчет Cg почему-то сомнения начали выступать, что он мне в итоге может не пригодиться. (Пока вот работаю и не пригодился еще ни разу) Также в версии Unity 2018.1 планируют сделать визуальный редактор шейдеров. Вот ссылка на новость https://vk.com/unity_digest?w=wall-95922035_1517. При изучении графических библиотек от изучения шейдеров конечно никуда не деться. Но мне интересно нужно ли это конкретно для Unity в 2018 году?

    P.S. Зарегистрировался на сайте, пользы нет) Пришлось всего равно входить в Disqus. Пока мой комментарий без фото. Либо это потому что коммент ожидает утверждения, либо баг.

    1. Сергей Кормишин

      Шейдерные языки — примитивные, и очень похожи друг на друга. В том числе и Shaderlab, который просто надстройка над CgFX. Очень люблю выражение одного из моих преподавателей в университете: Не учите языки, учите концепции.
      С пониманием концепций, Вы любой язык освоите за месяц. Если вы не планируете заниматься только компьютерной графикой — то вам шейдерные языки вообще ни к чему ;)

      Да, Disqus это отдельная система комментирования, форум и сайт с ней нельзя связать тесно, но она хорошо работает, уведомления на почту присылает стабильно. Спама почти совсем нет.

      п.с. Приходите на форум общаться :) http://coremission.net/forums

  9. Racingstream

    Сергей, спасибо за подборку.
    А почему в подборке книг по C# не указали Герберта Шилдта? Мне кажется, что для новичка очень неплохой вариант.

    1. Сергей Кормишин

      Привет, потому что Шилдта я не люблю. А в книги по что называется «скриптингу в Unity» я не верю. Потому что — это ничем не лучше туториалов с ютубчиков. Monkey see -> monkey do. А C# это богатый язык программирования, и учить его нужно вне рамок движка.

  10. Евгений Тимофеев

    Хорошая статья. Как раз то, что искал.
    Опыт c# есть, с математикой в норме все. Желание учить, пилить и развиваться на месте)
    Не знал, с чего начать в плане самого Unity.
    Указанные книги (графика, математика) есть в свободном доступе или проще заказать? Не видел в книжных ничего подобного.

    1. Сергей Кормишин

      Спасибо! Некоторые есть в интернете, да.

      1. Евгений Тимофеев

        Foundations есть в открытом доступе. Нашел, скачал)
        По крайней мере, первую часть.

  11. ывапвапвап

    Знание математики? Ну, я пока делаю простую игру 2D, там пока были минимальные основы, знание, что такое оси x и y, там их координаты, как время на скорость перемножить)). Короче математика на уровне 5 класса. Хотя вполне возможно пробелы еще в знаниях по математике всплывут возможно по мере разработки игры.

    Ну а вообще наполеновских планов строить не надо. Надо сначала простую игру сделать.

    Кстати, даже если хорошо обучился бы, не знаю, смогу ли в студии работать. Брат программист профессиональный, с ним еще одну игру стали разрабатывать, уже есть противоречия насчет того, как геймплей должен выглядеть в игре)).

    ну и параллельно свою игру начинаю делать. Просто когда начинаю игру делать, хочется сделать именно так, как мне все нравится, начиная от сюжета, стиля графики, кончая геймплеем, а в студии я бы сказал это все говно не собираюсь я такое говно делать и все идите все нафиг))

  12. ывапвапвап

    А вообще конечно при создании игры надо не забывать про саму игру. А не только технические составляющие. Сама игра может быть идеальная в техническом исполнении, с точки зрения программирования, но может быть абсолютном неиграбельным говном в вакууме))

Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: