двери для юнити 3д
Делаем простую игру с кнопками, ящиками и дверями на Unity
Unity бесподобна для быстрого прототипирования игр. Если у вас появилась идея какой-то новой игровой механики, с Unity её можно реализовать и протестировать в кратчайшие сроки. Под катом я расскажу как можно сделать несложную головоломку используя только стандартные компоненты и не залезая в графические редакторы. По ходу статьи я продемонстрирую пару трюков игрового дизайна, а в конце немного расскажу об эстетике, динамике и механике.
Для самых нетерпеливых по ссылкам ниже находится готовый прототип.
Онлайн версия
Скомпилированная версия для Windows [Зеркало]
Что мы собираемся делать? Двумерную головоломку с колобком в роли главного героя, который может двигать ящики, которые могут нажимать кнопки, которые могут открывать двери, за которыми скрывается выход из уровня, который построил я. Или вы, у нас же здесь туториал как-никак.
Подразумевается, что вы уже успели скачать Unity и поигрались немного в редакторе. Нет? Сейчас самое время, я подожду.
Грубый набросок
Я соврал, я не буду ждать. Создаём пустой проект без лишних пакетов и выбираем схему расположения окошек на свой вкус, я буду использовать Tall. Добавляем в иерархию сферу, перетаскиваем на неё главную камеру. Теперь камера будет следовать за нашей сферой, если она вдруг захочет погулять. Переименовываем сферу в «Player», перетаскиваем в Project, теперь у нас есть prefab, который мы можем использовать в любых новых сценах, если таковые будут. Не забывайте проверять координаты префабов при создании и использовании, если мы хотим делать игрушку в двух измерениях, то третья ось должна быть выставлена в ноль для всех взаимодействующих объектов.
Добавим на сцену кубик, назовём его «Wall» и перетащим в Assets. Одинокая кубическая стена рядом со сферическим колобком не очень-то впечатляет, да? Три поля Scale в инспекторе позволят нам вытягивать стенку, а комбинация клавиш Ctrl+D создаст её копию. В Unity есть много других полезных горячих клавиш, например зажатый Ctrl ограничивает перемещение объектов единичными интервалами, а клавиша V позволит тягать объект за вершины, и они будут липнуть к вершинам других объектов. Замечательно, не правда ли? И вы всё ещё пишете свой движок? Ну-ну.
Сообразите что-нибудь похожее на комнату, сохраните сцену, нажмите Play и полюбуйтесь своим творением пару минут. Хорошие гейм-дизайнеры называют это тестированием. Чего-то не хватает, да? Хмм. Возможно, если я полюбуюсь ещё немного, то…
Скрипты и физика
Нам нужно больше движения и цвета! Хотя, если ваше суровое детство было наполнено бетонными игрушками, то можно оставить всё как есть. Для всех остальных пришло время скриптов. Я буду приводить примеры на C#, но можно писать и на JS или Boo. На самом деле выбирать последние два смысла не имеет, они были добавлены в Юнити скорее как довесок, меньше поддерживаются, хуже расширяются и для них сложнее найти примеры. Особенно ужасен Boo, который по сути является unpythonic Python. Мерзость. Виват, питонисты!
Создаём C# Script, называем его «PlayerController», перетаскиваем на префаб Player и открываем с помощью Visual Studio любимого редактора. Сперва нужно потереть лишний мусор, оставим только нужное.
Функция Update вызывается в каждом кадре, что очень удобно для реализации движения, внутри неё мы и будем размещать код. Нажатия кнопок игроком можно получить с помощью класса Input. В комплекте с Unity идут замечательные настройки ввода, достаточно написать Input.GetAxis(«Horizontal») и мы уже знаем нажал ли игрок на клавиатуре стрелку вправо или влево. Если у игрока подключён геймпад, то он может управлять и с него, нам даже не надо писать лишний код.
Функция AddForce имеет несколько интересных вариантов приложения силы, но для начала нам хватит и значений по умолчанию.
Готово! Сохраняем, жмём Play, тестируем.
Эээм, знаете, мне это напомнило тот момент из фильма Inception, где мужик бешено вращал глазами и катился кубарем то по стене, то по потолку. Наверное так он себя чувствовал.
Нам нужно запретить вращение и передвижение по оси Z. Выделяем префаб, смотрим на компонент Rigidbody и видим раздел Constraints. Оставляем неотмеченными только первые две галочки X и Y, остальные четыре включаем. Чуть выше снимаем галочку Use Gravity и прописываем Drag равный четырём (в разделе об эстетике я расскажу зачем это было сделано). Тестируем ещё раз.
Оно шевелится и не вертится! Ура! Но делает это слишком медленно. Добавим одну переменную к нашему скрипту и задействуем её в формуле нашего движения. Весь код будет в итоге выглядеть так:
Заметили как в инспекторе появилось новое поле Acceleration у нашего скрипта? Эффектно, да? Вбиваем в поле тридцатку или что-нибудь на ваш вкус и проверяем в действии.
Материалы и коллайдеры
Пора уже сделать какую-нибудь кнопку, чтобы было на что нажимать. Дублируем префаб Wall и переименовываем его в «Button». В инспекторе у коллайдера ставим галочку Is Trigger. Это развоплотит нашу кнопку и заставит другие объекты проходить сквозь неё. Создаём скрипт «Button» и вешаем на кнопку.
У коллайдеров-триггеров есть события OnTriggerEnter и OnTriggerExit, которые вызываются всякий раз, когда что-то пересекает область триггера. На самом деле это не совсем так, ибо есть множество разных объектов и физический движок обрабатывает не все столкновения, подробнее читайте здесь.
Для начала просто проверим как работают триггеры. Напишем что-нибудь в консольку Unity. Функция Debug.Log очень полезная, кроме текста она также умеет печатать разные игровые объекты.
Класс Color может принимать кроме тройки RGB ещё и альфу, но у нас стоит обычный диффузный шейдер, поэтому она для нас не важна. Тестируем!
Если вы ещё не сделали это, то настала пора прибраться в нашем проекте, иначе мы заблудимся в мешанине префабов и скриптов. Например создадим папку «Levels» для хранения сцен, «Prefabs» для складирования заготовок, «Materials» для материалов и «Scripts» для скриптов, а потом рассортируем накопившееся богатство по папочкам.
Знаете, а ведь наша кнопка до сих пор не похожа на кнопку! Давайте её сплющим и заставим продавливаться под колобком. Выберите кнопку в иерархии, сделайте её толщиной в 0.3 единицы и положите на пол, т. е. выставьте координату Z в 0.35. Видите в инспекторе наверху три удобных кнопочки «Select», «Revert» и «Apply»? С помощью них можно взаимодействовать с префабом прямо на месте. Нажмите Apply и все кнопки отныне будут плоские и лежачие.
Для реализации программной анимации мы будет использовать класс Transform. У него есть свойство localPosition, которое позволит нам двигать кнопку:
Этот код нажмёт кнопку. В целом это выглядит так:
Двери, ящики и магниты
Теперь, когда у нас есть полнофункциональная кнопка, можно заставить её что-нибудь делать. Склонируем префаб стенки, назовём его «Door», создадим красненький материал «Door Mat», повесим его куда нужно и закинем свежеиспечённую дверь на сцену. Для того, чтобы как-то воздействовать на дверь, нам нужно иметь ссылку на её объект, поэтому создадим у кнопки новую переменную.
GameObject это класс, в который заворачиваются все-все-все объекты на сцене, а значит у них у всех есть функция SetActive, которая представлена в инспекторе галочкой в левом верхнем углу. Если вы ещё пользуетесь Unity третьей версии, то вам придётся воспользоваться альтернативами. С помощью свойства активности можно прятать объекты не удаляя их. Они как бы пропадают со сцены и их коллайдеры перестают участвовать в расчётах. Прям то, что надо для двери. Приводим код к следующему виду:
Выбираем кнопку на сцене, перетаскиваем дверь из иерархии на появившееся поле в свойствах скрипта кнопки. Проверяем код в действии.
Наезд колобком на кнопку автомагически растворяет дверь и возвращает её на место после разъезда. Но какой толк нам от кнопки, которая постоянно выключается и запирает нам дверь? Настал час ящиков! Копируем префаб стенки, называем его «Box», добавляем к нему Rigidbody, не забываем проделать те же самые операции, что и с Player’ом, а затем кидаем его на сцену.
Как вы наверное заметили, толкать ящик не очень-то удобно. Кроме того, если он застрянет в углу комнаты, то достать его будет невозможно. Как вариант, мы можем сделать зоны-телепорты по углам комнаты, которые будут перемещать все попавшие в них ящики, но это немного мудрёно. Добавим в PlayerController магнит, который будет притягивать все близлежащие ящики. Функция Input.GetButton в отличие от Input.GetButtonDown будет возвращать true до тех пор, пока нажата запрашиваемая кнопка. То, что нам нужно.
Как мы будем находить ящики? Вариантов множество, например, мы можем прицепить к Player’у ещё один коллайдер и регистрировать OnTriggerEnter или OnTriggerStay, но тогда нужно будет решать проблему раннего реагирования триггера кнопки. Помните ту ссылку на матрицу с разными коллайдерами? Вот-вот. К тому же магнит должен работать только по нажатию кнопки, в остальное время он не нужен. Поэтому мы будем вручную проверять столкновения с помощью Physics.OverlapSphere. Transform.position даст нам координаты центра колобка. Поищем объекты поблизости:
Поищем объекты, практически касающиеся колобка.
Нашли объект в большой сфере, проверили его наличие в малой сфере, проверили метку, двинули к себе. Немного математики с векторами, ничего сложного для тех, кто не прогуливал школу.
Ящик всё равно нас немного толкает, не не будем сейчас на этом заморачиваться, в движении всё равно это не мешает.
Внимательные читатели давно уже заметили один баг кнопки. Внимательные и усердные его уже исправили. Какой же это баг?
Если в поле коллайдера попадает два объекта, а потом один объект уходит по своим делам, то срабатывает лишнее выключение кнопки. Что делать? Нам нужно считать количество колобков и ящиков в области коллайдера и выключать кнопку, когда рядом никого нет, а включать при любом количестве тех и других. К сожалению, в Unity нет списка текущих столкновений. Очень жаль. Возможно, у разработчиков ещё не дошли до этого руки. В любом случае это решается парой строчек кода. Мы можем сделать свой список и складывать в него все приходящие объекты, вынимать все уходящие, а состояние кнопки менять в Update.
Lertmind предложил вместо списка использовать счётчик. Этот способ однозначно изящнее, но старый код оставляю выше для примера, как не надо делать.
Сцены, частицы и шейдеры
У нас есть игровой персонаж, стены, кнопка и дверь, но за ней ничего не скрывается. Пора уже сделать перемещение между уровнями.
Дублируем префаб стенки, переименовываем в «Finish», меняем метку на одноимённую, превращаем коллайдер в триггер. Создадим материал «Finish Mat» с манящим голубеньким цветом и повесим на финиш.
Вся семья в сборе. Но как-то не очень маняще и слишком похоже на стенку. И на дверь. И на кубик. На помощь приходят шейдеры! Сейчас у нас для всех материалов используется обычный матовый диффузный шейдер. В свойствах материала выберем для финиша Transparent/Specular. Этот шейдер будет учитывать альфу цвета и отсвечивать вторым цветом, который мы укажем. Поставим у голубенького альфу в половину, а отблеск сделаем белым. Тестируем.
Осталось заставить финиш перемещать игрока на следующий уровень. Для управления сценами в Unity есть несколько полезных функций и переменных. Application.loadedLevel покажет нам текущий уровень, Application.levelCount покажет их количество, а Application.LoadLevel загрузит желаемый. Кроме того, нам нужно указать в Build Settings все сцены, в которые мы хотим попасть. Создадим новый скрипт «Finish», повесим на префаб и напишем внутри следующее:
Мы проверяем, что на финиш попал игрок, а потом перемещаемся на следующий или первый уровень. Дегустируем наш новый полнофункциональный финиш.
Эстетика, динамика и механика
Вот наш прототип и готов. Мы теперь можем нажимать на кнопки, открывать двери и переходить с уровня на уровень. Если мы хотим только протестировать новую механику, то этого достаточно. Но если мы хотим сделать прототип игры, то нужно думать ещё об эстетике и динамике. Возможно вы не часто слышали эти термины в применении к играм. Если вкратце, то механика — это какое-то взаимодействие пользователя с игровым миром. Кнопка, которую может нажать пользователь, чтобы открыть дверь, это одна механика. Ящики, которые тоже могут нажимать кнопки — другая. Механики взаимодействуют друг с другом и создают динамику игры. Игрок нашёл ящик, дотащил до кнопки, открыл дверь, перешёл на другой уровень. Эстетика — это ощущение от игры. Бывало ли у вас в какой-нибудь стрелялке чувство, что вы действительно нажимаете курок? Приятная отдача, анимация, звук — всё это влияет на эстетику стрельбы. На эстетику игры в целом влияет множество факторов, от скорости загрузки до сюжета. Кропотливая работа над эстетикой отличает игры-однодневки от игр, которые помнят.
Посмотрим на наше творение. Самая часто используемая механика — передвижение. Давайте внимательно посмотрим всё ли у неё в порядке. Открываем код.
Если приглядеться, то видно, что по диагоналям наш вектор длиннее, а значит больше и прилагаемая сила. Можно исправить это нормализовав вектор:
А можно это не исправлять. Особенности игрового движка тоже могут быть частью эстетики. Quake 3 без распрыжек был бы совсем другим. Именно знание тонкостей механики отличает новичков от летающих демонов-убийц профессиональных игроков. Но тонкости не должны вредить удобству, именно поэтому мы ранее поменяли Drag у Rigidbody игрока на четвёрку. Такое трение заставляет колобка останавливаться быстро, но не сразу. А большое ускорение даёт чувство контроля. В идеале, старт тоже должен происходить не сразу, это пригодилось бы для точных манёвров. Эти маленькие детали механики влияют на общую эстетику.
Вглядываемся сильнее и замечаем, что… Видите? Нет? Скомпилируйте проект и поставьте настройки на минимум. Здорово колобок летает, правда? Да так шустро, что пролетает коллайдеры насквозь. Это всё из-за функции Update в скрипте управления, которая выполняется в каждом кадре. Если игра ускоряется в два раза, то и все силы прикладываются в два раза чаще. Для решения этой проблемы можно просто поменять Update на FixedUpdate, который не зависит от частоты кадров, а обноляется по таймеру. Если бы для движения использовался не Rigidbody, а Transform, то проще было бы отвязать перемещение от FPS с помощью Time.deltaTime.
Камера даёт игроку возможность заглянуть в игровой мир, поэтому от её ракурса и поведения тоже немало зависит. Сейчас наша камера просто болтается воздушным шариком над главным героем, но если её немного наклонить, то нам будет легче воспринимать уровень, появится ощущение перспективы. Или мы можем наоборот поменять камеру на ортогональную, тогда всё будет абсолютно плоское.
Внешний вид игры тоже имеет большое значение. Под внешним видом я подразумеваю не количество полигонов в кадре. Помните, игры это искусство. Какие вещи важны в смежных видах искусства? Стилистика, цвет, свет, тень. Попробуйте найти интересное сочетание цветов здесь или соберите свой набор здесь. Посмотрите например на Proun. Эта игра выполнена в духе супрематизма, так близкого хабру. Можно попробовать скопировать некоторые цветовые решения, но без текстур и колдовства с шейдерами получится не так красиво. Нетерпеливые уже посмотрели результат моей попытки по ссылкам наверху, а внимательные читатели могут увидеть их ещё раз в конце статьи.
Суть этого раздела в следующем: даже если вы делаете только прототип игры, сразу стоит подумать о том, что вы хотите сказать будущему игроку, какие чувства в нём вызвать. Это справедливо для всех видов искусств. Сделать минимальный набросок стилистики совсем не сложно, и это окупится в первую очередь для вас, вам будет легче выбрать дальнейшее направление.
Заключение
С помощью примитивных кубиков и пары капель цвета, можно изготовить вполне сносный прототип, в который (по моему скромному мнению) будет приятно играть. Используя Unity это сделать совсем не сложно, но нельзя забывать зачем вам это всё нужно.
GameDev.Unity3d.Урок 10.Двери
Найдены возможные дубликаты
С нетерпением жду каждый новый урок. Спасибо автору!
Блин слегка бесит что такие посты игнорируют такое ощущение что мало кто хочет развиваться.
Бесплатно помогаю пикабушникам учить программирование, часть 19: «3 худших работодателя для новичка»
Если вы изучаете программирование или, по крайней мере, делаете вид, то рано или поздно вам предложат работу. Давайте определим худших работодателей для начинающего разработчика. Худшие они потому, что оплата, качество опыта и скорость обучения минимальны. При том, что риски гораздо выше среднего.
1. Стартап с нулевой капитализацией за долю в проекте.
Или же ваш родственник/знакомый/бывший одноклассник предлагает вам сделать проект примерно с такой формулировкой:
— О, слышал ты программировать умеешь. Давай сделаем проект-нейм. Это уникальная идея, такого еще нет на рынке, взлетит стопудово.
Или же, где-то в чате, промелькнет такая вакансия:
Если вы увидите предложения такого рода, то самое время вспомнить знаменитую фразу из фильма Форрест Гамп:
Какие минусы имеет этот подход?
— Вы не имеете никаких гарантий.
Вы не защищены юридически от слова совсем. Если ваш коллега захочет чтобы вы с ним больше не работали, то вы никак не можете ему противостоять.
Конечно, вы можете сказать, что у вас на руках всегда будет доступ к вашему коду, но ваш коллега получает ваш код при околонулевых усилиях и затратах. Вы же потратили и время и усилия чтобы написать этот код, а с его стороны вы не получаете ничего.
— Низкая скорость обучения по сравнению с альтернативами.
Работая в команде вы будете обучаться гораздо быстрее. Да и всегда будет человек который подскажет/исправит/сделает за вас сложную работу. В маленьком стартапе, как правило, вы лишены такой возможности.
— Очень небольшая личная выгода.
Очевидно, что больших денег тут нету. И средних тоже. Только маленькие, и то если повезет. Следует понимать, что стартапов выстреливает только 2%. Остальные, даже самые, казалось бы эмэйзинг-проекты, обычно уходят в никуда.
Ну а теперь о плюсах
Вы получаете какой-то опыт разработки, проект который можно показать на собеседованиях. И все. Стоит ли игра свеч? Однозначно нет.
2. Аутсорс с большой текучкой кадров.
Обычно, в таком случае, вы будете поддерживать несколько проектов одновременно.
Переработки, горящие сроки и низкое качество кода станут вашими верными спутниками. Задачи будут решаться даже без особого ревью. Вжух-вжух и в продакшен.
Вы рискуете стать универсальным солдатом в плохом смысле этого слова, который умеет все по чуть-чуть но ничего из этого не делает хорошо.
Очень скоро от этого нужно будет отвыкать. Лучший вариант: поработать в такой среде некоторое количество времени, чтобы работать какой-никакой опыт, строчку в резюме и немного денег а потом уходить на повышение в другую компанию. Очень часто, после такого аутсорса, следующая работа может быть с зарплатой х1.5-2
3. Небольшой продукт в котором вы единственный разработчик.
Чаще всего, это небольшие интернет-магазины. Разработчик в них, обычно, отвечает за фронтенд, бекенд и настройку сервера одновременно.
Здесь руководство согласно выделять время и средства чтобы ставить качество в приоритет и более охотно соглашается на повышение зарплаты.
Минус, как и в предыдущем варианте, это распыление компетенции. Здесь уже можно проработать уже чуть дольше, чем в предыдущем варианте, т.к. есть возможность в более спокойном режиме повысить свою компетенцию. Но, долго задерживаться тут явно не стоит.
Мой канал в Telegram, где я помогаю новичкам: https://t.me/LearnRubyForPikabu
Добро пожаловать всем желающим.
Бесплатно помогаю пикабушникам учить программирование, часть 18: «Почему все так, а не иначе»
Полтора года назад я препроверитьдложил бесплатную помощь в изучении программирования на Ruby. Реакция сообщества на это, в основном, положительная. Но, иногда, появляются комментарии, по типу этого.
Гораздо логично было бы гораздо раньше рассказать почему я выбрал этот подход, но лучше поздно, чем никогда.
Почти любой курс состоит из какого-то количества теоретического материала, чата с другими участниками, периодических консультаций с автором. И, все бы ничего, но ассортимент русскоязычных курсов гораздо меньше стоимость гораздо дороже.
Поэтому мне и пришла идея сделать примерно тоже самое, но чтобы было доступно каждому. Как оказалось, это не особо сложно. Новичок получает сопоставимый объем материала и оперативную помощь опытных наставников.
Касаемо последнего, то тут получилось все особенно хорошо. Мне повезло и обучать новичков мне помогают очень квалифицированные люди. Это очень крепкие сеньоры и даже есть один архитектор, который вносит вклад в развитие Rails и Hanami.
Также я лично созваниваюсь в скайпе с новичками. Обычно это происходит в случаях, если процесс обучения идет особенно тяжело или нужно проверить насколько хорошо учащийся готов к собеседованию. Судя по истории звонков в скайпе, за полтора года я уделил этому около 50 часов.
Теперь перейдем к следующему пункту
Касаемо моих целей в рамках этого проекта, то сейчас мне просто интересно чем это все закончится. Опыт наставничества я получил. Сейчас мне интересно к чему все это приведет.
Проект стал более масштабным, чем я планировал изначально. Немного жалко будет его оставлять. Да и список тем, которыми я хочу с вами поделиться, довольно таки объемный. Поэтому продолжаем, а дальше будет видно что да как.
С чего начать делать игру? Твои первые шаги!
Это статья для тех, кто хочет сделать игру, но не знает с чего начать.
Я постараюсь, по шагам, объяснить весь процесс от желания до релиза. Погнали!
Меня зовут Александр Дударев. Я гейм-дизайнер с 10-летним стажем. Работал в многих компаниях, например в Playgendary. Делал разное: и казуалки для мобилок, и танковый шутер для PC.
Теперь я инди-разработчик. Живу за счёт продажи своих игр. Выпустили 4 игры для PC и Консолей. Сейчас разрабатываю игру They Are Here: Alien Abduction Horror — хоррор от 1-го лица, про похищение пришельцами.
Шаг 1. Запасись энтузиазмом
Энтузиазм — это топливо, которое ты сжигаешь при разработке. Оно позволит тебе делать игру после работы, когда устал, когда хочется отдохнуть.
Как пополнять запас энтузиазма? Смотри документалки, читай истории успеха разработчиков. Это мотивирует!
Например, вот классная документалка о инди-играх Indie Game: The Movie
Смотри по сторонам: на другие игры, фильмы, кино, на новые технологии. Желание изучить что-то новое или сделать что-то похожее — это то, что нужно.
Шаг 2. Собери команду или сделай всё сам!
Одному — проще. Проще придумать идею и принимать решения. Не надо спорить и описывать задачи. Сделать игру одному — возможно. Я например сделал 4 игры один.
С командой — лучше. Лучше получается качество. Твои решения критикуются, и результат улучшается. Можно распределить обязанности и сделать игру быстрее. Последнюю игру я делаю в команде со своей женой. Она отвечает за историю, критикует мои решения, помогает с артом, ищет стримеров.
Шаг 3. Сформулируй цель разработки
Очень важно понять — для чего тебе всё это?
1. Трудоустройство в геймдев компанию.
Вопросы: На какую должность хотим устроиться? В какую компанию(и)? Какими играми занимается компания(и)? Чему нужно научиться?
2. Научиться делать игры, освоить навык.
Продукт — опытный образец. Приоритет- новые знания.
Вопросы: Какой навык освоить? Как сделать какую-то конкретную штуку?
3. Рассказать о чём то важном.
Вопросы: Поймут ли мою идею? Как сделать продукт более массовым?
4. Сделать игру о которой мечтал.
Продукт — мечта. Приоритет — воплотить своё видение.
Вопросы: Что я хочу видеть? Чем можно пренебречь? Как закончить проект?
5. Построить свой бизнес.
Вопросы: Какие игры лучше продаются? Сколько времени займет разработка? Как сократить это время?
Цель может быть не одна. Цели могут меняться от игры к игре.
Шаг 4. Вспомни, что ты умеешь или любишь
Например, я и моя жена — фанаты фильмов ужасов про пришельцев. Типа «Знаки», «Мрачные небеса», «Секретные материалы». Поэтому нам проще работать над идеями и сценарием для They Are Here
А может, ты на досуге рисуешь анимешных девочек. А твой друг изучает программирование искусственного интеллекта. Значит вам будет проще сделать игру про девушек, которые будут чатиться с игроком, словно живые
Шаг 5. Выбери платформу
Если просто, то есть 2 пути: Мобилки или ПК + Консоли.
Исходя из целей и умений нужно будет выбрать что-то одно. Это разные платформы, с разными играми, аудиторией и монетизацией.
— Массовая аудитория. Дети, пенсионеры, скучающие продавщицы. Это не геймеры. Всё должно быть очень понятно и просто.
— Играют по 1 — 5 минут. В перерывах, в очередях, на работе. Чтобы «убить время».
— Ценится простая яркая графика.
— Упор на простой, но залипательный кор-геймплей.
— Некоторые жанры (головоломки, аркады) — наиболее просты в разработке. Можно сделать небольшой прототип (1-5 уровней) и показать его работодателю, например.
— Не требуется красивая или сложная графика. Главное — чтобы было понятно.
— Простой геймплей и гейм-дизайн.
— Будет плюсом, если сам привык к мобильным девайсам и играм.
— Очень. Высокая. Конкуренция. Игр миллионы и почти все они — бесплатные. Игроки приходят только с рекламы. Нет рекламы — нет игроков. Нет денег.
— Монетизация. Нужно встраивать рекламу или внутри-игровые покупки в игру. Знать куда и как. Тестировать чтобы всё это работало.
— Аналитика. Нужно понимать что такое LTV. Почему он должен быть > чем CPI. Встраивать аналитику в игру.
— Будь готов делать по 20 прототипов или улучшать продукт, пока LTV не станет > CPI.
— Заработать денег небольшой команде, можно только с издателем. Я лично не знаю других путей.
Если решишься, узнай подробнее про:
— Гипер-казуальные игры (всё по теме гейм-дизайна и производства).
— Как найти издателя гипер-казуальных игр.
— Казуальные игроки (сложность казуальных игр и туториалы).
— Аналитика мобильных игр (CPI, LTV, Retention).
— Монетизация мобильных игр.
— Оптимизация мобильных игр.
— Google Play и App Store. Регистрация аккаунта разработчика. Правила и рекомендации. SEO.
— Рекламные медиаторы и сети (Iron Source, AdMob и т.п.).
— Сервисы рыночной аналитики мобильных игр (Sensor Tower, App Annie).
Путь 2. ПК + Консоли
— Играют по несколько часов. Дома. Чтобы погрузиться в игру.
— Ценится реалистичная или стильная графика.
— Упор на интересную историю или глубокий геймплей.
— Меньше конкуренция, чем на мобилках. Особенно на консолях.
— Легче получить игроков и отзывы.
— Можно хорошо заработать портировав игру на консоли, с помощью издателя.
— Не надо возится с аналитикой и монетизацией.
— С детства понятная платформа (ПК / Консоль) и аудитория (Геймеры).
— Аудитория любит авторские, творческие, интересные игры.
— Будет плюсом, если сам играешь на компе или приставке.
— Плохо заходят простенькие игры (головоломки, аркады). Геймеры хотят получить опыт, вжиться в роль. Залипнуть надолго. Игра не должна выглядеть как что-то на пару минут.
— Игры дольше в производстве. Но можно хитрить — делать маленькие игры, которые выглядят как большие, а также использовать готовые ассеты.
— Нужно поработать над интересной идеей. Найти отличительные черты (USP), которые выделят проект.
— Нужно продумать интересную историю или геймплей.
— Более сложный геймдизайн.
— Большая требовательность к качеству графики.
Если решишься, узнай подробнее про:
— Геймдизайн компьютерных игр.
— Что такое вертикальный срез.
— Steam. Регистрация аккаунта разработчика. Оформление страницы. Тэги. Правила и рекомендации.
— Маркетинг и продвижение инди-игр на Steam (рекомендую http://howtomarketagame.com/ ) Как сделать крутой постер, трейлер, скриншоты, ГИФки.
— Портирование игр на консоли.
— Издатели игр на консолях.
— Конкурсы и фестивали инди-игр.
— Работа с инфлюенсерами (ютуберами, стримерами).
— Сервисы аналитики тэгов и жанров (SteamDB, Steamspy, SteamCharts, Game Data Crunch).
— Сервисы рассылки ключей (Keymailer, Woovit)
Шаг 6. Узнай про производство игр в целом
Не важно какую платформу ты выберешь. Интересуйся тем Как Делают Игры
Рекомендую погуглить про:
— Игровые механики, жанры и сеттинги.
— Геймдизайн. Есть книга Джесси Шелла, она хорошая, но большая. Можешь гуглить про конкретный жанр.
— Кор-геймплей и Мета-геймплей.
— Левел-дизайн. Лучше гуглить про отдельный жанр.
— Пользовательский интерфейс (UI) в играх.
— Ассеты и маркетплейсы.
Шаг 7. Выбери движок и глянь уроки
Движок — это программа, в которой собирается игра. Это большой кухонный комбайн, в котором есть всё. Там программируется логика, собираются уровни, выставляется освещение, настраивается анимация, создаются материалы, вставляются звуки и т.п.
Про выбор движка написано много статей — погугли.
Если ты один, и не знаешь языков программирования, рекомендую Unreal Engine 4. Почему?
Во-первых, «Blueprints» — это визуальное программирование на блоках. Это проще понять, чем классический «код».
Во-вторых, куча плюсов:
— Красивая графика «из коробки».
— Есть большой маркетплейс с гововыми ассетами
— Это популярный коммерчесский движок, на котором сделано очень много игр.
— Можно сделать игру под все платформы. Можно встроить рекламу, инапы, аналитику.
— Много уровков. Рекомендую канал «Unreal Engine Rus»
— Куча встроенных функций.
— Бесплатный до ляма баксов дохода.
Перед началом работы над игрой, сделай пару очень простых подделок «в стол».
Сделай змейку, пинг-понг и т.п. Пофиг на качество, пофиг на геймдизайн. Главное — попрактиковаться «на кошках», пощупать функции движка.
В движке будет работать вся команда — поэтому каждый должен изучить его, хотя-бы поверхностно. Вы должны понимать друг друга, а еще помогать программисту собирать игру.
Жанр — это твоя ниша. Жанр — это очень важно. Есть жанры, в которые никто не играет. А для некоторых нужно изучить много дополнительного материала.
Лучше выбрать жанр который:
— Популярен на платформе. Игры этого жанра часто покупают или скачивают. Используй сайты для аналитики жанров. Например, для Steam: «steamdb.info», «gamedatacrunch.com», «steamspy.com».
— Не слишком сложен в производстве. MMORPG — не твой выбор!
— Нравится тебе или команде. Ты разбираешься в нём или много играл в детстве.
Как только ты определилися с жанром — гугли всё по производству игр в этом жанре. Геймдизайн, графика, уровни, звуки. На что сделать акцент? Поиграй в лучшие игры в этом жанре. Посмотри видео об этом жанре.
Шаг 9. Придумай идею, концепцию, USP
Идея — ядро твоей игры. Зерно, из которого вырастет проект.
Какая идея хорошая?
— Понятная. Должна быть понятна каждому. Например, твоей маме.
Интересная. Уже хочется поиграть в это! Люди любят риск и новый опыт, который хотят, но не могут пережить в реальной жизни. Например GTA — это симулятор крутого парня, которым все хотят быть, но не могут.
— Популярная. Это не артхаус, не что-то странное или специфичное. Идея обращается к понятным образам из жизни или массовой культуры.
— Выделяющаяся. Такого раньше не было. Или было, но давно. Или в другом жанре. Или в другом стиле. Или плохо сделано.
Что поможет тебе в выборе идеи?
— Каталог игр на твоей платформе. Смотри что популярно. Думай как это изменить, подать под другим углом. Хмм…игра про постройку железной дороги в топе. А что если, мы играем за машиниста?
— Сайты-сервисы с аналитикой тэгов и жанров на платформе. Можно отследить популярность жанра, количество игр в нем. Можно скрестить отдельные тэги между собой.
— Массовая культура. Фильмы, книги, комиксы, короткометражки, гифки, картинки из интернета.
Скорее всего у тебя будет рождаться много идей. Записывай их. Дай полежать. А потом выбери ту, что не даёт тебе покоя и кажется лучшей.
Идея может казаться масштабной. Но она должна умещаться в Питч, чтобы быть понятной игрокам, прессе и твоей маме.
Питч — короткое предложение, описывающее идею. Например, They Are Here — ужастик про похищение пришельцами. Почитай подробнее про то «Как питчить игры».
На основе Питча, описываем концепт игры. Более развернутое описание игры на одну страничку. За кого мы играем? В чем цель? Что можно делать? Какие эмоции вызываем?
Продумай отличительные черты — USP, которые будут наглядно «продавать» твой проект.
USP вытекают из твоей идеи. Например, идея Панка — издевательство над культурой. USP Панка: вызывающее поведение, агрессивная музыка и странные прически.
Показывай свои USP везде — в трейлере, скриншотах, постере, описании игры. Говори про них общении с прессой и издателями.Тычь ими в лицо!
Например, у They Are Here — это пришельцы, кукурузные поля и огни в небе.
Шаг 10. Составь список ассетов и задач
Ассеты — это кирпичики, из которых состоят игры.
Составь список того, что нужно сделать. Хотя-бы крупными мазками. Сделать уровнь, найти музыку, вставить персонажа. А еще надо 20 видов мечей.
Оцени время, а потом умножь его на 2. Даже если тебе кажется это глупым. Умножь его в 2 раза!
Если видишь, что проект большой — отрезай всё ненужное. Ненужное — всё, что не показывает идею. Или редко появляется на экране.
Например, если идея игры — ультра-насилие, то можно не делать 20 видов мечей, а лучше проработать физику расчленения тела.
Прикинь, что для мобильных гипер-казуалок нужно сделать минимум 30 минут геймплея. А для ПК и Консолей, лучше сделать игру на 2 часа. Если можешь больше — круто!
Покупай и используй готовые ассеты. Это лучший способ сократить время производства и не потерять качество. Это не стыдно, это нормально. Это вообще огонь!
Шаг 11. Организуй процесс
Записывай, всё что надо сделать. Каждую мелочь. Иначе — забудешь.
Ставь задачи. Себе и команде. Рекомендую Trello (проще) или Asana (функциональнее).
Cобирай инфу по проекту в одном месте. Можно юзать доски типа “Miro” или вики типа Notion.
Если ты один, или у вас небольшая команда, не парься над большой и красивой документацией. Лучше покажи пример, начерти схему, объясни на пальцах ЧЁ НАДО сделать.
Референс — лучшее описание задачи для художника! Например, я сказал жене — хочу обложку как у Слендера, но с пришельцем. Этого — достаточно!
Собирай и храни нужную инфу. Ссылки на классные статьи. Контакты возможных партнёров. Скриншоты багов. И т.п.
Шаг 12. Сделай демку
Демо-версия / Вертикальный срез / MVP — очень близкие по смыслу понятия. Это маленький кусочек игры финального качества.
Демо-версия решает множество задач:
— Поможет записать видео, скриншоты, гифки
— Покажет окупаемость мобильной игры
— Поможет устроиться на работу
— Ускорит набор вишлсистов в Steam
— Получит отзывы от игроков и стримеров
— Можно участвовать в фестивалях и конкурсах
-Только с ней можно найти издателя.
Шаг 13. Не ленись! Работай!
Пара советов, как дожить до релиза:
— Не меняй идею на ходу. Сильно. По чуть-чуть можно.
— Не начинай другие проекты. Не распыляйся. Делай, что запланировал.
— Составь график работы. Работай над игрой постоянно. Хотя бы по 3 дня в неделю, по 2 часа в день. Больше — быстрее!
— Надоела разработка? Поиграй в похожие игры. Посмотри похожие фильмы. Найди, что было бы круто сделать.
— Всё равно надоела? Мечтай о релизе. Представь как это будет здорово и вечно!
— Показывай свою работу — пиши посты, пости гифки, давай поиграть стримерам. Твоя цель — получить позитивную обратную связь. Ну или отрицательную.
— Узнавай что-то новое про производство игр. Слушай подкасты, смотри доклады. Это мотивирует, помогает в производстве.
Спасибо, что дочитал!
Бесплатно помогаю пикабушникам учить программирование, часть 17: «Итоги спустя полтора года»
— 35 человек обучились до уровня стажера/младшего разработчика.
— 2 человека сейчас на этапе прохождения собеседований в несколько компаний.
— 5 человек прошли какую-то часть плана обучения, но перешли во фронтенд.
— 1 человек обучился до уровня стажера, поработал несколько месяцев и ушел в DevOps.
Мне нравится заниматься этим проектом и я и дальше планирую дополнять его интересными статьями.
Бесплатно помогаю пикабушникам учить программирование, часть 16: «Что делать если вам не перезванивают из отдела кадров»
Из любой ситуации можно извлечь пользу. Такие как эта не является исключением.
А я, в свою очередь, продолжаю обучать новичков программированию. За полтора года этого занятия с моей помощью работу получили 35 человек.
Ответ на пост «Бесплатно помогаю пикабушникам учить программирование, часть 15: «Еще один пост о собеседованиях»»
Привет, вот настала и моя очередь благодарить @prodigal.son 🙂
В программировании у меня ббыл опыт, но очень нерелевантный, писал для себя на питоен разные задачки, с друзьями-школьниками делали разные проекты
Автору огромное спасибо, до сих пор иногда удивляюсь, как случайности могут повлиять на жизнь.
Английский с нуля. Не скрываем боль. Урок 51 из 60
Как спросить “Что у вас болит”? Как ответить где болит, учитывая характер боли. Переносный смысл слов ache, pain. Пройдем фразу to cross one’s mind.
Видео взяты из мобильного приложения Английский с Анной, в нем в дополнение к теории есть еще много практических упражнений.
P.S. Я стараюсь улучшить качество подачи материала, сам материал, примеры в приложении. Спасибо, что поддерживаете плюсами и учитесь по моим урокам)
Английский с нуля. Интересно в начале предложения. Урок 50 из 60
Видео взяты из приложения Английский с Анной (в каждом уроке слова, задание на устный перевод, письменный перевод).
P.S. Я читаю все ваши комментарии и радуюсь каждому плюсу. Нас уже 3945 человек, кто проходит весь курс целиком, спасибо. Для учителя нет лучше награды, чем успех учеников.
Школьники из Нижнего Новгорода стали лучшими в 3D-моделировании и программировании
Юные нижегородцы лучшие в 3D-моделировании и программировании в России: команда FullStack из Нижнего Новгорода стала абсолютным лидером отборочного этапа IV всероссийского хакатона👨💻
Кто такая Элис?
Красиво одевается, красиво говорит.
Появилась она во времена IRC и развитого в том направлении ботов. Сам по себе, протокол IRC был довольно прост: все команды и взаимодействия с пользователями/сервисами проходили по открытому протоколу, без шифрования, что существенно облегчало как сам парсинг чатов, так и взаимодействие с серверами в целом.
Что делали тогда боты? Да много чего, по командам: рассказывали о погоде, анекдоты, без устали следили за порядком на каналах (мат и флуд), были и игровые боты (викторины, мафия). Ну и конечно же, разговаривающие боты.
Так как я уже интересовался тогда Линуксами и ботами, то решил разобраться, как это все работает. В большинстве случаев, использовали ядро eggdrop, написанное на Си, специально под IRC. Остальная «начинка» вешалась в виде модулей и скриптов на TCL.
Когда мне наскучили скрипты на погоду и вот это все базовое, я решил научить ее общаться. сначала попробовал популярный на тот момент модуль megahal (если не изменяет память), но вскоре, разочаровался в нем: бот просто набирал разговорную базу, отвечал похожими фразами и совсем не в тему.
Тут я и решил использовать свои навыки программирования в Delphi и замутить своего бота, чтобы тоже и с погодой, но основной упор был на разговор и более.
Когда думал над именем, принял решение подобрать такое, чтобы коротко и звучало. И вот, играю как-то в Need For Speed 3, выбираю тачки и проскакивает Lotus Elise.. решено!
В основе ядра был функционал работы протоколом IRC и с базой данных на FireBird (компонент просто был сразу в коробке Delphi), остальное навешивалось в виде dll-модулей и подгружалось при старте ядра.
Первым делом, нужно было решить, как собирать разговорную базу. Сначала Элис реагировала только на прямое обращение и приваты. Первым режимом был закос под дурочку (отвечала просто рандомными фразами и запоминала то, что пишет собеседник), пока без обучения.
Затем, я решил, что нужно разделить полученные фразы и в целом, попытаться разбить полученное по каким-нибудь категориям. Если честно, я уже не помню сколько было в конечном счете категорий (около 20).
Написал модуль, который разбивает новополученные фразы и ищет в них ключевые слова. Какие-то слова явно ссылались на категорию (тему разговора), какие-то могли служить триггерами на настроение (позже объясню), например:
— Я вчера смотрел матч между Канадой и Россией. Любишь хоккей? (тут у нас явно идет речь о спорте по ключевым словам: матч, хоккей. но есть еще и упоминание стран). В данном случае, Элис имела рандомный выбор: говорить дальше о спорте или о путишествиях например.
— Люблю прыжки в длинну / Я ездила в Турцию, кофе там пила
Вообще, выбора у нее было значительно больше, чем просто отвечать по теме:
— Продолжить разговор по выбранной теме
— Задать вопрос, ответ на который еще нет в базе (из таблицы, куда складывались фразы, в которых не были обнаружены ключевые слова).. чтобы узнать ответ 🙂
Ключевые слова и категории пришлось прописывать самому, но это не заняло много времени.. Вы удивитесь, на сколько не богат словарный запас среднестатистического человека в чатах 🙂
На счет склонений, падежей и прочего при поиске ключевых слов: я пользовался масками и регулярными выражениями.
Тут пришлось дополнить модуль, отслеживающий ключевые слова, на предмет поиска пола собеседника в его фразах. До того, как Элис понимала с кем общается, фразы были обобщенные в 70% случаев.
Как только собеседник обращался к Элис, она проверяла его по свое базе, знает ли она его уже и какого «оно» пола )) и уже дальше общалась в соответствующем ключе. В качестве идентификатора собеседника, выступал ident@host, без привязки к нику.
Так же, базу фраз пришлось значительно переделать, т.к. одна и та же фраза не могла звучать одинаково для обоих полов. Потому, пришлось сделать что-то вроде триггера-разделителя в фразах, встречая которые, Элис делала выбор в зависимости от пола собеседника:
— Ты ходил|ходила на концерт БИ-2 вчера?
(символ | означал, что первое слово предназначено для м, второе для ж)
Возвращаемся к ключевым словам: добавляем «вес настроения» на определенные фразы.
Добавляем к базе собеседников два параметра: долгосрочное отношение и короткосрочное. Это я подчерпнул из СИМСов )) Короткосрочное влияет на то, хочет ли Элис прямо сейчас с тобой общаться.
Баллы только списываются. Начисляются по 20 в час на короткосрочное и на 2 балла в сутки на долгосрочное.
То есть, если ты будешь постоянно ее оскорблять, она просто перестанет с тобой общаться.
Добавлен модуль, примерно раз в 3 дня поднимал список каналов и рандомной выбирал 10 каналов с +30 юзеров, затем, один из них. Даже я не знал заранее, куда она «решит» зайти )
Когда всевозможные ключевые слова были забиты в базу, фразы почти сами раскладывались по категориям, я уже практически «забил» на мониторинг. Изредка подглядывал за тем, что люди далеко не всегда понимали, что общались с.. ботом..
Я так и не смог написать модуль различия между будничным разговором и командами на действия.
Потом RusNet (IRC) наверное изжил себя.. сначала я ушел, а потом и Элис года через 2 выключил навсегда.
Посвящается памяти EliseAI, более известной, как просто Elise (RusNet).. она же Лиска..
PS. Наверное слишком ужато получилось. о многих моментах, особенно технических, умолчал. можно в комментах еще обсудить.
Бесплатно помогаю пикабушникам учить программирование, часть 15: «Еще один пост о собеседованиях»
Этот пост является продолжением цикла записей, где я помогаю пикабушникам учить программирование.
Поскольку мои некоторые подписчики уже доучились до уровня стажера/младшего разработчика то самое время рассказать про плохих работодателей. Все нижеописанное будет с позиции личного опыта работы удаленно.
Важно понимать, что испытательный срок работает как в сторону работодателя так и в сторону разработчика. Компания оценивает вашу способность справляться с задачами вы оцениваете все то, что происходит внутри. Крепостное право давно отменили, по другому никак =) Поэтому уволиться после окончания испытательного срока или стажировки это совершенно нормальная практика.
И так ниже я опишу самые очевидные признаки показывающие что с компанией явно что-то не так и пора заняться обновлением своего резюме.
1. Ярко выраженная авторитарность.
Эта тема достойна отдельного поста. Давить авторитетом или «локальными корпоративными лычками» это не нормально. Хороший руководитель будет превосходить в технических/управленческих навыках настолько, что не останется сомнений что он, действительно, знает лучше как нужно делать и как делать не нужно.
2. Негативные отзывы сотрудников.
Тут важно учитывать мнение как работающих в этой компании людей так уже и уволившихся. Пообщайтесь с работниками этой компании в промежутках между собеседований. Узнайте их мнение, попросите совета как эффективнее пройти собеседования. Это очень хорошая практика, которая сэкономит много времени.
3. Нежелание представителей компании отвечать на вопросы о внутреннем устройстве во время собеседования.
4. Откровенное вранье.
У нас перспективная команда и проекты с узнаваемым именем, поэтому мы платим на n процентов ниже рынка
5. Наличие менеджера-попугая который раз в несколько часов спрашивает вас о состоянии задачи.
Сюда же, чаще всего, можно отвести и наличия тайм-трекера. Это звоночек, что руководство просто не понимает что происходит внутри, не собирается это исправлять и не умеет контролировать сотрудников. Хороший тимлид за несколько минут по истории коммитов определит кто работает а кто бездельничает. Так что, если из этого что-то есть, то это жирный минус для компании.
P.S. Завтра будет 15 месяцев, с момента как я этим занимаюсь. Все идет очень хорошо. Чатик канала живой, добавил в модераторы несколько опытных разработчиков. Теперь мы вместе помогаем новичкам расти.
Уроки Ардуино. Прерывания таймера
В этом уроке расскажу для чего нужны прерывания таймера и как ими пользоваться.
Большой урок по цифровой фильтрации данных
В уроке разобраны самые простые и популярные цифровые фильтры данных применительно к C++ и Ардуино:
— Линеаризация наименьшими квадратами
Фильтры протестированы на синтетическом «шумном» сигнале
Обучение Unreal Engine 4 | RTX ON. Часть 1. Введение, Глобальное освещение, Ambient Occlusion
Сегодня запустил новую серию уроков по Unreal Engine 4 под название RTX ON!
В вводном уроке по по трассировки лучей на Unreal Engine 4 мы изучим применение рейтрейсинга, узнаем как включить его на движке и рассмотрим применение глобального освещение с каждым типом источника света.
Под конец поглядим как работает трассировка Ambient Occlusion.
Ответ на пост «Как автоматизировать однотипную, монотонную работу бесплатно и без навыков программирования»
Посмотрел недавно пост про автоматизирование всякого и мне так грустно стало. Я писал пару лет назад хорошее приложение, пытался исправить все косяки других кликеров, чтобы пользоваться было максимально удобно. Но, как-то не зашло и проект был заброшен.
Но запустить можно где и под Linux и даже под MacOS
Мамина школа
Взрослая бенгальская кошка учит котенка открывать двери.
Ответ на пост «Эх, образование, куда ты котишься?»
Не совсем ответ на пост, скорее на ветку комментариев о высших учебных заведениях.
Немного нытья о том, что раньше было лучше.
Мой факультет (не буду обобщать про ВУЗ) считается одним из ведущих в городе (скорее даже, в области, если не в ЮФО). Обычно говорят, что если человек учится на мехмате ЮФУ, то у него личной жизни, работы и любых человеческих благ быть не должно: человек науки всё-таки.
Такую славу мехмат себе получил за долгие годы плодотворной работы, хороших выпускников и заслуженных научных деятелей на кафедрах. Наш Гуров, вон, учителя России в этом году забрал.
Реальность же такова, что над этими словами остаётся смеяться. Может, раньше люди здесь действительно учились, теперь здесь по большей части отдыхают. И если мои одногруппники и товарищи по идеям отдыхают от сессии до сессии, а на сессии всё-таки что-то делают, то многоуважаемые студенты из ближнего зарубежья, коих пришло целых 2 группы (порядком 40-50 человек для набора 300 человек/год), ведут себя, как истинные дети Чингисхана.
Были даже товарищи, которые кочевали между двумя профилями: огребли на сессии чистой математики, перевелись на математику-информатику, снова чистые.
У ректора будут набиты карманы, а старой гвардии мехмата снова выслушивать на русско-узбекском суржике, почему же им нужно ставить зачёт этой ораве.
Не знаю, как дела в ростовском меде, но если там тоже можно пройти пять лет бакалавриата, не выучив ни слова, то в Ростове больше не где взять выпуск специалистов, разве что «специалистов».
Эх, образование, куда ты котишься?
Продолжаю описывать мои впечатления от работы учителем. Сегодняшняя история про то, как я пошел работать физиком в 8 класс в свой родной лицей, из которого когда-то выпустился.