Проблема с реализацией чата стандартными средствами

Графический интерфейс пользователя

Проблема с реализацией чата стандартными средствами

Сообщение MSA 25 фев 2018, 02:44

Всем привет!

Для игры необходимо сделать в 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.
Мою тривиальную задачу можно решить штатными средствами, только это решение
крайне громоздкое и нелепое. Здоровый перфекционизм не позволяет идти по этому пути.
К тому же в будущем у игроков на разном железе могут возникать траблы и баги,
поскольку такие костыли делать не рекомендуется нигде и никогда.
MSA
UNец
 
Сообщения: 12
Зарегистрирован: 24 фев 2018, 23:21

Re: Проблема с реализацией чата стандартными средствами

Сообщение samana 25 фев 2018, 12:46

Чтобы сделать сдвиг для облачка диалога, можно просто изначально создать контейнер с облачком и рядом с этим облачком пустой объект нужной ширины.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Проблема с реализацией чата стандартными средствами

Сообщение MSA 25 фев 2018, 14:46

samana
Тут всё динамически выравнивается, поскольку диалогов будет много
и они будут выводится в нужный момент по ходу развития сюжета.
Причём, в английском варианте предложения обычно короче.

Кроме того, текущий контейнер с облачком может быть любым:
левым или правым, т.е. они должны быть унифицированы и определяться
скриптом флагом из текущей базы данных диалогов.

Вручную всё это делать не получится - когда я буду заполнять
файлы с русским и английским переводом, там будут такие объёмы,
что путаница будет однозначно. Форматирование должно работать само.
Потому что будут правки, изменения диалогов, доводка и т.д.
Плюс два языка.

Всяко весил этот стандартный фиттер, пробовал прочие штатные фичи.
Получается какая то ерунда. Либо нужны костыли. Нелепые костыли..
MSA
UNец
 
Сообщения: 12
Зарегистрирован: 24 фев 2018, 23:21

Re: Проблема с реализацией чата стандартными средствами

Сообщение MSA 25 фев 2018, 16:04

to samana

С вашей подачи сделал всё как надо штатными средствами! B-)
Причём всё это уже делал, но немного не так, поэтому не работало.
Получилось нагромождение элементов, но всё работает,
без дёрганий и артефактов, поскольку движок рендерит всё
с правильными приоритетами, сам, и не выносит этим мне мозг.

Спасибо за наводку!
4 дня убил на эту ерунду.
Впрочем много чего узнал о unity
MSA
UNец
 
Сообщения: 12
Зарегистрирован: 24 фев 2018, 23:21

Re: Проблема с реализацией чата стандартными средствами

Сообщение samana 25 фев 2018, 17:23

Отлично!!! :ymparty:
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1