sambahopkins

sambahopkins

На Пикабу
408 рейтинг 11 подписчиков 5 подписок 12 постов 4 в горячем
Награды:
5 лет на Пикабу
17

Делаем Тунца - пять!

Начало: http://pikabu.ru/story/nu_kogda_zhe_myi_uzhe_dodelaem_tuntsa...

Ну что же, продолжим. Сегодня мы будем делать анимашки. Это очень-очень просто (потому что в этой игре анимация очень простая).

Итак, для начала нам нужно нарисовать все кадры для анимации тюленя и импортировать эти кадры в наш проект.

И тунец у нас тоже будет анимирован.

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

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

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

Однако, надо добавить кадров, чтобы тюлень у нас изгибался вверх и вниз при движении. Ставим новый кадр, меняем значение Sprite в Sprite Renderer - всё очень просто.

Теперь, когда кадров достаточно, перейдем во вкладку Animator. Мы видим, что наша единственная анимация стала анимацией по умолчанию. То есть если сейчас мы запустим игру, то тюлень будет плыть, двигаясь одинаково, вне зависимости от того, просто он плывет, ныряет, ест или повстречал врагов, например.

Вернемся в Animation и создадим еще одну анимацию. Назовем ее seal_dive, потому как это будет анимация погружения.

Добавим один единственный параметр - Sprite из Sprite Renderer.

И добавим все спрайты, которые мы нарисовали для погружения.

Снова идем в Animator и создаем триггер.

Жмем правой кнопкой на Any State, выбираем единственный пункт Make Transition и в полученном Transition в Conditions добавляем наш триггер, который мы назвали, конечно же, dive.

Ну и сделаем еще одну Transition, из tuna_dive в tuna_swim.

Вполне наглядно выглядит. А теперь пора открыть скрипт, управляющий тюленем - SealController. Добавляем provate переменную anim, в методе Awake() устанавливаем ей значение, а в Jump с ее помощью дергаем наш триггер dive.

Повторим всё то же самое для создания анимации seal_eat. Только триггер назовем уже, соответственно, eat.

А в скрипте добавим срабатывание этого триггера, когда тюлень встречает еду.

И снова все то же самое для seal_hurt.

В скрипте мы дергаем этот триггер, когда встречаем Animal - этот тег сейчас у медузы и он будет у всех врагов и друзей.

Создадим анимации для тунца и медузы, на сей раз не перетаскивая спрайтов на объект, а нажав во вкладке Animation кнопку Create. Тунец - парень простой, у него будет только один state и никаких триггеров.

И медузе создадим анимацию, но уже не одну, а парочку, помимо swim, у нее будет еще и play. И, соответствующий триггер и Transition.

А в скрипте добавим, чтобы при встрече с тюленем все наши враги и друзья "играли".

Теперь создадим дельфина. Можно скопировать его с медузы, заменив спрайт, сбросив коллайдер, подняв скорость (дельфин плавает быстрее) и переименовав, можно создать заново - не важно. Помните только, что копируя, вы должны не забывать создать новому объекту отдельный Animation Controller и назначить его. Так же вам нужно будет сделать "фабрику дельфинов", как мы делали раньше "фабрику медуз", только в качестве префаба выбрать там дельфина и настроить паузы между появлениями дельфинов, они уж точно встречаются пореже медуз.

А теперь добавим в скрипт MovingObjectController public переменные life и score. Life - это сколько жизней будет добавлять или отнимать в случае отрицательного значения столкновение с данным объктом, а Score, как не сложно догадаться - очки. У префаба дельфина выставим Life в 10, Score в 1. И очки и жизнь будут добавляться, пока тюлень "играет", то есть соприкасается с дельфином. Медузе выставим -10 в life и оставим 0 в score, а у тунца в score поставим 100 и в life 100 - тунец сразу съедается и добавляем и очков и жизни сразу.

И добавим изменим немного в обработку событий. При столкновении с Animal мы теперь смотрим, включать ли нам hurt (если life < 0) или же добавлять очков.

Вот и всё на сегодня. Не так уж и мало, хотя и всё просто. В следующий раз напишу о звуке.

Я пока оставляю везде, где "нужно" public переменные. Думаю, что тем, кому интересно попробовать создать подобную простую игрушку будет и интереснее и полезнее самим навести порядок в уровне доступов, решить, где будет правильно использовать поля рид-онли и т.д.

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

