• Как справляться с зависимыми задачами?

    @d-stream
    Готовые решения - не подаю, но...
    Возможно это вначале покажется чутка избыточным, но по размышлению - нет:

    master == прод
    dev == ветка стабильной разработки, где живут более-менее целостные фичи
    feature_xx == опять же целостная, самостоятельная фича, привносящая осмысленный функционал и состоящая возможно из множества задач

    фичи отращиваются и возвращаются в ветку dev и их можно даже на уровне ветки протестировать
    в какой-то момент от ветки dev отращивается ветка release (по-сути релиз-кандидат) и потом по выпуску (релизу) вливается в master и dev
    go to 1

    при таком подходе в dev живёт достаточно стабильное решение, а ветках feature - конкретные фичи, которые к моменту влития в dev - в общем-то тоже стабильны и функциональны.

    ну и собственно релизный цикл получает некую "асинхронность" относительно цикла разработки:
    - захотел релиз-менеджер к юбилею фирмы выпустить релиз - пожалуйста - в dev есть пачка фич
    - накопилось осмысленное кол-во фич - вперёд в релиз
    - оттестирована конкретная ожидаемая фича - в релиз (ну и попутно менее значимые)

    сорри за слегка вольный пересказ по-сути большинства моделей ветвления гита, гитлаба, атлассиана и др.)
    Ответ написан
    Комментировать
  • Можно ли открыть готовый билд игры в Unity?

    GavriKos
    @GavriKos Куратор тега Unity
    Нет
    Ответ написан
    Комментировать
  • Entity Component System + ООП подход?

    @MarkusD
    все время мелю чепуху :)
    ECS является подходом декомпозиции не только логики и данных, но и подходом отказа от агрегации и наследования в пользу косвенной композиции. Явной композиции в ECS тоже не предусматривается, а косвенная композиция не намекает на связность или структурированность данных. Косвенная композиция обозначает только наличие каких либо данных по некоторым косвенным признакам.
    Более того, в рамках ECS сторонний код и с данными нормально работать не способен. Для стороннего кода в ECS предусматривается уровень абстракции для чтения и записи данных.

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

    К примеру есть сущность игрок с набором компонентов наследованная от Entity,

    Нет, это сразу будет не ECS. Сущность игрок - это и есть entity, являющаяся эфемерной единицей в мире ECS.
    И методов у entity быть не может. Вся логика сущностей распределена по системам и сильно зависит от имеющихся у сущности компонент.
    Более того. Если ты говоришь о том, что в твоем мире может существовать сущность с характеристикой игрока, таких сущностей в твоем мире может быть до 100% всего ECS мира. Если игрок у тебя должен быть представлен единичной сущностью, значит это уже не сущность, а внешний объект, по ошибке введенный в ECS мир.

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

    Про состояния, пустые компоненты добавлять удалять в entity как флаги что сущность в каком либо состоянии, и отдельные системы для обработки каждого состояния это нормальный подход ?!

    Битовые компоненты - это рядовая оптимизация для хранения пустых компонент. Да, так делают и обеспечивают правильную работу систем, чтобы фильтры компонент одинаково обрабатывали как полноразмерные компоненты, так и битовые тоже.
    Ответ написан
  • Стоит ли уходить из мобильной разработки в геймдев?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    10 годиков в геймдеве. Переработок можно избежать, в целом - но это не просто, и авральные ситуации будут 100%. + да, это должна быть увлеченность обязательно - делать продукт, а не задачи.
    Ответ написан
    1 комментарий
  • Как решить данную олимпиадную задачу?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Это задача на придумывание паттерна и доказывание его. Тут надо рисовать всякие случаи на бумажке и обобщать.

    Во-первых, когда встает вопрос о можно-нельзя ли какими-то операциями получить что-то, первая мысль должна быть - придумать инвариант. Какое-то свойство, которое не меняется при применении операции. С опытом наберетесь идей для инвариантов. Тут сразу приходит в голову такой: Обозначим цвета цифрами от 0 до 2. Тогда при любом перекрашивании сумма всех чисел по модулю 3 не меняется. Если столбы одинаковые - сами числа не меняются, если 01 перекрасить в 22, 02 в 11 и 12 в 00, то сумма остается с таким же остатком от деления на 3.

    Отсюда можно сразу сделать вывод, что при N делящемся на 3 ответа нет. Потому что в конце мы должны получить все цвета одинаковые, а значит сумма будет 0, N или 2N - делится на N. Раз N делится на 3, то и итоговая сумма дает остаток 0 (по модулю 3). Но изначальная раскраска может иметь любой остаток (например, 00..0001). Значит решения для таких N нет.

    Далее, можно легко придумать, как "удваивать" решение. Пусть мы умеем получать какой-то N, то можно получить алгоритм для 2N. Сначала перекрашиваем первую половину по известному плану. Потом вторую половину. Потом попарно столбы из двух половин. Надеюсь, очевидно, почему это работает?

    Так можно получить ответ для 2,4,8,16, но этого мало.

    Следующая мысль, как можно построить универсальный план покраски - это воспользоваться тем, что если мы сделаем все столбы одинаковыми, то все последующие действия ничего не испортят. Т.е. можно взять конкретную раскраску столбов, составить план для нее. Потом взять следующий вариант входных данных, прогнать его через уже составленный план. Если результат не одноцветный - дополнить план так чтобы раскрасить все в один цвет и для этого варианта изначальной раскраски. Повторить со всеми возможными входными данными. Использовать эту идею для всех вариантов N раскрасок слишком медленно (их же 3^N). Вернемся к ней попозже.

    Следующая идея должна быть - раз для существования решения важно неделимость на 3, то возможно мы сможем к группе одинаковых столбов добавить 3 столба?

    После разбора нескольких случаев на бумаге я понял, что надо отдельно рассматривать случаи N%3=1 и N%3=2.

    Рассмотрим первый случай. У нас есть 3k столбов цвета А, и в конце еще 4 столба - AXYC (один из N и 3 новых). Задача - получить в конце 4 одинаковых цвета. У нас уже есть решение для N=4 в примере. Просто примените его к 4-м последним столбцам. Теперь у нас есть ...AAAZZZZ. Если A=Z, то все наши операции ничего не сделают. Рассмотрим только случай A!=Z. Красим A+Z, получаем AAYYZ..Z на конце Красим 2 раза A+Y. Т.е. за 3 операции мы перекрасили 3 последние A в Z. Повторяем операцию, пока все A не перекрасим (их же 3k, напоминаю).

    Теперь случай N=3k+2. У нас есть 3k A, и в конце AAXYC. Если у вас есть решение для 5, то получаете на конце 5 Z и аналогично предыдущему случаю перекрашиваете 3 последних A в цвет последних столбов.

    Т.е. отдельно рассматриваете случай разных остатков N%3. Потом решаете задачу для N=4 или 5 первых столбцов, потом добавляете по 3 столба: решаете задачу для 4/5 последних столбов и итеративно перекрашиваете по 3 столба из предыдущих.

    Это решение потребует максимум N/3*(F(5)+N) шагов, где F(5) - сколько нужно операций для решения N=5.

    Теперь решение для N=5. Тут и надо будет воспользоваться наблюдением о дополнении плана для разных входных данных. Вот есть 5 столбов. Покрасим 1+2 и 3+4. Теперь у нас есть AABBC. Возможно какие-то цвета одинаковые. Но сначала допустим, что они все три разные. Красим попарно A+B(1+3 и 2+4). Все. Но что, если B=C, B!=A? У нас было AABBB. Мы покрасили 1+3 и 2+4 - получили ССССA. Красим 4+5 - CCCBB. Теперь, как раньше, перекрасим 3С в B: 3+4 (CCAAB), 1+3(BCBAB), 2+4 (BBBBB).
    Теперь надо рассмотреть случай B=A, C!=A: AAAAC. Надо аккуратно повторить все операции выше - получим BBBBB. План для этого случая работает, ничего дописывать не надо. Остался случай A=C, C!=B. Т.е. дано AABBA. Применяем шаги выше и получим (перепроверьте!) AAAAA.

    Т.е весь план для N=5 1+2, 3+4, 1+3, 2+4, 4+5, 3+4, 1+3, 2+4.

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

    Его можно соптимизировать по количеству операций. В начале я привел простой вариант удвоения. который быстро получает план для степеней двойки. Ниже я привел как имея 2 группы одноцветных столбов, если одна группа состоит из троек, перекрасить все в один цвет. Воспользуемся этими двумя приемами.

    Возьмите максимальную степень двойки, помещающуюся в N. Пусть это k (2k > N, k <= N). Примените план для первых k. потом для последних k. Итого вы получите N-k столбов одного цвета и k столбов (возможно) другого цвета в конце. Если N-k делиться на 3 то, по известному плану "перекрашивания по тройкам" перекрасьте первые N-k в цвет последних k. Если же N-k не делиться на 3, то покрасьте попарно столбы цвета первых N-k и цвета вторых N-k. Потом останутся какие-то столбы в конце другого цвета, но их количество точно будет делиться на 3 (доказательство этого факта придумайте сами. Рассмотрите какие могут быть остатки от деления на 3 у k и N-k). Раз у нас группа другого цвета состоящая из троек, то мы умеем ее перекрашивать.

    Этот вариант будет требовать не квадратичное, а O(n log n) количество операций.
    Ответ написан
    Комментировать
  • Error CS1061 и CS0120 unity как исправить ошибку?

    GavriKos
    @GavriKos Куратор тега Unity
    1. Прочитайте текст ошибок. ПОстарайтесь их осознать
    2. Почитайте АПИ юнити
    3. Почитайте учебник по сишарпу - долго и вдумчиво
    4. Погуглите сами коды ошибок - они мало отношения имеют к юнити.
    Ответ написан
  • Как сделать описание функциям внутри самого юнити?

    freeExec
    @freeExec
    Участник OpenStreetMap
    [Tooltip("blabla")]
    public int npumep;
    Ответ написан
    Комментировать
  • Как узнать громкость музыки(звука) в Unity?

    GavriKos
    @GavriKos Куратор тега Unity
    Если вы о пульсации - то для этого юнити нафиг не нужон и будет тут выступать только визуализатором.
    По факту - вам нужно получить АХ - амплитудную характеристику. Читаете файл, декодируете - уверен в сишарпе для всего этого уже есть инструменты - и просто получаете массив байт от 0 до 256. Вот вам и "громкость звука".

    P.S. А если нужна не только пульсация, а еще и вот та волна вокруг - то тут скорее всего уже частотная характеристика - быстрое преобразование Фурье и все такое. Опять таки - к юнити отношения не имеет.
    Ответ написан
    Комментировать
  • Стоит ли в 2020 учиться созданию игровых движков?

    DevMan
    @DevMan
    пика? рили?
    с подобной логикой: пик был достигнут лет 20–30 назад.

    только всегда находились люди, с этим не согласные - и воплощали свои идеи: кто в коде, кто в железе.
    Ответ написан
    1 комментарий
  • Предмет розового цвета.Почему?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Розовый цвет - это и значит, что твой шейдер не работает, в нём ошибка.
    Ответ написан
    Комментировать
  • Destroy не работает. Почему так?

    GavriKos
    @GavriKos Куратор тега Unity
    Ну например потому что не выполняется if. Отладчик в зубы и вперед
    Ответ написан
    6 комментариев
  • Как получить несколько коллайдеров на объекте?

    GavriKos
    @GavriKos Куратор тега Unity
    https://docs.unity3d.com/ScriptReference/Component...

    Совсем гуглить разучились
    Ответ написан
    Комментировать
  • Как начать разрабатывать игры или написать свой игровой движок?

    @Interface
    Как начать разрабатывать игры или написать свой игровой движок?

    Создайте папку в любом удобном для вас месте на компьютере с названием "мой игровой" движок, по желанию можно еще туда положить readme файлик. Готово - вы начали писать движок. Теперь нужно двигаться к его завершению. По мере движения у вас появится множество новых более конкретных вопросов, на которые уже проще будет найти конкретный ответ.

    Несложно представить игровой движок для написания которого не нужно знать физику абсолютно. (движок для крестиков-ноликов, кроссвордов, судоку, текстовых квестов или уже серьезный движок для игр в стиле Diablo, Fallout (1-2-T) и т.д.).

    Сложнее представить движок без математики, как в прочем и все программирование. Однако, часто бывает достаточно классов 5-8 математики чтобы писать что-то вполне серьезное, если оно не требует этой математики. Простенький платформер или скролл шутер не потребует от вас знания тригонометрии, например.

    Довольно ожидаемо, что если под своим движком вы подразумеваете продукт уровня UE, Unity или чего-то отдаленно сопоставимого, или даже простейший 3д движок написанный с нуля, то остается пожелать вам удачи.

    Я бы советовал начать с практики, то есть начать его постепенно писать, понимая, что через месяц/год все придется выкинуть и (опционально) начать с нуля. А там уже сформируются конкретные вопросы и теория будет ложиться лучше на фундамент проб и ошибок.
    Ответ написан
    Комментировать
  • Ошибка Unity.2019.2.13f1? Рандомайзер?

    GavriKos
    @GavriKos Куратор тега Unity
    Самое время учить сишарп и учиться читать ошибки, а не бездумно копипастить код.
    Есть два класса Random. Один - в UnityEngine, второй в System. Вам надо указать ТОЧНО какой использовать. Или using-ом, или прямо в месте использования дописать неймспейс.
    Собсно ошибка об этом и говорит.
    Ответ написан
    2 комментария
  • Raycast unity2D, не находит объект, что делать?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    давайте попробуем по полочкам. систематизировать все ваши прошлые вопросы и попытки.
    я б советовал с нуля сделать,чтоб было "чисто и ясно" и без оглядки на прошлые попытки и путаницу.

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

    теперь к мелочам.
    • найдите документацию или примеры на форуме про RaycastHit hit;
      там внутри hit - куча информации во что вы лучом попали и по хороше добавить бы проверку что попали именно в нужный объект, мало ли что там еще слоем или тегом будет помечено случайно.
    • саму проверку "скастовать луч" - вам бы делать только по клику/Down/Up мышкой (смотрите в сторону Input)
    • для работы с 2D колайдерами есть отдельные реикасты Physics2D. чтоб избавится от костылей с 3d коллайдерами))

    Ответ написан
    1 комментарий
  • Что выбрать, Unity или .NET?

    GavriKos
    @GavriKos Куратор тега Unity
    Странный вопрос.
    LINQ - это часть .net, если я не ошибаюсь.
    Изучая Unity вы волей-неволей БАЗОВО выучите .net. Ну никак без этого. Да и сам .net - всего лишь фреймворк. Учить надо то, ДЛЯ ЧЕГО он используется - и вот тут уже или юнити, или бекенд, или формочки под винду, или еще что то.

    Про геймдев добавлю - порог вхождения ВЫСОКИЙ - джунов много, они никому не нужны.
    Ответ написан
    5 комментариев
  • Как сделать так чтоб текст в юнити 2D увеличился на 1 каждую секунду?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    прочитайте в документации про
    Update
    также найдите про
    Time.deltaTime
    UI.Text (или любой другой текст куда собираете вписывать)

    а там создать таимер и проставлять его значение в текстовое поле - должны справиться.
    а если не справитесь - еще раз пробуйте или бросайте))
    Ответ написан
    Комментировать
  • Как правильно настроить рекламу в игре на Unity?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Заказчик должен в админке юнити создать проект и добавить вашего пользователя в него. Деньги идут не на пользователя, а на проект.

    Насчет "лучше чем UnityAds" - это вы должны спрашивать у вашего заказчика. Вариантов много.
    Ответ написан
    Комментировать
  • Можно ли в unity заморозить изменение размера объекта?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    если у родителя будет скэил по нулям...то вы там хоть как изголяйтесь..) дочерный вы никак не "подстроите")
    скэил дочерних считается от родителя) а ноль на что не умножай..ноль будет))

    подумайте тогда вообще над иерархией объектов.
    он точно должен быть у вас дочерним??
    может его рядом "положить" и только позицию и/или поворот привязать к другому объекту (скриптом)??
    Ответ написан
    1 комментарий
  • Не могу понять почему не работает код?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Вы или чего то не дописали, или что, но.
    Сразу есть очевидная проблема - newTimer никогда не будет равен нулю.
    Вообще строгое сравнение float - это плохо. Надо сраванивать по модулю с учетом погрешности.
    Но конкретно в вашем случае ошибка больше логическая.

    Допусти newTimer = 1 секунда. Time.deltaTime - величина непостоянная - вероятность что за например 10 ферймов (а апдейт вызывается каждый фрейм) сумма deltaTime будет ИМЕННО СТРОГО одна секунда - ну практически ноль.

    Так что вам нужно нестрогое условие типа newTimer <= 0;
    Ответ написан
    Комментировать