24

Опыт разработки первой игры на Unity, часть 2⁠⁠

Ссылка на часть 1

Ссылка на часть 3

Часть вторая — в которой я сдаюсь и опускаю руки

Оказалось, что вытянуть нужные мне данные — крайне сложная задача. Я пересмотрел кучу роликов, прочитал кучу информации, но все бесполезно. Несколько дней экспериментов — каждый раз одно и то же. Ошибка, ошибка, сплошные ошибки… Им не было конца

Заключение

Итак, я сдался. Вся затея пошла прахом. Постоянные ошибки сломили меня, а полное непонимание того, что делаю — добило окончательно

Так, а это что за текст?

Ахах, сдался — как же! Просто скипнул эту часть и перешел к следующему этапу. Благо, пока что это можно сделать относительно безболезненно. К загрузке данных вернусь как-нибудь потом. Итак, поехали дальше!

О возникших проблемах

Главная проблема — я вообще не знаю, как работать с таблицей, которая находится где-то там в гугле. Вторая — мой навык проггера. Он крайне низок — что-то около джуна (джун минус минус, ориентировочно). И третья — формат таблицы (о нем чуть ниже)

Нашел такое решение. И оно работает!

Смог адаптировать под моих героев и записать в них данные из таблицы! Проблема пришла внезапно. На первом листе у меня находятся, по сути, ссылки на айдишники из других листов. А cvs, насколько понял, не позволяет работать с другими листами! Штош, ищем другие варианты.

Поиски привели к https://docs.google.com/spreadsheets/d/*/expor? format=cs? edit#gid=0, где * это id таблицы, а после gid айди листа.

Ура — unity возвращает адрес нужного листа! Но данные все равно берутся с первого листа, агрррх! Я отчаялся. Почти потерял надежду. И тут, неожиданно, нахожу его: https://docs.google.com/spreadsheets/d/{key}/gviz/t? tqx=out:csv&sheet={sheet_name}. Ура, работает! Берет данные именно с нужного листа. Но вылезли баги — все id обрамлены теперь в « ». Решилось просто — указал, что нужно убирать символ ".

Следующая проблема — как сделать так, чтобы брались характеристики из другого листа в зависимости от того, какой id указан у героя. После долгих часов мучений нашел корень проблемы — в найденном решении при вытаскивании таблиц тут же присваиваются найденные значение. Значит, нужно переписывать — разделять методы так, чтобы появилась нужная гибкость. Отныне и навсегда — отдельно вытягиваем таблицы, отдельно проходимся по ним, ища то, что нужно, отдельно записываем герою нужные характеристики.

Итог вы знаете — пока так и не получилось

Следующий шаг

Удаляем все эксперименты — возвращаемся к самому началу до экспериментов с таблицами.


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

Выдал героям и противникам фейковые характеристики, добавил кнопки для использования скилла. Если мана накопится, то по нажатию герой делает БУМ!


Модернизировал выбор цели героем — теперь есть не только сингл-таргет скилл, но и бьющий несколько противников

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


Для того, чтобы найти ближайшие объекты, просто взял готовое решение по поиску и переделал чутка

Еще и здоровье теперь не просто отнимается, а делает это красиво и постепенно. Циферки это здоровье — они дублируют полоску здоровья с кнопки скилла. Потом от них избавлюсь

Что вообще происходит на видео

Герой с 1000 здоровья это герой 1, его кнопка Skill Hero 1. По нажатию, если мана заполнилась, он бьет одного ближайшего противника


Герой с 2000 здоровья, соответственно, герой 2. По нажатию на его кнопку, он бьет всех противников, которые находятся на дистанции атаки


Естественно, количество кнопок зависит от количества героев — и у каждого свой скилл

Возникшие проблемы

Первая — архитектура. Уже начинается непонятно что — что-то откуда-то вызывает, что-то при этом происходит. В итоге сделал в confluence кучу страниц с названиями объектов и префабов. В них — страницы со скриптами. И в этих страницах описание того, что они делают со ссылками на те скрипты, которые вызывают. Надеюсь, это немного поможет упорядочить то, что у меня там происходит.

Вторая тоже относится к архитектуре, но немного иначе. Например, изначально был скрипт Fight, в котором есть метод Attack(). В начале все было хорошо — а сейчас понадобилось использовать умения. Если все оставить как есть, то Attack() будет вызывать UseSkill(), но это скилл должен вызывать атаку! Поэтому пришлось немного переделывать такие моменты. Теперь Fight() только определяет само состояние атаки и ее возможность, а UseSkill() используется в другом месте

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

Немного важностей

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

private IEnumerator UpdateCurHealth()

{

while (_prevHealth > _curHealth)

{

yield return new WaitForSeconds(.1f);

_prevHealth--;

_healthCount.text = _prevHealth.ToString();

if (_prevHealth <= _curHealth)

{

_prevHealth = _curHealth;

StopCoroutine(UpdateCurHealth());

}

}

}

Маленькая и простая штука, которая позволяет тут же увидеть результат работы. Позволяет сохранить оптимизм, т.к наглядно показывает, что есть прогресс

Следующий этап

А дальше у меня прокачка! Научу героев получать опыт и повышать уровень

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

2
Автор поста оценил этот комментарий
Главная проблема — я вообще не знаю, как работать с таблицей, которая находится где-то там в гугле.

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

Следующая проблема — как сделать так, чтобы брались характеристики из другого листа в зависимости от того, какой id указан у героя.

Тянешь 2 таблицы способом описанным выше. Создаешь героя, настраиваешь его конфигом из одной таблицы, настраиваешь его конфигом из второй таблицы.

Так и не нашел способ вставить сюда форматированный код - если подскажете, покажу.

Никак. Кидай картинкой и ссылку на гитхаб, или если его нет, на тот же pastbin хотя бы.

Надеюсь, это немного поможет упорядочить то, что у меня там происходит.

Не поможет) Только будешь кучу времени тратить на поддержку этой хуеты)

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

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

Например, вот такой код у меня отвечает за то, что циферки красиво уменьшаются при получении урона

Неправильно. Ты заебешься это поддерживать. Вот наипростейшее решение через делегаты для этого. Не забывай только отписываться, при уничтожении объекта)

Иллюстрация к комментарию
раскрыть ветку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества

Недвижимость и ремонт

Теги

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

Сообщества