Показать полностью 24
157

Странные маленькие грибочки

Странные маленькие грибочки

А еще вот такие странные маленькие грибочки попались в Целау, растут на стволе поваленного дерева. Может, кто-нибудь знает, что это? Интересно так же, что это за черная "икра" ниже грибов.

6

Мухоморы в Целау

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

Показать полностью 12
35

(ну когда же мы уже до)Делаем Тунца - четыре

Начало - здесь: http://pikabu.ru/story/delaem_tuntsa__tri_4521249

Сегодня мы сделаем отображение жизни, очков и изменение этих величин в зависимости от того, встретит наш тюлень врагов или еду. Начнем с отображения и потом добавим изменение. Короче говоря, делаем HUD.

Для начала создадим на сцене объект типа Canvas и назовем его HUDCanvas, например:

Создадим в нем дочерний объект типа Slider:

Расположим наш слайдер, который будет отображать жизнь, в самом низу экрана, для этого у него в Transform выберем соответствующий Anchor Presets:

Посмотрим, что есть внутри нашего слайдера, что там можно настроить. Ага, есть цвет заливки, поменяем его на зелененький:

А вот Handle Slide Area нам вообще не нужно, мы же не хотим, чтобы игрок мог добавить себе жизни простым перемещением ползунка. Так что просто удалим его. И посмотрим, что еще можно настроить в нашем Slider, а настроить можно максимальное и стартовое значение:

Так же стоит убрать крыжик Interactable, чтобы игрок действительно не мог изменять собственноручно количество жизни. И настроить цвет. Например, подкрутим альфа-канал и сделаем наш слайдер полупрозрачным, так на мой взгляд красивее. Уменьшите значение A у цветов Normal Color в Slider и Color в Slide-Fill Area-Fill до такого, чтобы вам нравился уровень прозрачности у заполненной и пустой полоски:

А теперь что-то новенькое: создадим новый пустой объект на сцене, назовем его GameManager и добавим в него один единственный компонент - новый скрипт, который так же назовем GameManager:

Добавим в этот скрипт следующий код:

Мы используем instance вместо static-класса. В Awake() нет DontDestroyOnLoad() по той простой причине, что у нас одна сцена и она не будет перезагружаться. Если вы будете использовать много сцен и хотите, чтобы GameManager оставался единым для всех сцен - используйте DontDestroyOnLoad () в Awake() для этого

Так, а про score то мы забыли, ну не беда, вернемся к нашему HUDCanvas и добавим в него дочерний объект типа Panel:

Назовем нашу панель ScorePanel и добавим и ей дочерний объект, но уже типа Text:

Назовем его просто Score, настроим его расположение так, чтобы он был в правом верхнем углу экрана:

Чтобы наша панель не окрашивала все белым цветом, сделаем ее полностью прозрачной:

А теперь пора добавить кое-что в наш скрипт GameManager:

Мы добавили public-переменные timeSlider и scoreText, а так же score. В методе Awake() добавили обнаружение соответствующих объектов на сцене и связали их с нашими переменными. А в Update() добавили постепенное изменение количества жизни и отображение текущего количества очков.

Теперь пришло время сделать так, чтобы тюлень реагировал на столкновение с едой - пополнял количество жизней и увеличивал счет, а так же с врагами - уменьшал количество жизней. Для этого мы пойдем в папку Prefabs, где у нас лежат заготовки для тюленя, медузы и тунца и, встав на одну из заготовок, откроем меню Tag и выберем создание нового тэга:

Создадим сразу парочку тэгов - Food и Animal:

После этого снова идем в Prefabs и раздаем теги - тунцу Food, медузе Animal, ну и заодно дадим тюленю тэг Player, пусть будет:

Теперь пора добавить парочку методов в наш скрипт SealController, который прикреплен у нас к тунцу. Вот такие методы добавим в конце скрипта:

И еще, добавим-ка нашему тюленю PolygonCollider2D и выставим у него isTrigger в true. Это нужно, чтобы все тельце тунца реагировало на столкновения с другими объектами (до сих пор у нас был только Circle Collider, нужный нам для ныряния и подъема на поверхность воды):

