Деформация элементов GUI в OnGUI Unity

Я использую Unity3D, и у меня есть функция, которая вызывается внутри OnGUI для размещения различных компонентов графического интерфейса моего приложения. Обычно все метки и кнопки находятся внутри определенного Rect, который я предоставляю и который располагается по центру экрана.

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

Я скорее надеялся, что смогу просто указать некоторые значения в GUI.matrix, чтобы сопоставить прямоугольник с трапецией, но мое первоначальное исследование, кажется, показывает, что элементы графического интерфейса не используют однородные координаты, и все по-прежнему отображается как прямоугольное.

Есть ли способ сделать это с Unity, в идеале без доступа к профессиональным функциям?


person markt1964    schedule 16.03.2013    source источник


Ответы (2)


С тех пор система Unity3D GUI не очень гибкая. новая система графического интерфейса — одна из особенностей еще не вышла в Unity 4 (мы все ее ждем).

С моей точки зрения, у него есть несколько проблем, в частности:

  • Вы вынуждены размещать компоненты, используя поток кода, вместо более декларативного (или, по крайней мере, более структурированного) способа сделать это.
  • Это довольно неэффективно (по крайней мере, один вызов отрисовки для кнопки).
  • Он совсем не гибкий. Кнопки «Добавить», «Удалить», «Включить/Отключить» могут стать быстрой и болезненной операцией при увеличении количества кнопок.

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

Это довольно сложно, если вообще возможно, получить, используя классы Unity GUI.

Я вижу 2 возможности:

  1. Don't use GUI classes to do that. If your GUI is simple enough, you can implement your own (even 3d) buttons using for example:
    • A mesh (a plane or a trapezoid mesh) with a texture for the button background
    • TextMesh для рисования 3D-текста
    • RayCasting для проверки нажатия кнопки
  2. Используйте библиотеку, реализующую более продвинутую систему графического интерфейса, например NGUI.
person Heisenbug    schedule 16.03.2013
comment
Ладно.... дерьмо. Я скорее надеялся, что смогу сделать это с обычными элементами графического интерфейса, если я определю правильный тип GUI.matrix. Похоже, я выберу путь настройки собственного 3D-графического интерфейса с использованием плоскостных и текстовых сеток. Спасибо. - person markt1964; 18.03.2013

Когда я столкнулся с той же проблемой, я просто использовал обычные 3D-кубы GameObjects с текстурами и назвал их OnMouseDown(ПК/Mac) или RayCasting(Android/iOS). Думаю, так все делают.

person noob    schedule 17.03.2013