• Вещи, которые я бы хотел знать до начала разработки собственной игры
    +3
    Согласен с большинством советов, но некоторые моменты спорные:
    Постарайтесь определить как можно больше в коде, а не полагаться на Unity Editor или предварительную сериализацию. Когда вам понадобится что-то рефакторить, наличие множества вещей, соединенных в единые YAML-файлы, добавит вам проблем. Используйте редактор, чтобы быстро найти хороший набор значений в рантайме, затем впишите его в код и удалите [SerializeField].

    Автор предалагает хардкодить какие-то значения, которые можно задать в эдиторе? Или выность в какие-то отдельные файлы настроек? А ссылки как — через GetComponent<>? )

    Избегайте 2D физики Unity даже для 2D-игр. Постройте ее с 3D, и вы получите многопотоковый Nvidia Physx вместо менее производительного Box2D.

    Если проект для мобил — сдается мне, что 2D будет все таки профитнее. Хотя лучше проверить и убедиться.

    Используйте редактор кода, который показывает ссылки на классы, переменные и методы. Например, Visual Studio Code — он великолепен.

    Попробуй Rider — он еще великолепнее. )
  • Unity3D: Автоматический агрегатор скриптов-менеджеров
    +3
    Почти DI :)

    Лучше в Dictionary ключи не string, а тип (T). При таком подходе поиск зависимостей по проекту делать проще, чем по стрингам.
  • Как подсидеть тимлида
    +2
    Мне кажется вы путает тимлида и техлида.
  • Как я свой первый ИИ писал
    +2
    Прикольно, у меня есть подобная наработка AI, только более продвинутая (NPC лазит, спрыгивает, запрыгивает, земля любой геометрии из SpriteShapes, на движущихся платформах даже почти ездит (малость доделать надо :)), лестницы вот только вертикальные обычные). Тоже есть эммоции (обычный, агрессивный, паника, ...) и есть список потребностей (жажда, голод, нужда в деньгах и тп) и точек интереса (есть, пить, в туалет, работать, ...), в зависимости от этого перс принимает решение, идет в нужное место и делает что надо. Сейчас правда тоже подзабросил. Может гифку запосчу позже.

    Чем не устроил A*? Отлично подходит для такого решения, простой и эффективный, не понял почему начали свой велосипед изобретать.
  • Работа с внешними ресурсами в Unity3D
    0
    Статья супер, есть даже ответ на вопрос который у меня возник в процессе чтения, раз уж используется C# 7+ (ответ в последнем примечании). Только дело не в любви, если мне не изменяет память Coroutines выполняются в Main Thread, в отличие от async/await, для закачки наверно лучше все таки задействовать другие потоки.
  • Топ-10 фильмов про ИТ
    +1
    Рекомендую еще Micro Man (про Клайва Синклера).
    Из фантастики еще можно упомянуть 13 этаж. Ну и Хакеры — тоже про IT.
  • Как я взломал Steam. Дважды
    +1
    Ясно, спасибо за предупреждение.
  • Как я взломал Steam. Дважды
    0
    Не знаете, а у Сбербанка есть такая программа — платить за найденные уязвимости? Я нашел в Сбербанк Онлайн потенциальную уязвимость.
  • Job system и поиск пути
    0
    Я не собирался спорить с вами, просто высказал мысли о том что можно улучшить, которые появились после прочтения статьи.

    5) Сортировка списка не нужна, это будет лишняя трата ресурсов, достаточно просто поиска минимума (это намного быстрее). Без неё (то что у вас сейчас) — это другой алгоритм, не A* (поиск в ширину по моему называется, точно не помню сейчас).

    6) Я не имел в виду использовать юнитевский, я имел в виду написать свой NavMesh.
  • Job system и поиск пути
    0
    Немного покритикую:

    1) Наследование карты (Map) от препятствия (Obstacle) — лучше сделать им общего абстрактного предка. У Obstacle еще добавляется функционал и он весь будет унаследован картой.

    2) С точки зрения оптимизации каждый кадр в карте пробегать и проверять препятствия — не сдвинулись ли они и не поменяли ли размер — плохое решение. У большинства препятствий 99,9% времени размер и позиция не будут меняться. Лучше чтобы они при изменении позиции или размера уведомлять карту что было изменение (ставить флаг requireRebuild в True или если не хочется чтобы Obstacle знал о Map то завести статичный флаг, скажем, dirty — и его устанавливать при изменении позиции или размера, а из карты его чекать). Будет работать намного быстрее.

    3) При изменении положений или размера препятствий обычно всю карту не перестраивают, только часть.

    4) «Дело в том, что в unity для указания позиции объекта в пространстве используется простой float который весьма неточен и может быть дробным или отрицательным числом, поэтому его будет сложно использовать для реализации поиска пути на карте. Координаты же выполнены в виде четкого int который всегда будет положительным и с которым работать намного проще при поиске соседних точек.» — не согласен. float-а вполне достаточно, просто чем делать карту и брать из неё точки лучше задать возможные переходы для каждой точки (и можно посчитать их стоимость — чтобы не тратить время в риалтайме), тогда все будет работать нормально, немного больше расход памяти, но работать будет быстрее. A* по большому счету без разницы — сетка это или просто графы, это алгоритм поиска по графам, а сетка лишь частный случай.

    5) Реализация A* ваша немного странная — не понял как идет выборка из открытого списка. Такое ощущение что не лучшее совпадение берется, а всегда первый попавшийся. Вы всегда берете первый элемент массива openList[0] без учета эвристики. Или он у вас где-то сортируется? Не очень понял этот момент.

    6) Для этого примера лучше бы подошел NavMesh — гораздо меньше узлов пришлось бы обработать, работало бы быстрее. Хотя если просто для примера — то нормально.

    7) По самой Job system — инфы мало, хотя статья о нем.

    PS: при изменении размеров и позиции препятствий боты глючат.
  • Где мои деньги, чувак: о чем молчит Steam
    0
    Отличный цикл статей, читал их на dtf, очень жду оставшиеся две статьи.
  • Создание «искусственной жизни» на компьютере
    0
    Обожаю подобные статьи.

    А видео надо было озвучивать голосом Дроздова.
  • В конфиге Aliens: Colonial Marines нашли опечатку, из-за которой четыре года глючил игровой ИИ
    0
    Если XML правится ручками (это же не сериализатор такую ошибку допустил), то лучше делать проверки и выдавать ошибки или предупреждения. Действительно, больше похоже на PR-ход.
  • Алгоритм поиска пути A* в воксельной 3d игре на Unity
    0
    Да, я знаю — у меня AI для платформера (вернее лабиринта) сча в разработке, своя реализация A*, все бегают/прыгают/лазают, просто у меня идет подсчет переходов между нодами (не клетки, так генерятся), там везде разные длины, я удивился что находит такой путь, но длина по клеткам в общем то это объясняет.
  • Алгоритм поиска пути A* в воксельной 3d игре на Unity
    0
    Да, согласен, был не прав — по клеткам столько же, уже прочитал ваш коммент выше. Если брать длину желтой ломаной — то так больше получается.
  • Алгоритм поиска пути A* в воксельной 3d игре на Unity
    0
    С Weight 5 и более и Octile или Manhattan получилось несколько похожее получить — но это не правильно при диагональных переходах, Manhattan точно нельзя (Octile не знаю как работает эвристика).

    Скажите уже параметры, не томите.
  • Алгоритм поиска пути A* в воксельной 3d игре на Unity
    0
    Да не а-стар это, картинка не такая должна быть. :)

    qiao.github.io/PathFinding.js/visual — здесь эмулируете? Если нет — дайте ссылку где именно, мне прямо интересно посмотреть как A* дает такую картинку.

    A* будет давать другую, вот такую:


    То что на вашем скрине — судя по всему Trace.
  • Алгоритм поиска пути A* в воксельной 3d игре на Unity
    0
    Это не A star, путь явно не оптимальный. Либо подкручено не правильно.

    Для квадратов давно разработаны эвристики, для только вертикаль/горизонталь — Манхэттен, для плюс диагоналей — Чебышев.
    https://neerc.ifmo.ru/wiki/index.php?title=Алгоритм_A*
  • Алгоритм поиска пути A* в воксельной 3d игре на Unity
    0
    // закрываем точку
    closedPoints.Add(openPoints[0]);
    // открываем новые точки и удаляем закрытую
    openPoints = ClosePoint(0, openPoints, closedPoints, worldData, pfType, targetPoint);


    Это обычно делается в основном цикле, зачем вы вынесли это отдельно для первой точки?

    По оптимизации не очень понятно, слишком кратко написали. Можете попонятнее расписать, это самая интересная часть статьи.

    Кстате у вас много открытых пространств, Jump Point Search искал бы быстрее.
  • Генератор случайных двумерных пещер
    0
    У Sebastian Lague описан способ сглаживания, по моему в этом видео, если нет — посмотри в других по этой же теме.
    www.youtube.com/watch?v=v7yyZZjF1z4&frags=pl%2Cwn
  • Что умеют системы ИИ в медицине?
    –1
    Читал что уже сейчас нейросети читают и распознают рентгеновские снимки лучше врачей. Было бы здорово сделать какое-то централизованное API для всех медкарт и исследований граждан, чтобы можно было натравить нейросеть (а лучше разные нейросети от разных команд) и она изучала снимки пациентов, истории болезни, ставила диагнозы (предварительные) и рекомендовала сдачу доп. анализов и возможно даже лечение (естественно под контролем врача).
    Думаю такая нейросеть могла бы много что выявить на начальной стадии, что ускользает от глаза врача.
    В случае успеха услуги обученной сети можно было бы даже экспортировать в другие страны.
  • История создания мобильного приложения для детей позволяющего зарабатывать деньги своим умом. Продолжение
    +1
    > не использовал SO раньше (это настолько круто),
    А что такое SO?
  • Готовимся к публикации игры в Xiaomi Mi Game Center (Unity, C#)
    0
    Опубликовал, долго докапывались, то рекламу их надо нативную прикрутить китайскую вместо Unity Ad (в юнити адс мол наполнения нет), то перевод не тот (надо упрощенный а у нас традиционный китайский), то на какой-то их девайсе разрешение экрана 2:1 и по бокам черные прямоугольники. После того как несколько раз отклонили наконец приняли, времени и нервов потерял с ними (их реклама еще в бета версии и работает через раз, все на китайском, короче тот еще квест).
    Доход 3-5 юаней в день. Приложение просто теряется в миллионе других, и из полутора миллиарда китайцев его находят лишь десятки.
    В общем, пока так себе стор, либо нужен паблишер китайский который не даст затеряться в сторе.
  • Новый тренд на IT-собеседованиях: целые дни неоплачиваемой домашней работы
    +12
    Тестовые задания есть смысл давать студентам, без опыта. Если человек уже работал — лучше посмотреть на результаты его работы, спросить в каком проекте он участвовал и что именно прокатывал, попросить показать его код (если из коммерческого проекта нельзя — пусть покажет из какого-то своего, хотя показать один класс из проекта большой проблемы нет мне кажется).

    А давать тестовое задание — если оно мелкое — то скорее всего довольно простое. Если крупное — человек потратит много времени, которое стоит денег, такое надо оплачивать. Как верно уже написали выше — есть испытательный срок.
  • Чем бизнесу и пользователям грозит борьба РКН и Telegram? Мнения экспертов
    0
    developer.cloud.unity3d.com у меня не открывается, проверьте, пожалуйста, кто-нибудь со своего компа. Судя по всему по той же причине.
  • Ошибки новичка Unity, испытанные на собственной шкуре
    +1
    От проекта зависит. У нас в одном проекте локализации всех текстов и квестов 1 мб (русский и основные европейские языки). Причем менеджер локализаций написан 1 раз давно и кочует из проекта в проект.
  • Ошибки новичка Unity, испытанные на собственной шкуре
    +2
    Зачем хранить в памяти все текста на всех языках в рантайме? Проще подгружать 1 язык, при смене — подгружать следующий. В примерах Unity есть урок как сделать локализацию.
  • Использование Singleton в Unity3D
    0
    Singleton это не агрегирующий класс, это класс экземпляр которого может быть только один. Ну и средство быстрого глобального доступа к этому экземпляру (public static field или property).
  • Использование Singleton в Unity3D
    +1
    Проще сделать базовый Singleton класс, например как здесь:
    brightreasongames.com/the-singleton-post

    Потом наследовать примерно так:
    public class SomeSingleton : SingletonBehaviour<SomeSingleton>

  • Социнжиниринг в военной пропаганде
    +10
    Замполит врет. В немецком плену вас ждут шнапс и горячие сардельки.
  • Майнинг-фермам в России дадут скидку на электроэнергию
    +9
    В прошлый раз за нанотехнологии брались, всяких роботов и беспилотников пробовали делать (все помнят эпический видос как робот едет на квадрацикле, даже Пу стыдно стало), сейчас вот до блокчейнов добрались.

    А начинали с нацпроектов… Доступное жилье, сельское хозяйство…

    За что не возьмутся — получается как всегда. Не надо быть Нострадамусом чтобы предсказать чем все это кончится (попилом бабла и пиаром).
  • Игра в Бога, или как я «Волчий остров» писал
    +1
    Обожаю подобные статьи.

    Помню после публикации вот этой в 10-м году: geektimes.ru/post/90571 тоже стал делать подобное…

    У меня не было клеток, было свободное поле. Были деревья (ну или трава, не знаю как назвать верно), которые росли со временем, и раскидывали семена в заданном радиусе. И были существа (по аналогии с вдохновившей меня статьей назывались флексы), которые жрали травку, ну и сделал так же вероятность каннибализма в случае голода (опять же под впечатлением статьи). Размножение, смерть от старости — все это тоже было. ДНК как таковой не было, но в потомстве учитывалась скорость родителей, радиус зрения, уровень хищничества и тп параметры.

    ИИ был примерно такой — были потребность есть, потребность двигаться (чтобы шарились по карте), потребность размножется. Все это складывалось и по вероятности выбиралось действие. (Например если только поел — то потребность есть = 0, со временем повышается, если давно не размножался — то потребность размножаться =10, потребность двигаться всегда была = 5, генерится число от 0 до 15, если 0-10 — то выбираем размножаться, если 10-15 — то шаримся по карте). В случае если перс хищник надо было еще догнать жертву. Был стек действий, чтобы можно было запланировать несколько действий и выполнять их, если еще актуальны. Хотя сейчас я бы делал это на основе GOAP (очень похоже на то что я реализовал тогда, только GOAP круче).

    Делал огонь и тп, чтобы персы теряли энергию, после этого они они запоминали идентификатор объекта и те которые обожглись уже не лезли в огонь. Могли при встрече обмениваться идентификаторами опасностей и ништяков, как будто язык такой у них был (один обжегся, рассказал при встрече другому — другой уже не полезет в огонь).

    Баланс — да, сложно было добиться устойчивой системы. И быстродействие, у меня было все в риалтайме и без клеток (еще и в 3Д, хотя и плоскими спрайтами :)), через некоторое время начинало жутко тормозить. Ну и времени все это отнимало кучу.

    Сча прямо ностальгия, после прочтения статьи.
  • Лицензирование музыки для инди-разработчиков
    0
    Мои 5 копеек:
    https://licensing.jamendo.com/en/catalog/genres/rock — нужна Large Licence — 99 евров (дороговато)
    https://audiojungle.net — тут музыки дешевле

    Плюс этих сайтов — не надо списываться, готовить договор и тп, просто отсортировал по жанрам, послушал, выбрал и купил.
  • Как стать тимлидом и не взорваться
    +1
    Lines досовская по моему.
  • Зачем нашим генам нас убивать? Эволюционное объяснение
    +1
    Представьте Путина с бессмертием…
  • Обзор Xiaomi Mi6. Настоящий флагман за полцены, и при этом не совсем лопата
    –1
    Вот толковый селлер, если попросить его не писать в декларации название телефона — он не пишет (вообще пишет просто электроника), плюс шлет с европейского склада. Мне телефон пришел дней 10 назад.
  • Unity3D tips and tricks 2
    0
    Необходим 4K монитор, или можно на ноуте с более низким разрешением получить? Если второе — то отлично, значит еще один способ получения скринов есть.
  • Unity3D tips and tricks 2
    0
    А как к примеру iPad Pro (12.9 Inch): 2732 x 2048 получить? У меня разрешение на экране ниже, вероятно вашим способом не получится. Или можно как-то?
  • Unity3D tips and tricks 2
    0
    Да, можно конечно.
  • Unity3D tips and tricks 2
    0
    Да я знаю что есть альтернативы, сам пересмотрел кучу — пробовали PlayFab и другие, выбрали brainCloud в итоге. Просто PlayFab (да и brainCloud) не удобны для такой задачи что я описал. Они заточены на то, чтобы хранить данные каждого пользователя, я же не буду по профилям лазить и искать у кого что-то сбойнуло. Для этого я сделал то что описал выше.