Вот теперь всё будет прекрасно работать. Когда тюленю будет попадаться тунец - жизни становится больше, очков тоже, а когда медуза - жизней стремительно становится меньше. Это уже похоже на игру! Однако, наверняка вы заметите, что очки как-то не правильно отображаются, пока их 0 - всё нормально, как только их становится больше - количество их куда-то исчезает. Что же, идите в объект Text, который мы назвали Score и смотрите, что там не так с расположением или размером этого объекта, настраивайте. Нужно же хоть что-то сделать самостоятельно. :)

В этот раз мне удалось сделать перерыв не в 7, а в 6 дней! Успех? Не очень, конечно. Однако, несмотря на занятость и лень, я постараюсь сделать продолжение через 5 дней. А может и раньше, но не обещаю. Впереди у нас такие интересные задачи как: гамовер и стартовое меню, звуки и анимация. Потерпите, осталось не так уж и много.

И я по прежнему рад любой критике от тех, кто лучше меня знает Unity3D и C# - пишите, ругайте, всё мотаю на ус, мне самому эти типа-уроки будут не менее полезны, чем тем, кто просил написать, как сделать такую простенькую игру, "вот я установил юнити - с чего начать" и так далее.

Показать полностью 18
14

Делаем Тунца - три!

Прошла неделя и таки продолжаем. Начала здесь: http://pikabu.ru/story/delaem_tuntsa__dva_4503397

Итак, сегодня мы делаем первых врагов и пищу для нашего тюленя. Сразу создадим папку Prefabs и закинем в нее самого Тюленя со сцены, пусть лежит там тоже:

Затем берем спрайты наших пищи и врагов - это будут медуза и тунец и кидаем их в папку спрайты, потом вытаскиваем на сцену и добавляем каждому из них компонент Polygon Collider 2D, ставим у компонента параметр isTrigger в true. Понадобится он нам чуть позже и не раз.

Теперь закидываем медузу и тунца со сцены в папку Prefabs, а со сцены их можно удалить, ведь наша цель состоит в том, чтобы они появлялись в правой части экрана и проплывали по воде в левую часть.

Создадим на сцене два пустых объекта и назовем их medusaFactory и tunaFactory - эти объекты будут порождать наших медуз и тунца.

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

Добавим к одной из наших фабрик новый скрипт и назовем его FactoryController.

Вот что будет в том скрипте:

Добавим уже готовый скрипт и ко второй фабрике и настроим наши значения: Min и Max Time Out будут отвечать за то, какую минимальную и максимальную паузу нужно делать между генерацией объектов, MinY и MaxY за то, где по оси Y генерировать новый объект, ну и Prefab - это наш объект, чтобы задать его, берем в папке Prefabs тунца и тащим его в это поле у tunaFactory, аналогично поступаем и с медузой и medusaFactory.

Далее, добавляем компонент - новый скрипт нашему тунцу, назовем его, скажем, MovingObjectController. И в скрипте том вот что:

Добавляем этот скрипт и медузе и настраиваем ей и тунцу максимальную и минимальную скорость.

Теперь, если мы запустим игру, медузы и тунцы начнут появляться и проплывать мимо тюленя справа налево. Однако, как не сложно догадаться, они будут плыть и плыть в никуда. Поэтому создадим еще один пустой объект, который назовем Terminator, поместим его слева за пределами видимости камеры, добавим ему компонент Box Collider, настроим его так, чтобы всё, чтобы проплывало по нашей воде, попадало в этот коллайдер, не забываем выставить isTrigger в true, так же добавляем компонент Rigidbody2D и ставим isKinematic в true и добавляем компонент - новый скрипт, который называем Terminator Controller.

А в скрипте этом совсем короткий код, который будет удалять всё, что попадет в коллайдер нашего терминатора:

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

Показать полностью 11
23

Делаем Тунца - два!

Ну что же, после некоторого перерыва - продолжаем.

Начало здесь: http://pikabu.ru/story/delaem_tuntsa__raz_4489410

Мы остановились на том, что у нас есть тюлень и есть море. А сегодня будем делать так, чтобы тюлень по этому морю не просто плыл, но мог и нырять.

