Как быстро написать игру для Android на Unity
В нынешнее время каждый может стать успешным разработчиком мобильных игр или приложений, не прилагая к этому титанических усилий. Примером такого случая является Донг Нгуен, разработавший Flappy Bird. В игре не было никакой сложной механики или графики, но это не помешало ей стать популярной и приносить своему создателю по пятьдесят тысяч долларов в день. Однако в игре не было ничего примечательного. Всё, что потребовалось для успеха, — оказаться в нужном месте в нужное время и немного удачи. Подобное может произойти и сегодня, вам просто нужна правильная идея.
Чтобы продемонстрировать, насколько легко написать что-то подобное, сегодня мы напишем свой Flappy Bird с помощью Unity всего за 10 минут.
Игровой персонаж
Сначала создайте новый проект и убедитесь, что выбрана опция 2D.
Загрузите свой спрайт птицы в сцену. Не забудьте включить фантазию!
Затем отрегулируйте размер спрайта как вам нравится, перетягивая его за угол в нужном направлении. Спрайт должен быть виден в окне иерархии ( hierarchy ) слева. В нём видны все объекты в сцене, и на данный момент их должно быть всего два: камера и птица.
Старт 17 сентября, 7 месяцев, Онлайн, От 8000 до 88 000 ₽
Перетащите камеру на птицу и отпустите. Камера должна оказаться под птицей, это будет значить, что камера теперь «ребёнок» птицы. Теперь позиция камеры будет фиксироваться относительно птицы. Если птица двигается вперёд, то камера делает то же самое.
Снова выберите птицу в сцене или в окне иерархии. Вы увидите список опций и атрибутов справа в окне под названием Inspector . Здесь вы можете управлять различными переменными, привязанными к определённому объекту.
Теперь нажмите на Add Component . Выберите Physics2D > Rigidbody2D — это готовый набор инструкций для применения гравитации к нашему персонажу. Нажмите на Constraints в этой панели и затем выберите freeze rotation Z . Это позволит предотвратить вращение птицы вместе с камерой по кругу.
Таким же образом добавьте Polygon Collider , который говорит Unity, где находятся границы персонажа. Нажмите Play и увидите, как спрайт вместе с камерой бесконечно падает вниз.
Теперь пора заняться полётами персонажа, благо это будет несложно.
Сначала нужно создать C#-скрипт. Создайте для него папку (кликните правой кнопкой мыши где-нибудь в assets и создайте папку «Scripts»), сделайте клик правой кнопкой мыши и выберите Create > C# Script .
Назовём его «Character». Кликните по нему дважды, чтобы открыть его в вашей IDE, будь то MonoDevelop или Visual Studio. Затем добавьте следующий код:
Этот код делает две вещи. Он заставляет персонажа двигаться вперёд со скоростью, которую мы определим в инспекторе, и создаёт ощущение полёта птицы. Метод Update() вызывается повторно на протяжении игры, поэтому всё, что вы сюда поместите, будет выполняться непрерывно. В данном случае мы добавляем немного скорости нашему объекту. Переменная rb является скриптом RigidBody2D , который мы применили к нашему объекту ранее, поэтому когда мы пишем rb.velocity , мы обращаемся к скорости объекта.
Тап по экрану интерпретируется Unity как клик мыши, если вы используете мобильное устройство. После нажатия мы заставляем персонажа немного подняться вверх.
Переменная moveSpeed будет отвечать за скорость движения, а переменная flapHeight — за увеличение высоты полёта птицы после каждого нажатия. Поскольку эти переменные объявлены как public , мы сможем изменить их вне скрипта.
Метод Death() тоже объявлен как public , что значит, что другие объекты и скрипты смогут его вызвать. Этот метод просто возвращает положение персонажа в начало. Также он будет использоваться каждый раз, когда персонаж будет залетать слишком высоко или низко. Скоро вы поймёте, почему он объявлен именно как public . Строка rb.velocity = Vector3.zero; нужна, чтобы убрать импульс — мы же не хотим, чтобы после каждой смерти персонаж падал всё быстрее и быстрее?
Теперь можно выходить из IDE и добавлять скрипт как компонент к персонажу. Для этого нужно выбрать нашу птицу и нажать Add Component > Scripts > Character . Теперь мы можем определять moveSpeed и flapHeight в инспекторе (для этого и нужны public -переменные). Присвоим переменным значения 3 и 5 соответственно.
И ещё: в инспекторе нужно добавить тег к персонажу. Для этого кликните там, где написано Tag: Untagged и затем выберите Player в выпадающем списке.
Препятствия
Теперь добавим препятствия: трубы. Кто-то в трубах находит грибы, а кто-то — свою смерть.
Перетащите спрайт трубы в сцену в место, где должно быть первое препятствие, и назовите его pipe_up .
Теперь создадим новый скрипт под названием Pipe :
Добавьте этот скрипт к спрайту трубы тем же образом, что и раньше. Таким образом, труба будет возвращаться на экран после выхода за его левую границу. Мы тут ещё ничего не сделали, но ещё вернёмся к этому.
Метод OnCollisionEnter2D() вызывается каждый раз при взаимодействии трубы с персонажем. После этого вызывается созданный ранее метод Death() , возвращающий игрока в начальную точку.
Итак, у нас есть одна труба, которая время от времени будет исчезать и появляться на другом конце экрана. Врежешься в неё — умрёшь.
Перевёрнутые трубы
Сейчас у нас есть только один спрайт трубы. Давайте добавим ещё один. Для этого кликните правой кнопкой мыши в окне иерархии, нажмите New 2D Object > Sprite и затем выберите спрайт, который хотите использовать. Ещё проще будет просто перетащить файл в сцену ещё раз.
Назовите этот спрайт pipe_down . В инспекторе в части Sprite Renderer выберите опцию Flip Y , чтобы перевернуть трубу вверх ногами. Добавьте такое же RigidBody2D .
Теперь напишем новый C#-скрипт под названием PipeD . В нём будет похожий код:
Префабы
Итак, нам достаточно этого кода, чтобы сделать всю игру. Мы могли бы передвигать трубы на правую сторону экрана каждый раз, когда они исчезают, или скопировать и вставить столько труб, сколько мы хотели бы встретить на протяжении всей игры.
Если пойти первым путём, то убедиться, что трубы стоят как надо после случайной генерации, и поддерживать честный ход вещей было бы сложно. После смерти персонажа они могли бы появиться в километрах от первой трубы!
Если пойти вторым путём, то всё закончится излишним потреблением памяти, с вытекающим из этого замедлением игры, и ограниченной реиграбельностью, т.к. всё стоит на одних и тех же местах каждый раз.
Вместо этого давайте воспользуемся префабами. Если говорить просто, то мы превратим наши трубы в шаблоны, которые потом сможем использовать для эффективного создания большего количества труб по желанию. Если тут есть программисты, то считайте скрипт Pipe классом, а трубы — экземплярами этого объекта.
Для этого создайте новую папку «Prefabs». Затем перетащите pipe_up и pipe_down из окна иерархии в папку.
Каждый раз, когда вы перетаскиваете объект из этой папки в сцену, у него будут те же свойства, поэтому вам не нужно будет постоянно добавлять компоненты. Более того, если вы измените размер компонента в папке, это повлияет на все трубы в игре, и вам не придётся изменять каждую из них отдельно.
Как вы понимаете, это сильно сэкономит наши ресурсы. Также это означает, что мы можем взаимодействовать с объектами из кода. Мы можем создавать экземпляры наших труб.
Сначала добавьте этот код в условное выражение в методе Update() скрипта Pipe , которое мы оставили пустым:
Это нужно для создания экземпляра нашего gameObject . В результате получается новая идентичная копия. В Unity всегда, когда вы используете слово gameObject , оно ссылается на объект, к которому скрипт в данный момент привязан — в нашем случае к трубе.
Мы генерируем заново наши трубы в случайных вариациях, чтобы было повеселее.
Но вместо того, чтобы проделывать всё то же в скрипте PipeD , мы генерируем оба объекта в одном месте. Таким образом мы можем легко устанавливать положение второй трубы относительно первой. Также это значит, что нам нужно меньше кода для PipeD .
Создайте public gameObject с именем pipeDown . Затем обновите код следующим образом:
Мы добавили переменную gapRan , которая позволяет слегка менять расстояние между трубами, чтобы было интереснее играть.
Возвращаемся обратно в Unity и перетаскиваем префаб pipe_down из папки с префабами (это важно!) в место, где написано «Pipe Down» (заметьте, как наш camel case заменяется пробелом) на спрайт трубы pipe up . Если вы помните, мы определили Pipe Down как public gameObject , что даёт нам возможность определять, чем является этот объект откуда угодно – в данном случае через инспектор. Выбирая префаб для этого объекта, мы убеждаемся, что при создании экземпляра трубы он будет включать в себя все атрибуты и скрипт, которые мы добавили ранее. Мы не просто создаём спрайт, но пересоздаём объект с коллайдером, который может убить персонажа.
Всё, что мы добавим в то же место в скрипте PipeD — просто Destroy(gameObject) , чтобы труба саморазрушалась при выходе за левую границу экрана.
Если вы сейчас запустите игру, то экран будет продвигаться дальше автоматически, и вы умрёте, если столкнётесь с любой из труб. Пролетите достаточно далеко, и эти трубы исчезнут и появятся снова впереди.
К сожалению, между трубами большое расстояние, и экран выглядит пустым. Мы могли бы исправить это, добавив несколько префабов в нашу сцену, чтобы создать конвейер постоянно появляющихся труб. Однако было бы лучше генерировать трубы в скрипте. Это важно, так как в противном случае после смерти персонажа трубы в начале пути уничтожатся, и снова образуется пустое пространство.
Таким образом, мы можем создавать несколько первых труб во время каждой загрузки игры и возвращать всё на свои места после смерти персонажа.
Бесконечный полёт
Теперь создадим public -переменные pipe_up и pipe_down в скрипте Character . Это даст вам возможность ссылаться на созданные объекты, перетаскивая префабы на объект персонажа, прямо как когда мы добавили pipe_down в скрипт Pipe .
Нам нужно добавить эти переменные:
Затем мы напишем такой метод:
Мы будем вызывать его один раз в методе Update() и один раз в методе Death() .
После начала игры вызывается Update() , и наши трубы ставятся согласно заданной конфигурации. За счёт этого первые несколько препятствий всегда будут стоять на одном и том же месте. После смерти игрока трубы встанут на те же самые места.
Вернитесь в сцену в Unity и удалите две трубы, которые сейчас там находятся. Ваша «игра» будет выглядеть просто как пустой экран с птицей. Нажмите Play и трубы появятся, после нескольких первых их положение будет определяться случайным образом.
В заключение
Вот мы и сделали целую игру! Добавьте счётчик очков, попробуйте сделать его более оригинальным и увеличивайте сложность игры по мере продвижения. Также не будет лишним сделать меню. Ещё хорошей идеей будет уничтожать трубы на экране после смерти персонажа. Как только вы с этим закончите — считайте, что готовая к выпуску в Play Store игра у вас в кармане! Когда-то похожая игра сделала другого разработчика очень богатым, и это доказывает, что вам не нужно быть гением-программистом или иметь за своей спиной богатого издателя, чтобы достичь успеха. Вам просто нужна хорошая идея и десять минут!
Хотите писать приложения под Android, но не знаете, с чего начать? Тогда ознакомьтесь с нашей большой подборкой ресурсов для изучения Android-разработки.
Хинт для программистов: если зарегистрируетесь на соревнования Huawei Honor Cup, бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.
Перейти к регистрации
Источник статьи: http://tproger.ru/translations/quick-android-game/
Как делают игры на андроид и ios. Знакомимся с Unity 3d
Играть в игры и получать деньги это мечта детства. Повзрослев с удивлением узнал что 0.01% жителей Земли зарабатывают на жизнь играя в игры. Такие люди называются бета-тестерами. Но предлагаю взглянуть на это с другой стороны. Зарабатывать играя это не для каждого. На такой должности сидят люди, во-первых, специально подготовленные, а во-вторых как правило родственники или друзья разработчика. Редко туда сажают кого то постороннего человека. Цель этой статьи ознакомить людей с работой разработчика игр для андроида, а не бета-тестера. По этому переходим к сути. Не станем рассматривать сложные игры, которые создаются группой экспертов. Так же не будем брать во внимание разработчиков спонсируемых серьезными корпорациями. Разберем создание игр для которых не требуется финансовых затрат, обширных знаний и много времени.
Начинаем. Сначала внесем ясность. Игры которые способен сделать каждый, творятся на двух платформах, «Юнити»(«Unity» 3d) и «Андроид студио».
В студии(«андроид студио») игры создаются подолгу и ограничены в графике. «Unity» делает уже серьезные, творческие и креативные игры. Вот поэтому предлагаю платформу «Android Studio» пропустить и перейти сразу к фавориту «Юнити 3D».
В первую очередь платформа «юнити» уже на самом старте дает преимущество и предлагает приступить к созданию игры владея одним языком программирования. Плюс даёт выбор этого языка. То есть если по каким то причинам «Джава» даётся тяжело то используйте язык «си шарп».
И тот и другой даётся на выбор. Преимуществ ни каких нет. Правда если с «си шарпом» и «джавой» проблемы, то еще даётся два языка, но думаю перечисленные намного проще для восприятия.
В первую очередь приступая к созданию игр и определившись с языком, придумывается сценарий игры. Если читатель творческий человек и готов уделить месяц на познание чего-то нового, то добро пожаловать в «Юнити».
В магазине гугол плей 90% игрушек создано в «Unity3D». Понять что приложение создано на этой платформе можно по заставке, в каких то это не прячут и оставляют фирменный куб с надписью, а те что побогаче доплачивают и заменяют «интро» на выбранный логотип. В интернете и на ютуб каналах 10000 уроков по созданию игр. Там подробно и с примерами расписано, как и что делать. Платформа способна выпустить приложение на андроид, ios и пк.
Думаю пропустим тот пункт где скачивать «Unity» и как установить. В конце концов это в 2019 году делают даже пяти летние дети. По этому начнем с того что программа установлена и готова к работе.
Далее создаем проект и окно интерфейса разделится на части. Конечно если бы эта статья задумывалась как урок по созданию игр то пришлось бы описывать окна и кнопки, то есть подробно перечислять назначение каждого окна. Но цель статьи не научить работать в «юнити», а рассказать о потенциалах программы и разъяснить принцип работы.
А план создания приложения такой: Пользователь рисует на экране игру. В сущности это даже не рисование, а кукольный театр. Только вот «действующие лица» уже готовы и заранее запрограммированы на «определенное» действие. Например разработчик задумал игру, где по траве едет танк. Давайте приступаем. Выбираем зеленый фон(трава). Показываем где и как будет работать камера. Скачиваем танк в «Unity — Store».
Выставляем в точку старта. Пробуем. Как правило, в магазине вместе с танком уже прописан скрипт(код), который отвечает за управление и физику движения. По сути игра готова. Иногда требуется поработать пальчиками и кое-что дописать в код. Кстати если вместе с танком скриптов нет то эти коды(скрипты) легко ищутся в интернете. В начале статьи писалось что язык программирования «джаву» или «си шарп» лучше выучить. Так найдя код и зная язык будет легче разобраться, как и куда «его» дописать. Как правило, это ограничено 5-6 строчками кода. Следующий пример: захотелось создать гоночный автомобиль который гоняет по городу. Скачивается с магазина (бесплатно) город и там же гоночный автомобиль. Далее в редакторе складываем. Дописываем пару строк в коде и игра готова. В «Юнити» работают скорее не программисты, а художники для которых на первом месте творческий процесс, а затем программный код.
Кстати правильнее называть такие танки, автомобили, города — «ассетами». В магазине «юнити» таких «ассетов» видимо не видимо . Но если покажется мало или по каким то причинам захочется, что-то, на стороне, то прогуливаясь по интернету найдете «ассеты» на стороне. Как бесплатных так и за деньги.
Скрипты кстати тоже в свободном доступе. При создании готового продукта «юнити» спросит для чего эта игра. Для компьютера, андроид и айфона, требуется выбрать нужный вариант.
Платформа (движок) «Юнити» способна создавать не только игры, но и стандартные приложения. Например: блокнот, калькулятор, будильник и тд. Разумеется даже такие вещи проще скачать (ассеты) и создать приложение.По началу готовьтесь, что каждое приложение состоящее даже из одного «ассета» будет «весить» как игра для ПК. Позже научитесь экономнее расходовать ресурсы.
Создание сцены будет даваться легче и в конце пути наградой станет готовая игра. Первое творение которое создавалось мной в «юнити» стала игра про рыцаря спасающего принцессу. Детям понравилось. В игре было 4 уровня и на всё ушло 2 дня.
Скачать движок «юнити» лучше с официального сайта. Разумеется «на халяву».
Для тех кто заинтересовался созданием игр на этой платформе рекомендую книгу «Основы Разработки Игр Unity»(правда на английском звучит иначе Unity Game и тд.).
Так же на сайте программы почитайте справочник(умные вещи пишут). Так что разобраться будет не сложно.
Если тема заинтересовала, и помимо ознакомительной информации хочется уроков, то ставьте лайк. По количеству пальцев поднятых вверх становится понятно чего хотят читатели. Если было интересно тоже ставьте лайки. Буду рад новым подписчикам, поэтому если горит жёлтым цветом кнопка подписаться то подписывайтесь. До свидания.
Источник статьи: http://zen.yandex.ru/media/babushkamprokomp/kak-delaiut-igry-na-android-i-ios-znakomimsia-s-unity-3d-5e1441e698930900b3abd9f6