Динамические номера - но не совсем. Как?

Обсуждение вопросов и решение проблем, связанных с внутриигровым редактором, а также процессом разработки самостоятельных дополнений или игровых модификаций.
Ответить
DmitriSkif
Магистр
Магистр
Сообщения: 793
Зарегистрирован: 26 ноя 2018
Откуда: Минск
Репутация: 184

Динамические номера - но не совсем. Как?

Сообщение DmitriSkif »

Привет.

Постановка вопроса. У одного условного локомотива номерные таблички (точнее, накладные номера) обладают препаскудным свойством:

- Одна из цифр имеет меньшую ширину, чем остальные, и при составлении номеров вида 112, 101, 001, 010, 210 и т.п. получается ахинея с пробелами в номере. Как вы наверняка догадались, это единица.
- учитывая, что все цифры динамического номера должны иметь одинаковую ширину, напрашивается несколько альтернативных решений. А какие варианты есть у вас?


Возможные варианты:
1. Читаем бортовой номер скриптом, подгружаем нужные динамические номера внешним узлом вместо механики динамических номеров. Очень муторно (282 варианта, если быть точным), и крайне высокий поликаунт в случае объемных цифр, так как весь полигонаж внешних узлов модели лишь делается невидимым, но не удаляется из сцены.
2. Уникальные модели без динамических номеров. Неинтересно, но самый надежный способ.
3. Забить на толщину цифры и стиснув зубы пойти на столь досадное допущение.
4. Городить метод с рассчетом положения цифр номера и двигать их при помощи анимации, благо просчитать расположение цифр потребуется только один раз при инициализации локомотива.

Еще варианты?
Аватара пользователя
Света
Разработчик
Сообщения: 752
Зарегистрирован: 13 мар 2015
Репутация: 1470

Re: Динамические номера - но не совсем. Как?

Сообщение Света »

5. Сделать модельку с 10 нодами-цифрами. Прикрутить её дочеркой, на каждый разряд по одной. Номер считывать скриптом, раскладывать на разряды, для каждого разряда скриптом задать дочерке координаты расположения. Если цифра, которую надо вывести, равна 1, координаты должны быть с учетом сдвига, координаты всех соседних разрядов-дочерок должны вычисляться с учетом этого сдвига. Самый оптимальный способ по быстродействию и расходу памяти - использование для базовых координат локального многомерного массива. Тот разряд, относительно которого центрируются остальные, может иметь жесткую привязку.
При этом способе количество разрядов может быть любым, количество номеров-нодов - 10*количество разрядов, каждая цифра может иметь произвольную ширину.
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
DmitriSkif
Магистр
Магистр
Сообщения: 793
Зарегистрирован: 26 ноя 2018
Откуда: Минск
Репутация: 184

Re: Динамические номера - но не совсем. Как?

Сообщение DmitriSkif »

Ну это способ 4 и есть.
для каждого разряда скриптом задать дочерке координаты расположения.
А это возможно? Не помню, чтобы скриптом можно было двигать дочерку в узлах, помимо координат в блюпринте и анимацией? Есть возможность отредактировать матрицу чайлда скриптом? Больше похоже на то, что для каждого из разрядов (возможно, кроме старшего, от которого вправо и будет "растягиваться" номер) нужно прикрутить по две модели из 10 цифр: одну если 2-ой разряд единица, вторую для остальных случаев.
Аватара пользователя
Света
Разработчик
Сообщения: 752
Зарегистрирован: 13 мар 2015
Репутация: 1470

Re: Динамические номера - но не совсем. Как?

Сообщение Света »

Способ 4 - это устанавливать нод разряда анимацией. А я пишу об установке разряда загрузкой координат в позицию дочерки. Способ 4 подразумевает изготовление 10*(количество разрядов) нодов с цифрами, которые, к тому же, не факт, что удастся скрыть, так как проскакивала информация, что анимированный узел нельзя скрыть). А я говорю о способе, когда создается всего одна моделька с 10 нодами (0...9), которая тиражируется дочерками, а дочерки устанавливаются одна возле другой и все, что нужно рассчитать - это координаты, которые можно просто брать из массива, даже не высчитывая. Да и координата Y, в принципе, не нужна.
DmitriSkif писал(а):А это возможно?
Возможно.
DmitriSkif писал(а):для каждого из разрядов (возможно, кроме старшего, от которого вправо и будет "растягиваться" номер) нужно прикрутить по две модели из 10 цифр: одну если 2-ой разряд единица, вторую для остальных случаев.
Тогда три модели, потому что одиночный сдвиг - это когда первый или второй разряд равны 1, но есть ещё случай, когда оба разряда равны 1 и требуется двойной сдвиг, и когда оба разряда не равны 1 и сдвига вообще нет. Согласно этому третий разряд уже должен иметь, соответственно, ещё больше вариантов сдвига, так как надо учитывать уже как сдвиги первого и второго разрядов, так и его собственные. И каждый последующий разряд будет иметь все большее количество вариаций расположения.
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
DmitriSkif
Магистр
Магистр
Сообщения: 793
Зарегистрирован: 26 ноя 2018
Откуда: Минск
Репутация: 184

Re: Динамические номера - но не совсем. Как?

Сообщение DmitriSkif »

Возможно.
Звучит обнадеживающе, спасибо.

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

Call(“<ChildName>:setNearPosition”, x, y, z) - этот, что ли? Система координат родительская локальная или глобальная?
Ответить