Для удобства я создал пустой объект и собрал в него все элементы моря. А теперь создаем в этом нашем общем море еще один элемент - тоже пустой объект и в нем добавляем один очень интересный компонент:

И еще один компонент:

Теперь настраиваем в Buoyancy Effector параметр Surface Level так, чтобы поверхность воды примерно совпадало с нижней линией волн. А в Box Collider 2D настраиваем его размеры так, чтобы всё море до дна было "водой", которая будет выталкивать нашего тюленя к своей поверхности.

Однако, пришло время добавить кое-что и к нашему персонажу, чтобы вода его действительно выталкивала и чтобы он покачивался на волнах:

После добавления компонента Rigidbody2D добавляем еще один - Circle Collider 2D:

И настраиваем размер коллайдера:

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

И вот что будет в том скрипте:

Настройки Buoyancy Effector, массу тюленя в его Rigidbody2D, а так же нижнюю и верхнюю границу для ныряния в скрипте, в методе FixedUpdate() попробуйте менять, чтобы получить наиболее (на ваш взгляд) реалистичное движение персонажа. На сегодня всё, в следующий раз будем делать первых врагов и пищу тюленя.

Напоминаю, что установить готовую игру, чтобы увидеть результат можно здесь для Андроида: https://play.google.com/store/apps/details?id=com.FRN.tuna

и здесь для Windows Phone: https://www.microsoft.com/ru-ru/store/p/tuna/9nblggh4td3k

Показать полностью 8
15

Делаем Тунца - раз!

У этого поста есть дубликат: http://pikabu.ru/story/delaem_tuntsa_1_4487033 - было бы здорово, наверное, если бы админы его удалили. Я вчера просто забыл прикрепить пост к сообществу, но всё таки он должен быть именно здесь, в Лиге.


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

https://play.google.com/store/apps/details?id=com.FRN.tuna


https://www.microsoft.com/ru-ru/store/p/tuna/9nblggh4td3k


На этом хватит саморекламы, перейдем к тому, что, возможно, будет интересно тем пикабушникам, которые хотят начать делать игры на Unity3D, но не знают как, не знают, с чего начать, не знают, где искать обучающие материалы. Тем же, кто имеет опыт создания игр, вряд ли будет интересно читать дальнейшее, ну разве что покритикуете меня и расскажете мне, глупому, как же надо делать на самом деле. :)


Для меня это первый опыт написания каких-то примеров, уроков по Юнити, так что пинайте меня ногами, тыкайте меня носом в мои ошибки (но не слишком больно).


Будем делать так: я создам в Юнити новый проект и заново сделаю игру. Правда, у меня уже заготовлены и скрипты и префабы и графика, так что я всё сделаю быстро. Вам же я не дам заготовок, ибо считаю, что намного полезнее самому набрать код, создать объекты и всё настроить, чем взять готовенький архивчик и оп-ля - урок пройден. Дело не обойдется одной статьей, хотя игра простенькая и маленькая. Будет их 3 или 4. А может и 5. Вообще первый будет рассказывать о том, как сделать скроллинг фонов в игре и будет он пробным, понравится ли, может быть что-то по-другому делать, всё по другому делать или вообще прекратить - жду отзывов и критики, короче говоря. Итак:



1. Идея


Будем считать, что Юнити у нас уже есть, установлено, мы зарегистрированы и т.д. и т.п., то есть можем запускать среду разработки и разрабатывать. Но, конечно же, игра начинается с идеи, с желания сделать что-то определенное, в определенном жанре. С Тунцом у меня всё было просто - еще на этапе первоначального знакомства захотелось сделать что-то вроде Корявой Птички, но немного другое, чтобы надо было не только уворачиваться, но и ловить, чтобы объекты на экране были не статичные, а движущиеся и... и... и еще что-нибудь, в результате раздумий над этим что-нибудь родилась идея перенести действия игры из воздуха под воду и единственным действием персонажа сделать не взлёт, а нырок.



2. Реализация


Как уже говорилось выше, я не стану рассказывать, где скачать и как установить Unity3D.


Мы сразу создаем 2D-проект и начнем делать игру. С чего же начать? Ну раз наш персонаж и все прочие в этой игре плывут в море, то очевидно, что с воды, дна и самого персонажа. Вам нужно нарисовать текстуры для воды и дна и спрайт для персонажа. Итак, у нас созданы текстуры, я импортировал их в Юнити (просто бросайте файлы драг-н-дропом в Assets и потом переключайте у них Texture Type со Sprite на Texture) и расположил эти текстуры на сцене.

