Страница 1 из 1

Проблемы дочернего Canvas или динамический интерфейс [решен]

СообщениеДобавлено: 18 окт 2016, 21:25
TonyMax
Ситуация такая: мне нужно при выделении игрового объекта показывать на экране его элементы интерфейса. Например - выделяем воина и на экране показывается его характеристики. Игровые объекты добавляются на сцену динамически по решению игрока, так что закрепить связь между игровым объектом и элементом интерфейса до добавления этого самого объекта на сцену не получится.

a) Самый изящный вариант решения, как мне кажется, был такой: я создавал в префабе игрового объекта canvas с необходимыми элементами и включал его при выделении игрового объекта.
Проблема оказалась в том, что, если canvas является дочерним объектом на сцене, а позиция его родителя не (0,0,0), то canvas (при включенном screen space - overlay режиме рендера) "вылезает" за пределы экрана.

b) Второй вариант решения есть такой: все элементы интерфейса я вешаю на обычный canvas без родителя, объединяю их в логические группы, определяющие их отношение к конкретному игровому объекту. Вешаю на эти группы уникальные тэги, и при добавлении игрового объекта на сцену в start() произвожу поиск по тэгу и получаю единовременно ссылку на интересующий меня элемент интерфейса. Мне не хочется так делать, потому что функция поиска по тэгу или классу очень нагрузочная, даже при условии использования её один раз при start()

Может, вы подскажите какой-нибудь другой вариант или как изменить 1ый, чтобы отображалось всё удовлетворительно.

Re: Проблемы дочернего Canvas или динамический интерфейс [решен]

СообщениеДобавлено: 19 окт 2016, 00:11
TonyMax
Решение: берем tranform нашего canvas и .parent = null
Canvas становится в (0;0;0), ссылки расставлены

Re: Проблемы дочернего Canvas или динамический интерфейс [решен]

СообщениеДобавлено: 25 окт 2016, 19:13
immeasurability
как вариант:
есть юнит
у юнита ссылка на префаб ui панели
на сцене основной сингл канвайс
при открытии свойств юнита создаем панель из ссылки префаба юнита в сингл канвайсе
префаб панели имеет свой контроллер который получает данные о персонаже
юнит->open_info(юнит)
контроллер заполняет созданную панель в сингл канвайсе

получаем возможность оперативно менять интервейс, без прохождения по всем юнитом по канвайсам

с твоим вариантом:
Решение: берем tranform нашего canvas и .parent = null
Canvas становится в (0;0;0), ссылки расставлены

начинаются проблемы когда меняется дизайн или дополняется функционал интерфейса