что нужно знать junior unity
Что должен знать Junior программист на Unity?
Есть же минимальные требования, там табличка какая нибудь?
У каждой организации будут свои требования, как правило не соответсвтующие реальности работы в этйо организации.
Из обязательного бы я назвал уверенное знание C#.
Если интересно, найдите книгу Unity Certified Programmer Exam Guide by Philip Walker, помотрите рекомендованные темы для сертификации.
Если не готов прям учить, то иди QA. Проще пробиться. А там в дизайнеры. Просто Unity требует уже инженерный подход и знание не только C#, но и самого движка. Минимальных требований нет.
Или можешь https://catlikecoding.com/unity/tutorials/ посмотреть.
Просто вопрос странный. Ты хочешь устроиться инженером, и спрашиваешь минимальные знания.
а, понял, спасибо. А что тогда в среднем работодатели просят?
WasTabon
> А что тогда в среднем работодатели просят?
Тут есть целый раздел с работой, там и посмотри
Многие наниматели сами не знают, как должен выглядеть правильный джуниор, часто копируют умные фразы из других объявлений, особенно HR-менеджеры, поэтому не воспринимайте все буквально.
В конечном счете программист разивается для себя, а не чтобы соответствовать каким-то мнимым параметрам.
overt
> Многие наниматели сами не знают, как должен выглядеть правильный джуниор, часто
> копируют умные фразы из других объявлений
В том то и дело что бывают и не знают, но по факту им нужен middle (минимум) в геймдеве, потому как решать задачи именно придется в авральном, в большинстве случаев порядке, а Junior тупо многие вещи которые будут всплывать в процессе такой работы, не потянет, а времени узнать эти вещи у него просто не будет, и скорей всего подсказывать то же особо ему никто не будет или таких не будет вовсе.
WasTabon
> Есть же минимальные требования, там табличка какая нибудь?
ТС для тебя коротко, Junior в геймдеве не нужны, все что ты увидишь в требованиях на Junior в вакансиях от работодателя это знания в подавляющем большинстве случаев близкие к уровню Middle (проще говоря Junior это без пяти минут Middle), обозванные Junior, что из минимальных требований тебе понадобится, это хорошие знания как минимум школьного курса математики (алгебры, геометрии и т.д., на что делать конкретный упор можешь посмотреть в вакансиях от работодателя) это прям самый минимум, в целом таких как ты ТС я бы на месте работодателя уже не стал брать, потому что ты, как минимум ленишься решить уже совсем простую задачу, которая требует нескольких минут поиска и сбора информации, что будет дальше? будешь по каждому простому вопросу в работе лезть на форум или куда еще, задавая глупые вопросы? в геймдеве на работе, так не прокатит, тебя сразу берут как боевую единицу, которая будет решать задачи неплохого уровня, а точнее уровня как выше сказал близкому к Middle за короткий срок.
overt
> В целом, если умеете написать под андроид какой-нибудь платформер или другую
> 2D-игру, которая не будет тормозить и непомерно отжирать память, при этом у вас
> понятный, опрятный код, то можно уже на что-то расчитывать
Это уже вторично, и гораздо больше нужно, первично написал выше, на его резюме даже в геймдев компаниях без этого обращать внимания даже не будут.
lookid
> Просто Unity требует уже инженерный подход и знание не только C#, но и самого
> движка
+, я бы выразился даже конкретнее общего понимания как устроены все эти движки, а так как сделаны они все они по общим принципам то и соответственно общее понимание поможет въехать быстро в любой движок.
P.S ТС вот тебе хорошая книга для начала, чтобы повысить свои шансы на трудоустройство
Вопросы для собеседования Unity3d программиста
Несколько лет занимаюсь тем, что коллекционирую хорошие вопросы для собеседования unity3d разработчиков.
Немного информации про эти вопросы: Я как unity3d программист довольно часто бываю на собеседованиях, а иногда их и провожу, поэтому какие-то вопросы я отметил как хорошие и сгруппировал в этот список. Он, конечно же, не претендует на полноту, академичность и я буду очень рад если вы что-то добавите или поправите в комментариях.
С одной стороны: часто бывает, что и в хороших игровых студиях интервью проводит абсолютно неподготовленный лид-разработчик, который морщит лоб и пытается из головы “навскидку” вспомнить какой-то интересный случай, который случался с ним недавно, чтобы спросить о нем кандидата. С этой стороны мой список поможет подготовиться к проведению подобного собеседования.
С другой стороны: Собеседования программистов (в том числе и unity3d программистов) это чаще всего набор стандартных вопросов, на которые просто необходимо знать ответы. Это мат.часть/ликбез, которую совершенно необходимо знать программисту. И перед интервью мой список поможет вспомнить какие-то моменты.
Общие вопросы
С вопросов из этой категории обычно начинаются и заканчиваются интервью unity3d разработчиков, они общие, часто не технические. Цель таких вопросов: познакомиться с кандидатом, послушать о его опыте. Многие из вопросов применимы не только для интервью на позицию unity3d программиста, но и в целом всех программистов.
Алгоритмы и структуры данных
Что делает эта функция?
В случае беззнакового, целочисленного n
Графика/3D математика/Rendering pipeline
В программировании игр графика это главный инструмент взаимодействия с игроком. “Art is a king”,- говорят в игровых студиях.
Я считаю, что игровой программист должен иметь какое-то представление о том, как устроен графический pipeline и быть хоть немного знакомым с 3d математикой.
Как проходить собеседования на Unity разработчика
Вступление и личные наблюдения
Благодарности
Спасибо Никите и Денису за помощь в оформлении и составлении списка вопросов.
Как правило занимает от 10 до 30 минут. На нём задача рекрутера дать предварительную оценку по кандидату. Обычно просят рассказать о себе.
Из личного опыта пришел к тому что нужно научиться за 3 минуты коротко резюмировать свой опыт, выделить самое главное и уверенно презентовать себя другому человеку. Эта информация должна касаться только вашего пути разработчика. То, что вы умеете кататься на коньках, рисуете маслом или прыгаете с парашютом мало кого интересует на данном этапе. Предполагается, что вам будут платить деньги за выполнение задач, описанных в вакансии, поэтому максимально заинтересуйте рекрутера рассказывая только о релевантных для позиции навыках. Этого будет более чем достаточно. Вас спросят подробнее о ваших увлечениях и других вещах, если это будет необходимо.
Пример ответа на “Расскажите о своем опыте.”:
“Разрабатываю игры со старшей школы как инди разработчик, участвовал в джемах и конкурсах. На первом курсе начал работать в гипер-казуальном стартапе. Разрабатывал проекты на Unity C# и Lens Studio JavaScript. Отвечал за полный цикл разработки и гейм дизайн, общался с заказчиком и т.д. Команда состояла из. Потом принял решение расти как программист дальше, пошел работать в большую компанию для улучшения понимания процессов разработки и технических навыков. Там делал… За время работы научился делать…. На последнем месте работы делаю… Удалось автоматизировать… Предложил варианты решений для. Хочу сменить работу потому, что. ”
Вот мы и прошли скрининг. В целом, вроде бы не сумасшедший, какие-то слова из вашей речи рекрутер смог сопоставить с требованиями в вакансии, “Лондон из зэ кэпитал оф Грейт Британ” смогли из себя выдавить. Супер! Идём дальше!
Интервью обычно делится на такие части:
Общие вопросы по разработке ПО (OOP, algorithms, DI, SOLID, etc.).
Вопросы по C# (boxing/unboxing, GC, async/await, reference types, etc.).
Unity и опыт в конкретном игровом жанре(match 3, slots, AAA, FPS, etc.) или направлении(mobile, PC, consoles, AR/VR, etc.).
Общие вопросы по разработке
Принципы ООП. Рассказать про каждый. Как это реализовано в языке C#? Как применяли на практике?
SOLID. В чем смысл каждого принципа и как применяли на практике?
Структуры данных. Какие структуры данных вы знаете? Для каких задач лучше использовать ту или иную.
В чем разница между array и List?
Что такое хеш-таблица? Что такое хеш-функция? Как обрабатываются коллизии в словарях?
Алгоритмы. Поиск пути в графе, сортировки коллекций, поиск элемента в коллекции. Какие подходы в обработке коллизий объектов в 2д и 3д знаете?
Сложность алгоритма. Big O notation.
Шаблоны проектирования. Архитектурные шаблоны(MVC, MVP, MVVM, компонентный подход, ECS). Шаблоны для решения типовых задач(GoF, GRASP, Game Programming Patterns).
Dependency Injection. Что это за подход разработки и умеете ли работать с Zenject?
Реактивность. Что это за подход разработки и умеете ли работать с UniRx?
Клиент-серверные приложения. В чем основные принципы разработки клиент-серверных игр? Какие типы вы знаете и разрабатывали?
CI/CD окружение. Для чего используется? Есть ли опыт работы с ним?
Вопросы по C#
Чем отличается динамическая типизация от статической?
Значимые и ссылочные типы. Спецификаторы аргументов функций ref, out.
Boxing и unboxing. Что это и почему это плохо?
Строки. Операции над строками, StringBuilder.
Что такое класс? Что такое структура? В чем отличие между структурой и классом?
Что такое интерфейс? Какие члены можно описывать в интерфейсе?
Отличие интерфейса и абстрактного класса.
Обработка исключений. Блок try, catch, finally. Порядок выполнения.
Что такое делегат? Ковариантность, контрвариантность.
Что такое замыкание? Привести пример с замыканием.
Может ли структура реализовывать интерфейс?
Что такое атрибут? Для каких целей используются атрибуты?
Что такое рефлексия? Для решение каких задач приходилось использовать?
LINQ. Extension syntax, query syntax.
Как работает сборщик мусора? Что происходит с объектами которые имеют циклические зависимости?
Есть ли опыт написания авто-тестов и юнит-тестов?
Вопросы по Unity
Игровой движок. Что собой представляет и какие проблемы решает?
Корутины. Что это? Работают в одном потоке или в разных? Какой механизм C# используется для реализации корутин в юнити? Можно ли запустить рутину не из MonoBehaviour? Какие типы yield инструкций вы знаете? Когда они вызываются?
Что такое Game Object? Что такое сцена?
Что такое MonoBehaviour? От чего он наследуется? Можно ли создать тип наследуемый от Component?
Жизненный цикл MonoBehaviour.
Порядок вызова Event функций в runtime режиме Unity.
Физика. Какие компоненты позволяют работать с физикой. Что такое rigid body? Что такое рейкаст? Отличие от лайнкаста?
NavMesh. Поиск пути.
Опыт работы с UI компонентами? Что такое канвас? Что такое панель? Чем плох и хорош канвас? Как верстать адаптивный интерфейс? Что такое LayoutGroup?
Камера. Типы камер, параметры для настройки. Скай бокс, occlusion culling.
Что такое deltaTime и fixedDeltaTime? Отличия между ними.
Аниматор. Можно ли дописывать логику к состояниям аниматора? Что такое Timeline и опыт работы с ним?
Опыт написания кастомного редактора, окна для инструментов, расширения для ускорение и автоматизации рутинных задач.
Ассет бандлы и адрессаблы. Для чего используются и есть ли опыт разработки с их использованием?
Батчинг и Draw calls. Что это? Какие подходы оптимизации вызовов отрисовки вы знаете?
Что такое mesh? Из чего состоит 3д модель?
Опыт работы с шейдерами. Приходилось ли писать шейдеры?
Профайлинг. Какие инструменты для диагностики проблем производительности вы знаете(profiler, deep profiling, frame debugger, memory profiling, profiling on device)?
Unity Web Requests. Что это? Приходилось ли работать с клиент-серверным взаимодействием?
Есть ли опыт работы с нативным слоем? Android Studio, XCode.
Опыт интеграции SDK(реклама, аналитика, конфиги, БД, пуш уведомления).
Test Runner. Опыт работы с тестами в движке.
Конечно же это не полный список того что вас могут спросить на собеседовании. Хотелось показать в какую сторону смотреть и что спрашивают в большинстве случаев на технических интервью. Вас могут попросить решить задачу в реальном времени или написать программу. По моему опыту, очень важным моментом является двустороннее общение. Если на этапе с рекрутером кроме описания вакансии вряд ли вам дадут детальную информацию по будущему проекту, то на техническом собеседовании самое время задавать вопросы вам. Обязательно спросите про состав команды, уровень разработчиков, наличие код ревью. Спросите про организацию процессов, кто за что отвечает и как происходит валидация вашей работы. На какой проект вас рассматривают если вам еще не сказали окончательно. Так же вопросы с вашей стороны дадут понимание компании, что вы действительно заинтересованы в получении работы.
Вопросы
Есть ли опыт провалившихся дедлайнов? Как справлялись с ситуацией?
Как решали задачи которые не могли решить самостоятельно?
Расскажите о самой сложной задаче.
Как вы оцениваете задачи по времени и сложности?
Есть ли опыт менторства? Как работали с джунами?
Приходилось ли работать в стрессовой обстановке перед релизом?
Как относитесь к овертаймам?
По какой методологии работали(agile, scrum, kanban)?
Подведение итогов
🎲 Разработка игр на Unity: с нуля до профессионала
Игорь Карпекин карпекин
Кто такой разработчик игр Unity/Game Developer
Поддерживаются операционные системы как для ПК, так и мобильных устройств.
Unity-разработчики участвуют во всех этапах жизненного цикла производства игр: создании, тестировании, доработке, поддержке, обновлении и модификации. Работа не останавливается на релизе игры – нужно постоянно тестировать продукт на корректность работы с новыми версиями операционных систем и новым оборудованием, следить за жалобами пользователей и оперативно исправлять ошибки, выпускать дополнения и модификации игры.
Как стать разработчиком игр: где и чему учиться
Где учиться – на курсах по созданию игр, по книгам или видеоурокам на YouTube – сугубо личный выбор. Мы рекомендуем обучение разработке игр на систематических курсах, которые дают представление о геймдеве в целом и разработке игр на Unity в частности.
Язык программирования C#
В дальнейшем понадобится изучить язык в полном объеме, но для начала сгодится следующий набор тем:
Если вы планируете создавать сетевые игры, то крайне желательно знать ASP MVC – фреймворк для создания веб-приложений, который упрощает сетевое взаимодействие и работу с базами данных.
Кроме языка программирования и алгоритмов, обязательны для изучения шаблоны проектирования – используемые программистами продуманные архитектурные решения. Нужно хорошо понимать, как и в какой ситуации использовать тот или иной шаблон.
Большинство обучающих и справочных материалов написаны на английском языке, а потому мы советуем овладеть языком, как минимум на уровне Intermediate. Знание английского языка – не специфическое для Unity-программистов, а стандартное для IT требование.
Редактор Unity3D
Большую часть времени Unity-разработчики проводят в редакторе, так что его нужно изучить досконально. Кроме того, программные библиотеки Unity требуют дополнительного изучения – Unity-проект существенно отличается от обычного C#-приложения. Чтобы стать профессиональным Unity-разработчиком, нужно изучить следующее:
Инструменты командной работы
Нужно иметь представление о следующих инструментах:
Профессиональный Unity-разработчик должен разбираться в том, какие специалисты работают над проектом и каковы их обязанности. Прежде всего это гейм-дизайнеры, обычные и 3D-художники. Надо помнить, что чем крупнее компания, тем более узкой становится специализация конкретного специалиста. Например, программист может заниматься исключительно системой искусственного интеллекта, 3D-художник – только моделированием, над текстурированием и анимацией будут работать другие люди.
Обучающие материалы, курсы по созданию игр
Без качественного и всестороннего обучения стать востребованным Unity-разработчиком невозможно.
Программирование
Unity
Обучение разработке игр, погружение в профессию и карьерные перспективы
Чтобы начать карьеру Unity-разработчика, нужно не только освоить язык и систему, но и иметь практические навыки.
Начинайте с несложных 2D-игр вроде тетриса или flappy bird. Простые игры легче реализовать в одиночку, но они дают навыки работы с базовыми функциями: загрузка сцен, создание интерфейса пользователя, работа с ресурсами. Далее можно переходить к 3D-играм. Здесь тоже лучше начинать с простого, постепенно внедряя новые функции и меняя архитектуру игры. Так вы составите портфолио, с которым в дальнейшем пойдете на собеседование.
По квалификации разработчики делятся на три условных уровня: Junior/Middle/Senior.
Junior – начинающий разработчик, работающий в команде под управлением более опытных коллег. Джуниору чаще всего поручают простые, некритичные задачи. На этом уровне работник обычно держится 1-1.5 года, после чего повышается до Middle. Junior Game Developer должен иметь следующие компетенции:
Middle – опытный специалист, способный выполнить всю порученную работу. Решает как критически важные, так и рутинные задачи. Имеет достаточную квалификацию, чтобы управлять джуниорами. Все основные инструменты и технологии Unity должны быть известны middle-разработчику. Многие работают на уровне middle годами и десятилетиями. Чтобы стать сеньором, нужны большие и целенаправленные усилия.
Senior – программист с высочайшей квалификацией. Может выполнить любую задачу в рамках своего набора технологий. У сеньоров огромный опыт, широкий кругозор, часто – отличные управленческие навыки. Чтобы вырасти от джуниора до сеньора нужно от 6 до 8 лет.
Team Lead Unity Developer – программист уровня middle, который занимается преимущественно управленческой деятельностью. Именно тимлиды создают условия для продуктивной работы команды. Им платят не за написанный код, а за соблюдение сроков и качество проекта в целом.
Также выделяют Unity VR Developer – специалиста, работающего в сфере виртуальной реальности. Такой программист должен иметь специальные знания, связанные со специфическим оборудованием – очками и шлемом виртуальной реальности. Unity AR Developer – похожая специализация, но связана не с виртуальной, а дополненной реальностью.
Востребованность Unity-разработчиков растет, как и количество вакансий. С уверенностью можно говорить, что и через 3-5 лет профессия разработчика игр на этом движке будет перспективна.
Unity-разработчик в среднем получает 65 тыс. руб. в месяц. Минимальная зарплата – 40 тыс. руб. в месяц, максимальная – 135 тыс. руб. в месяц.
Где учиться на разработчика игр
Если вы только начинаете изучать разработку игр, мы рекомендуем обратить внимание на курс Факультета Разработки игр онлайн-университета Geekbrains. В этом курсе систематизирована вся основная информация, необходимая для того, чтобы стать профессиональным Unity-разработчиком.
В курсе уделено большое внимание практике – по окончании обучения у вас в портфолио будет 4 реальных проекта, с которыми можно идти на собеседование. Кроме того, у каждого ученика есть личный наставник-куратор, с которым всегда можно прояснить непонятные места.
12 вопросов и ответов на собеседовании c разработчиком Unity 3D
Разработчики Unity и Unity 3D проектируют и создают игры, используя кроссплатформенный игровой движок Unity. При проведении собеседования с программистом Unity идеальный кандидат будет иметь глубокие знания в области программного обеспечения Unity и отличные навыки устранения багов.
Остерегайтесь кандидатов с ограниченными знаниями в области программирования и тех, кто демонстрирует слабые коммуникативные навыки 😉
12 самых популярных вопросов и ответов на собеседовании c разработчиком Unity 3D, которые помогут IT рекрутеру в проведении первичного скрининга.
5) Объясните, что такое Prefabs в Unity 3D?
Prefab в Unity 3D называется готовым шаблоном объекта (класс, объединяющий объекты и скрипты). Во время разработки префаб можно перетащить из окна проекта в окно сцены и добавить в сцену иерархию игровых объектов. При желании объект потом можно редактировать. Во время выполнения сценарий может вызвать создание нового экземпляра объекта в заданном месте или с заданным набором свойств преобразования.
8) Объясните, что такое фиксированный временной шаг в Unity3D? Почему настройка фиксированного времени влияет на скорость игры?
Функция Fixed Timestep помогает установить обновления системы через фиксированный интервал времени. Механизм, подобный очереди, будет управлять всеми событиями в реальном времени, которые накапливаются между временными эпохами. Если частота кадров упадет ниже некоторого порогового значения, установленного для фиксированного временного шага, это может повлиять на скорость игры.
9) Как в Unity 3D скрыть игровой объект?
Чтобы скрыть игровой объект в Unity 3D, вы должны использовать код
gameObject.transform.SetActive(false);