Красота! Но наш персонаж будет постоянно плыть по морю, то есть волны должны двигаться, да и песок на дне. Поэтому придется сделать скроллинг нашим текстурам.

Для этого создаем на сцене объект типа Quad:

Однако, волны так никуда и не плывут. Нужно продолжать. Берем мышкой одну из текстур и тащим ее на список компонентов нашего Quad, а точнее на компонент MeshRenderer и бросаем там. Получается вот что:

Пожалуй, стоит удалить текстуры, которые мы набросали до этого в сцену. Без ниж картина следующая:

Мелко как-то получилось, ну так возьмем и увеличим, поменяем значения Scale у нашего Quad (кстати, значение Scale по y на картинке у меня слишком большое, я его потом поменял на 10):

Ох, страсть то какая, ужасно выглядит, наверное, нужно сменить шейдер. Меняем шейдер со стандартного на Sprites-Diffuse:

И получаем уже что-то более-менее похожее на море и волны, а теперь проделываем всё это для второй текстуры волн и песка и видим уже что-то прямо таки похожее на сцену игры:

Небольшое пояснение: у нас будут волны, которые как бы между персонажем и нами и волны, которые за персонажем. А так же песок, до которого персонаж сможет опускаться. Нам нужно расположить песок на переднем плане, волны которые между персонажем и нами - за песком, а уже за ними - еще одни волны. А персонаж наш окажется между волнами. Для этого мы просто меняем координату Z в Position у компонента Transform нашего Quad. Песку поставим, например, 1, вторым волнам 1, а у первых волн пусть остается 0. Пора бы бросить в это море нашего тюленя!

Выбираем наш Quad и видим, что в нем есть некоторые компоненты. Нам не понадобится компонент Mesh Collider, поэтому удаляем его:

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

Итак, мы сделали воду достаточно прозрачной и тюлень стал виден, когда он всплывёт на поверхность, будет видна граница воды на его тельце, а так же дальние волны у нас отличаются оттенком от передних. Отлично. Теперь нужно сделать, чтобы волны двигались. Для этого создаем в Quad новый компонент - скрипт:

Называем скрипт WaterController. Открываем его и вводим такой код:



using UnityEngine;


using System.Collections;



public class WaterController : MonoBehaviour {



public float scrollSpeed;


private Vector2 savedOffset;


private Material mat;


private float offset = 0f;



void Start () {


mat = GetComponent<Renderer> ().material;


savedOffset = mat.GetTextureOffset ("_MainTex");


}



void Update () {


float rate = scrollSpeed * Time.deltaTime;


offset = offset + rate;


if (offset <= -1f || offset >= 1f) {


offset = 0f;


rate = 0f;


}


mat.mainTextureOffset = new Vector2 (offset, savedOffset.y);


}



}


Пожалуйста, озаботьтесь табуляцией самостоятельно, пикабу ее почему-то "съедает".


Сохраняем скрипт. Что происходит в нашем скрипте? В методе Start() определяется наш материал, который использует наш Quad и offset нашего материала. В методе Update() каждый кадр offset меняется и таким образом создается эффект скроллинга текстуры.


Запускаем наш проект... Тюлень в воде висит, но ничего никуда не двигается. Смотрим тогда на наш компонент Скрипт (или в код) и видим, что есть public переменная scrollSpeed. Делаем скорость, скажем, 0.2. И еще один нюанс: идем в наши текстуры и меняем Wrap Mode с Clamp на Repeat, чтобы скроллинг был закольцован. Теперь добавляем наш скрипт (уже не надо создавать новый) ко вторым волнам и к песку и выставляем им скорость , скажем пусть у дальних волн она будет 0.1, у ближних 0.2, а у песка - 0.3 (не забываем так же и про Wrap) и... Всё прекрасно работает!


На сегодня всё, пишите, ругайте, ставьте минусы и плюсы. Завтра или продолжим и заставим нашего тюленя качаться на волнах и нырять ко дну или перепишем этот урок, если вышло всё совсем плохо и непонятно.

Показать полностью 11
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества