Делаем Тунца - пять!
Начало: 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 переменные. Думаю, что тем, кому интересно попробовать создать подобную простую игрушку будет и интереснее и полезнее самим навести порядок в уровне доступов, решить, где будет правильно использовать поля рид-онли и т.д.
У меня на горизонте замаячила новая работа и не исключено, что грядущая неделя - последняя неделя безделья, в работу это надо будет погрузиться чуть менее, чем полностью, поэтому продолжать писать сюда я буду, скорее всего, только по выходным.