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

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

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

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

(ну когда же мы уже до)Делаем Тунца - четыре Unity3D, Android, Windows Phone, Gamedev, Игры, Туториал, Длиннопост

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

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

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

Лига Разработчиков Видеоигр

6.6K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

1
Автор поста оценил этот комментарий

У вас там баянометр, наверное, ругается все время на картинки ))))

раскрыть ветку
1
Автор поста оценил этот комментарий

Ну и сразу от программиста - "магические" числа в коде всегда лучше выносить в константы, либо даже паблик поля класса (в случае с unity), для того чтобы легко и из одного места их можно было изменить.

Например вместо score += 100, лучше добавить константное поле в начале тела класса с осмысленным названием:
private const FOOD_EATING_SCORE = 100;
и использовать её как score += FOOD_EATING_SCORE;

раскрыть ветку
DELETED
Автор поста оценил этот комментарий
Чтож все так любят моно, почему не студия!?) А за пост плюсик:)
раскрыть ветку