У вас может быть совершенно гениальный 2D художник в распоряжении. Никакое 3D ни за какие деньги этого не заменяет. Вот это, например, наш за один день нарисовал:
Куча способов, работающих с 5-6 месяцев, проверены на нашем.
1) Ребёнок не успокаивается на руках у папы.
2) Ребёнок что-то ищет. Если постарше — в возрасте месяцев 8 — посматривает в сторону кухни.
3) Наконец третий, для людей лишённых наблюдательности — показать бутылочку. Но если он действительно голоден, то разводить смесь вы будете после этого под аккомпонимент серены, пока не отдадите ему бутылку.
>> Пытался сделать несколько таких вариантов, пока хорошего и удобного не получилось, но продолжаю поиски в фоновом режиме.
Для Юнити не так критично если вы не используете DestroyInstantly и рейтрейсинг после изменений в дереве. Потому что она всё равно дерево отображения перестраивает один раз за кадр. А вот для Флэши, которая перестроение всего дерева делала после каждого SwitchDepth это было огого как критично.
Моё решение было такое — благодаря этим вот массивам, которые я описал выше легко искать ближайший элемент, который ниже, и ближайший элемент, который выше. Я вставляя новый элемент искал место в существующей сортировке, если обнаруживался конфликт, когда первый элемент который выше вставляемого оказывался ниже последнего элемента который ниже, я брал одну из этих элементов, например верхний и двигал по сортировке до максимально допустимого для него положения. После этого повторял и если всё ещё конфликт брал нижний и сдвигал его вниз. Обычно в одно-три движения конфликт разрешается.
Сам сильно зауважал дядей писавших Linq с их оптимизациями когда попытался дополнить его своими функциями, делающими то же самое, что и последовательность из нескольких коробочных команд. К сожалению забыть о нём придётся по более банальной причине — некоторые его функции не работают на iOS. А учитывая соотношение доходов от iOS и Android в юнитёвых проектах это смертный приговор.
Предложенная вами сортировка вытянутых убийственно проста и одновременно с тем убийственно медленная. Можете затестить сколько сравнений она у вас сделает имея в кадре 300 объектов, например.
Гораздо более шустрое решение ИМХО можно получить сохраняя промежуточные данные между кадрами и меняя сортировку элементов только тогда, когда один из них меняет положение. Так можно ещё одного эффекта добиться, иногда полезного — можно сделать пересортировку минимальным количеством перестановок. Для этого вам нужно хранить кроме положения каждого элемента по каждой из двух координат и размеров ещё два List<List> вдоль каждой из координат. В первый вы записываете все элементы, которые в этой целочисленной координате начинаются вдоль данной оси, а во второй все элементы, которые в этой координате заканчиваются.
Имея такую структуру данных вы в первый раз отсортируете элементы очень быстро, а при перемещении одного из элементов сможете делать изменение в минимальное количество перестановок. В изометрической игре, как правило, реально подвижных элементов не больше 10%.
Для разных стран ограничения разные. Если ты в Великобританию вывозишь — можешь быть хоть десять раз гражданским. А вот если ты вдруг в страны заражённые чумой непослушания вывозишь, типа России, тогда получи 185 лет тюрьмы.
Кстати, был сегодня в музее космонавтики и читал там документы об аресте Королёва и Глушко. Формальным поводом для ареста являлось то, что институт за 7 лет существования и несколько сот тысяч рублей построил только игрушечную ракету взлетающаю на 400 метров. Следователей НКВД тогда в 38-ом тоже поразил размах попилов и непродуктивного и кустарного расходования средств Королёвым Сергеем Павловичем.
Ну у меня не один пул, на самом деле а лист из нескольких. По одному пулу на префаб, но у меня графика не слишком странная поэтому в итоге получается немножко. В одном пуле лежать просто спрайты, во втором два спрайта один над другим (пригождается для зачёркнутых, грубо говоря, элементов. В третьем пуле анимации лежат, и так далее. Имя префаба используется как первый ключ.
А дальше получается что-то вроде:
var item = poolController.Get(PrefabName);
item.decorate(imgDescription);
Пришёл к такой схеме потому что оказалось, что переключится с атласа на атлас спрайту почти так же быстро. В первой версии заводил по бассейну под каждый атлас. Думаю с юнитами у вас проканает примерно такой же подход.
А ещё я реализовал полезную штуку — что когда если в кадре к пулингМенеджеру не обращались, он про запас создаёт по одному префаб, пока их сотня в резерве не накопится.
Используем в своём проекте такую же штуковину. Дело в том, что инстанцирование префаба операция раз в 30 медленнее, чем сменить UV координаты и сделать объект видимым. Поэтому я держу несколько пулов, в каждом лежат обезличенные префабы. Когда надо добавить на экран спрайт из этого атласа из пула вынимается объект, включается в дерево отображения и выставляются координатки для тестуры или какое ещё там поведение на инициализации нужно. Получается штук 5-6 разных бассейнов на игру.
На сцене у меня порой возникает по 2-3 сотни объектов почти одновременно и при этом я забыл про тормоза инстанцирования.
Внедрять в реальном проекте имеет смысл не сразу, а только после того, как этап прототипирования вообще прошёл и начинается борьба за живучесть.
Призывы думать логично выдают в вас полное непонимание потребностей «рассерженного среднего класса». На гиктаймсе такое неуместно и ваш минус девятый рейтинг наглядно это иллюстрирует.
Когда-то у меня был отличный критерий:
Если рейтинг Кинопоиска выше, чем IMDB на заметную величину, значит надо смотреть. Если выше больше чем на 0,5 — смотреть обязательно.
А сейчас в Яндексе кто-то научился машинлёрнинг и пытаются заменить им мозг. :( И все эти Теги как раз отсюда. Они с Тегами работать научились, а с полнотекстовой информацией, видимо, мозг ещё не дозрели. :(
Вазюкайте пользователя по экрану чтоб не дай бог не сорвался — стратегия очень большого количества игр. Такой подход очень хорошо виден в статистике игры — пользователь сбегает сломя голову как только у него появляется возможность подумать. Например у вас три уровня туториала, и при этом с третьего уровня до на 4-ый не переходит в два раза большая доля пользователей чем отваливаются раньше или позже.
Это проблему неожиданно хорошо решают при приёме в кланы разных игрушках. Увидел в прошлом году. В начале правил клана сделан опросник. А во второй части устава клана написано, при отправке анкеты исключите из него пункт 5-ый.
Всем живущим в мире весёлых пони кушающих радугу…
http://top.rbc.ru/economics/05/10/2015/561276949a7947600a3bcb48
Транс-тихоокеанское соглашение подписано, не смотря на то, что подписавшие его лидеры, например, не имеют права ещё 5 лет разглашать своему населению что именно они подписали.
Транс-атлантическое на подходе. Страшно торопятся, но всё равно могут не успеть, конечно.
Это соглашение в соответствии с Гражданским кодексом является публичной офертой. Акцепт оферты означает безоговорочное принятие всех ее условий без каких-либо изъятий или ограничений на условиях присоединения
Маленькая деталь, я могу ошибаться, это надо у юриста уточнять, но на сколько я помню, любые пункты договора противоречащие российскому законодательству считаются ничтожными с момента его подписания. То есть подписав эту офферту вы подписали только её законные пункты.
Впрочем и без юридических уточнений понятно…
В идеальном сферическом мире стоило бы ставить вопрос о профессиональном соответствии авторов отписки.
Так ведь и Талибы стали убивать американцев не сразу, а только когда это стало нужно. Так всегда бывает, если делаешь какую-нибудь хрень опираясь на кого попало, с кем и садиться то рядом за кустом не стоило.
1) Ребёнок не успокаивается на руках у папы.
2) Ребёнок что-то ищет. Если постарше — в возрасте месяцев 8 — посматривает в сторону кухни.
3) Наконец третий, для людей лишённых наблюдательности — показать бутылочку. Но если он действительно голоден, то разводить смесь вы будете после этого под аккомпонимент серены, пока не отдадите ему бутылку.
Для Юнити не так критично если вы не используете DestroyInstantly и рейтрейсинг после изменений в дереве. Потому что она всё равно дерево отображения перестраивает один раз за кадр. А вот для Флэши, которая перестроение всего дерева делала после каждого SwitchDepth это было огого как критично.
Моё решение было такое — благодаря этим вот массивам, которые я описал выше легко искать ближайший элемент, который ниже, и ближайший элемент, который выше. Я вставляя новый элемент искал место в существующей сортировке, если обнаруживался конфликт, когда первый элемент который выше вставляемого оказывался ниже последнего элемента который ниже, я брал одну из этих элементов, например верхний и двигал по сортировке до максимально допустимого для него положения. После этого повторял и если всё ещё конфликт брал нижний и сдвигал его вниз. Обычно в одно-три движения конфликт разрешается.
Гораздо более шустрое решение ИМХО можно получить сохраняя промежуточные данные между кадрами и меняя сортировку элементов только тогда, когда один из них меняет положение. Так можно ещё одного эффекта добиться, иногда полезного — можно сделать пересортировку минимальным количеством перестановок. Для этого вам нужно хранить кроме положения каждого элемента по каждой из двух координат и размеров ещё два List<List> вдоль каждой из координат. В первый вы записываете все элементы, которые в этой целочисленной координате начинаются вдоль данной оси, а во второй все элементы, которые в этой координате заканчиваются.
Имея такую структуру данных вы в первый раз отсортируете элементы очень быстро, а при перемещении одного из элементов сможете делать изменение в минимальное количество перестановок. В изометрической игре, как правило, реально подвижных элементов не больше 10%.
Никаких намёков, просто к слову пришлось.
А дальше получается что-то вроде:
var item = poolController.Get(PrefabName);
item.decorate(imgDescription);
Пришёл к такой схеме потому что оказалось, что переключится с атласа на атлас спрайту почти так же быстро. В первой версии заводил по бассейну под каждый атлас. Думаю с юнитами у вас проканает примерно такой же подход.
А ещё я реализовал полезную штуку — что когда если в кадре к пулингМенеджеру не обращались, он про запас создаёт по одному префаб, пока их сотня в резерве не накопится.
На сцене у меня порой возникает по 2-3 сотни объектов почти одновременно и при этом я забыл про тормоза инстанцирования.
Внедрять в реальном проекте имеет смысл не сразу, а только после того, как этап прототипирования вообще прошёл и начинается борьба за живучесть.
Если рейтинг Кинопоиска выше, чем IMDB на заметную величину, значит надо смотреть. Если выше больше чем на 0,5 — смотреть обязательно.
А сейчас в Яндексе кто-то научился машинлёрнинг и пытаются заменить им мозг. :( И все эти Теги как раз отсюда. Они с Тегами работать научились, а с полнотекстовой информацией, видимо, мозг ещё не дозрели. :(
http://top.rbc.ru/economics/05/10/2015/561276949a7947600a3bcb48
Транс-тихоокеанское соглашение подписано, не смотря на то, что подписавшие его лидеры, например, не имеют права ещё 5 лет разглашать своему населению что именно они подписали.
Транс-атлантическое на подходе. Страшно торопятся, но всё равно могут не успеть, конечно.
Впрочем и без юридических уточнений понятно…
В идеальном сферическом мире стоило бы ставить вопрос о профессиональном соответствии авторов отписки.