Расширение редактора Unity
Что-то нет настроя на серьезное программирование сегодня... так что решил поделиться опытом расширения редактора Unity.
Пример я выбрал такой не очень сложный, но и немного интересный. Мы с Вами научимся расширять редактор под свои задачи, в частности мы попробуем создать редактируемую кривую Безье третьего порядка. Теория по кривым Безье находится тут А нам понадобится одна формула: Выглядит эта кривая таким вот образом: Имеется 4 опорных точки, подставляя которые в вышеприведенную формулу и изменяя параметр t можно вычислить положение на кривой. Первый шаг. Подготовим компонент, выполняющий расчет и отображение кривой когда объект выбран: Bezier.cs PHP код:
Второй шаг Скрипты для редактора Unity должны быть помещены в отдельную папку с названием Editor. Где создавать такую папку выбирайте сами. Папок с именем Editor может быть сколько угодно в проекте. При компиляции проекта Unity создает отдельную сборку для Editor-скриптов и они не попадут в построенное приложение. Итак что мы хотим добавить нашему компоненту, чтобы работа с ним была удобнее? Мне на ум приходят следующие возможности: 1. Перемещать точки кривой в сцене. 2. Отобразить дополнительно длину кривой во время редактирования в инспекторе. Чтобы создать расширение компонента, надо создать класс, унаследованный от класса Editor и добавить ему атрибут CustomEditor в котором указать тип нашего компонента. Все эти классы находятся в пространстве имен UnityEditor. Для того чтобы добавить функционал в сцену мы воспользуемся событием OnSceneGUI, а для отображения длины кривой - OnInspectorGUI (эта функция является перегружаемой): Editor/BezierEditor.cs PHP код:
Манипуляторы в сцене: Длина кривой в инспекторе: Конечная структура проекта: Желаю всем удачи в исследовании Unity! |
Ответ: Расширение редактора Unity
И на javascript:
Bezier.js PHP код:
PHP код:
|
Ответ: Расширение редактора Unity
Продолжаем расширять редактор.
Сейчас я хочу рассказать о том, как создавать собственные окна на основе реализации простой функции LookAt. Я честно говоря не знаю, есть ли такая нативная функция (сочетание клавиш). Но на ее примере очень легко продемонстрировать то, как можно расширять редактор своими утилитами. Итак что мы должны сделать, чтобы создать собственное окошко:
Итак реализация: LookAtWindow.cs PHP код:
Состав проекта: Контекстное меню: Само окно встроенное в оболочку: Вот в принципе и все, о чем хотел рассказать. Удачи! |
Ответ: Расширение редактора Unity
Ну вот, отличный годный урок.
Прочитал с большим удовольствием. Есть пара мелких моментов, на которые еще стоит обратить внимание. 1) target необходимо явно приводить к типу объекта, который мы хотим "инспектировать". По умолчанию он имеет тип object. 2) прекратить делать версии скриптов для UnityScript, чтобы не провоцировать людей изучать этот появившийся по недоразумению язык.;) |
Ответ: Расширение редактора Unity
Сегодня хочу поделиться еще одним простым способом добавления собственных функций в редактор Unity, а именно использованию класса ScriptableWizard.
Так же как и в прошлый раз я реализую функцию LookAt, но с использованием других средств. Итак разбираем код: PHP код:
Вот и результат: |
Ответ: Расширение редактора Unity
Как я понял, данный тип расширения редактора работает только в случае, если соответствующий скрипт положен в папку Editor конкретного проекта? То есть если загрузить другой проект - надстройки не будет? А нельзя ли реализовать постоянный апгрейд редактора, не принадлежащий к конкретному проекту?
з.ы. может я тупой и тут уже был ответ на этот вопрос. Но я не заметил |
Ответ: Расширение редактора Unity
Можно все скрипты редактора загрузить в специальный пэккедж, который потом легко добавляется во все создаваемые проекты.
|
Ответ: Расширение редактора Unity
Официально такое не поддерживается.
|
Ответ: Расширение редактора Unity
Подскажите, а каким образом можно отследить событие нажатия правой кнопкой в окне сцены? Нужно, чтобы при нажатии отображался список - что-то типа контекстного меню.
|
Ответ: Расширение редактора Unity
http://unity3d.com/support/documenta....BeginGUI.html а там эвентами GUI.
|
Ответ: Расширение редактора Unity
А если делать кривую из нескольких бизье или замкнутую фигуру, то как лучше кранить такую кривую?
По 4 вершины на один отрезок(как здесь) не очень удобно т.к. они будут связаны между собой. Я так понимаю лучше хранить в виде списка таких вершин: Код:
public class Vertex { Я из-за этого даже разделить одну бизье на две не могу) Конечно можно все время переводить из одного формата в другой, но это не очень удобно. Да и не пойму как из p0,p1,p2,p3 создать две моих вершины. |
Ответ: Расширение редактора Unity
Очевидно же
PHP код:
|
Ответ: Расширение редактора Unity
Только dirA и dirB это координаты относительно p.
Так что так будет: Код:
a.p = p0; А как сделать, что бы при нажатии ctrl+z происходила отмена последнего изменение? |
Ответ: Расширение редактора Unity
Цитата:
|
Ответ: Расширение редактора Unity
Вложений: 1
Написал свой вариант редактирования замкнутых кривых.
т.к. в виде массива Vertex хранить кривую не очень удобно, то вернулся к классу Bezier) Код:
using UnityEngine; Код:
using UnityEngine; Код:
using UnityEditor; UnityEditor.Editor:DrawDefaultInspector() BezierEditor:OnInspectorGUI() (at Assets/BezierLevel/Editor/BezierEditor.cs:10) UnityEditor.DockArea:OnGUI() не пойму что не так. И кстате, на структуру сериализация не действовала( И с Undo не все ясно. Если быстро пару раз нажать Subdivide, то не все изменения запоминаются( Еще просто не пойму как оно запоминает изменения только тогда, когда я перестаю перетягивать вершину. Хотя RegisterUndo вызываю все время когда перетягиваю вершину. Еще хорошо бы добавить возможность удалять и добавлять бизье в кривой, а то Subdevide много безье создает. |
Часовой пояс GMT +4, время: 00:35. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot