Всем привет!
Для игры необходимо сделать в UI телефон, в котором будет самый обычный чат виртуального мессенджера.
Казалось бы задача утилитарна и тривиальна...но не тут то было.
Стандартными средствами вроде Vertical Layout Group и скрипта Content Size Fitter достичь желаемой
цели не удалось. После тщательного изучения возможностей этих скриптов возникла идея взять исходники и немного
там убрать, но найти исходники мне не удалось. На сколько я помню они в открытом доступе? Или я ошибаюсь?
Написал альтернативный и упрощённый вариант Vertical Layout Group, но без блокирования изменений параметров дочерних объектов
(в инспекторе они становятся недоступны как только кидаешь Vertical Layout Group), который повесил на корневой объект вьюпорта Content:
и который выстраивает child-объекты с текстом по вертикали относительно родительского, с учётом
единственного параметра отступа Spacing. В общем всё стандартно. При этом на каждый
блок Text area повесил упомянутый выше скрипт Content Size Fitter, который высчитывает
текущий размер объекта и растягивает его до этого размера, если были какие то изменения.
Кроме того, каждый блок с текстом получил дочерний объект Panel, который нужен для того,
чтобы нарисовать фоновый прямоугольник для текста сообщения. С этим всё стандартно.
Однако возникла проблема при работе моего скрипта. Параметр Value стандартного Scroll View
в окне Inspector изменить невозможно. После компиляции проекта чат скроллится мышкой, однако
в этом случае ограничений прокрутки нет и текст можно заскроллить в космос или в параллельную вселенную...
При работе Vertical Layout Group такой проблемы не наблюдается.
Потом я вернулся к попыткам сделать чат стандартными средствами и ничего не получилось.
Т.е. всё работает, но сделать сдвиг реплик Главного Героя вправо не получается.
Те варианты, которые позволяют это сделать, имеют другие косяки, связанные с особенностями
приоритета функций и событий рендера. Связать всё воедино не получается, поскольку
у меня нет доступа к подробной документации по реализации фич Unity.
Если бы Vertical Layout Group не лочил переменные, или имел бы режим с отключением
контроля над отдельными параметрами дочерних объектов, то и проблем бы не было.
Параметр padding скрипт вычисляет в любом случае, поэтому выравнивает все объекты.
Может посоветуете готовые решения?
Я уже и коротюнами пытался свои скрипты синхронизировать, но всё равно не одна беда,
так другая. А доступа к функционалу самого Unity у меня нет. городить свой фреймворк
нелепо - чат является важной частью геймплея, но заморачиваться на таких утилитарных
функциях не вижу смысла. Все велосипеды давно изобретены.
p.s.
Мою тривиальную задачу можно решить штатными средствами, только это решение
крайне громоздкое и нелепое. Здоровый перфекционизм не позволяет идти по этому пути.
К тому же в будущем у игроков на разном железе могут возникать траблы и баги,
поскольку такие костыли делать не рекомендуется нигде и никогда.