Pull to refresh
6
0
Send message

Интересная статья, спасибо!

Есть другой вариант. Если не задавать все объекты прямо в одном файле (это касается как json, там и yaml - юнитевских scriptableobject'ов и других форматов), а делать по файлу на сущность, то и мержится это хорошо в VCS и есть стандартные средства работы как с файлами - через Project окошко Unity (поиск, разложение по папкам...). По надобности их можно собрать вместе, бросив в список

public List<CharacterData> characters;

на какой-нибудь рутовый ScriptableObject. Из минусов - кликать нужно, чтобы открыть параметры для настройки. Но можно привыкнуть (или открыть два окна инспектора, один залочив на рутовый SO - лайфхак).

Интеграцию с гугл доками можно запилить по надобности, не нарушая разложения на файлы под VCS. Импорт/Экспорт/Синхронизация. Как мне кажется, формат хранения данных не должен меняться в зависимости от отображения

Сейчас 2020 год. Они все еще закрытые? Не поделитесь ссылками?
Нашел вот такое на гитхабе.
https://github.com/ancientbuho/entitas-unirx-additions
Это extension для rx. Позволяет подписаться на добавление/удаление/изменение компонента. Пример:
entity.OnComponentAddedAsObservable().Subscribe(dead => do something);

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

Спасибо большое за статью! Хочу дополнить и спросить:


| entity ID as integer. Ни в одном из рассматриваемых решений поддержки не было.
По идее можно добавить компонент с единственным полем — айди. Назовем его IdComponent.


| join by ID reference O(N+M) - соответственно связь можно обеспечить по этому айди.
Для ускорения доступа можно завести систему-синглтон, которая будет например класть в словарик entity и отдавать по айди.


Не понял что значит M в O(N+M). N — это все entity в игре, так? Что тогда M?


| reuse component type — возможность использовать один раз написанный тип компонента в разных типах сущностей. Поддерживал только Entitas.


Не понимаю, что значит разные типы сущностей? Не могли бы Вы привести пример?

Ясно. Спасибо, отличная статья!

Спасибо большое за статью, посмеялся. Почти все эти пункты тоже встретил как-то, устроившись на новую работу (2 3 4 5 6 8 10 11 13 14 15 17 20). Слава богу вредные советы хотя и не сразу, но проявили свою суть и отжили.
А, по 7-му пункту я не очень понял. Чем плохо скрывать поля, выставляемые из редактора? Или неправильно понял?
По идее вредный совет, это делать все поля для редактора public, не?

«Unity относительно недавно стала полноценно поддерживать gradle сборщик для Android, а ADT объявила как legacy»
ADT — это опечатка? Имелся в виду ANT?
Подход со свойством exception приведен вот в этом видео, в конце, где пишут StartCoroutine — с возвращаемым результатом. Жалко, когда я был новичком, не видел этого видео. Прикрепляю тут, надеюсь пригодится www.youtube.com/watch?time_continue=806&v=ciDD6Wl-Evk. Сам я, пришел из java и с JavaRx сразу пересел на UniRx, но в последнее время все больше пишу логики на yield-ах (т.е. корутинах), т.к. код на них мне легче сопровождать и читать. Ну и async/await вышли из беты и работают на unity ни для кого ни секрет. Они, в отличие от корутин, из коробки предоставляют удобные средства работы с exception и возвращаемым результатом
Android Data Binding уже вышел из беты? Насколько он забагованый? Поделитесь, пожалуйста, опытом
Кстати, вот один из хороших и простых туториалов по New UI. Там описано про anchor и как с его помощью добиться одинакового поведения под разные разрешения. Более того, в туториале с его помощью делается slide in/out анимация: www.raywenderlich.com/79031/unity-new-gui-tutorial-part-2 (на английском)
Приятно читать стройную документацию. Несколько вопросов по функционалу:
«в системе закончилась память, в этом случае для предотвращения OutOfMemory Chronos может стереть старые данные результатов»
Что произойдет в этом случае с запросом? При возвращении в activity автоматом будет запущен новый или его нужно будет запускать явно?

«Чтобы не потерять уже запущенный запрос при повороте экрана, Chronos предоставляет возможность “именовать” запуски операций»
Предположим операция — это часть какой-то большой операции по обновлению инфы для пользователя. Как тогда быть с проблемой устаревания инфы? (Часть данных прогрузили с прошлого раза, потом приложение ушло в фон на недельку, вернулось в foreground и получается часть данных старая, а часть новая)

«Есть возможность отмены операций»
Круто, что есть возможность interrupt'ить поток загрузки. Насколько помню, в известном robospice cancel поток не interrupt'ит.
«у AccountManager'а есть метод setUserData(final Account account, final String key, final String value) который по сути предоставляет нам возможность хранения любой информации в формате key-value. Это то, о чем я говорил немного выше. Это еще одна плюшка в довесок к остальным — возможность хранить профиль пользователя без необходимости создания/использования внутренних хранилищ»

Как клиентскому приложению затем получить доступ к профилю? Эти методы доступны из приложения с аутентификатором — да. Но пусть клиентское приложение имеет другую подпись, вызовы getUserData() кинут exception (из документации — «This method requires the caller <...> to have the same UID as the account's authenticator»). Как тогда клиентскому приложению получить эти данные?
Полезная штука — ставить трение контакту для перемещения объекта на платформе вместе с ней самой, не знал, спасибо!
Баги исправил и в полной версии теперь качественная графика. Теперь оба приложения бесплатные.
Похоже я один воспринял серьезность поста. Не столько опасны роботы (они пока не в каждом доме чтобы злоумышленникам их ломать), сколько приложения под мобильные, собирающие статистику. с помощью например приложения трекера gps его создатель спокойно получает информацию о перемещениях клиентов. учитывая количество таких бесплатных приложений — длч определения дошел ли ребенок в школу или где сейчас твой муж. учитывая что чтобы опубликовать такое приложение нужно только 15 баксов членский взнос гугл получаем отличное средство слежения и определения что никого ннет дома — можно красть и т.д
Недавно добавил в ДЕМО (версия 1.0.8) 4-ый уровень именно с нечетким ИИ — песчаный уровень с длинными змейками.
Сделал видео — демонстрацию полученного ИИ с нечеткой логикой, как и обещал:
YouTube
Демонстрацию ИИ с четкой логикой Вы можете посмотреть в моей старушке-игре:
Serpent's Madness для Windows (версию 1.95 я имел в виду в статье)
Сделал видео — демонстрацию полученного ИИ с нечеткой логикой, как и обещал:
YouTube
Демонстрацию ИИ с четкой логикой Вы можете посмотреть в моей старушке-игре:
Serpent's Madness для Windows (версию 1.95 я имел в виду в статье)
divanikus, здесь есть определенные умозаключения в основе. Далее, как сказал braindamaged, нечеткая логика оперирует непрерывными функциями и далее по тексту.
Может быть Вас удивляет отсутствие нейронной сети? Нечеткую логику, как я слышал, часто применяют с нейронной сетью, чего я сознательно не стал делать. Игре достаточно этого. Следующим шагом я хотел сделать атакующий алгоритм опять же с нечеткой логикой. Но он гораздо сложнее и не знаю, когда возьмусь за его реализацию и возьмусь ли.
asktomsk, Elegar, согласен, что хотелось бы посмотреть алгоритм в действии, но у меня просто не было времени, да и я в принципе не знал, насколько будет интересно смотреть на него в действии (подумал, что картинок достаточно). Ссылки на скачивание и обзор я привел, чтобы была понятна игра, в которой применяется ИИ, ведь идея необычная. Подумаю, что можно сделать. Возможно, и вправду, небольшой видеоролик на youtube.
braindamaged, спасибо за поддержку.
ZimM, да-да, я думал, что кнопки нарисовать и змеек — это проще простого :) Эх, а я думал, что во мне художник проснулся…

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Registered
Activity