Добавлен Devion,
опубликован
Разработка редакторов - это просто!
Содержание:
AssetDatabase
В любой момент создания редакторов вам может понадобиться необходимость использовать ресурсы из проекта. При том - любой ресурс, а не конкретно те, что лежат в папке "/Resources/". Да и мало того, может понадобиться возможность их сохранять.
Для таких целей в Unity предусмотрен класс AssetDatabase. Его возможности довольно-таки широки, и, возможно, стоят даже отдельной статьи, объясняющей разные фичи/баги.
Для таких целей в Unity предусмотрен класс AssetDatabase. Его возможности довольно-таки широки, и, возможно, стоят даже отдельной статьи, объясняющей разные фичи/баги.
Handles
Вы можете рисовать в сцене и мало того, пользоваться своими манипуляторами, которые позволят визуально редактировать ваш объект (например, именно так устроены стандартные инструменты позиционирования/поворота/масштабирования).
Так, например, CustomEditor поддерживает метод OnSceneGUI, который позволяет рисовать такие штуковины (например при помощи класса Handles).
По этой теме, я опять же считаю, что должна существовать некоторая отдельная статья. Это очень большая тема, о которой можно рассказать значительно больше одной страницы.
Так, например, CustomEditor поддерживает метод OnSceneGUI, который позволяет рисовать такие штуковины (например при помощи класса Handles).
По этой теме, я опять же считаю, что должна существовать некоторая отдельная статья. Это очень большая тема, о которой можно рассказать значительно больше одной страницы.
InitializeOnLoad
Часто возникают ситуации, когда нам нужно запустить какой-либо скрипт сразу при изменении кода, или при старте редактора, то есть в тот момент, когда сборка только что была загружена.
Для этих целей нам пригодится атрибут [InitializeOnLoad], которым мы можем пометить любой статический класс, и в этом случае его статический конструктор запустится именно так, как я и написал выше.
[InitializeOnLoad]
public static class MyEditorInit
{
static MyEditorInit()
{
//Здесь наш код
}
}
Данный метод в основном применяется в таких ситуациях, как, например, автогенерация кода или подписка на делегаты, о некоторых из которых речь пойдет ниже.
По делегатам
update:
Часто бывает, что в редакторе требуется заюзать апдейт, но сделать это просто неоткуда. В таком случае вам поможет делегат EditorApplication.update. И подписываемся мы на него через описанный выше способ.
Часто бывает, что в редакторе требуется заюзать апдейт, но сделать это просто неоткуда. В таком случае вам поможет делегат EditorApplication.update. И подписываемся мы на него через описанный выше способ.
[InitializeOnLoad]
public static class MyEditorInit
{
static MyEditorInit()
{
EditorApplication.update += Update;
}
static void Update()
{
//Код апдейта
}
}
Важно понимать, что этот метод вызывается приблизительно 100 раз в секунду, и нужно это учитывать при обдумывании его тела.
hierarchyWindowItemOnGUI:
Нельзя обойти стороной делегат EditorApplication.hierarchyWindowItemOnGUI, позволяющий дорисовать объекты в иерархии.
Например, в проекте заказчика я использовал его для быстрого создания объектов:
Нельзя обойти стороной делегат EditorApplication.hierarchyWindowItemOnGUI, позволяющий дорисовать объекты в иерархии.
Например, в проекте заказчика я использовал его для быстрого создания объектов:
Подписка этого делегата должна осуществляться на метод с параметрами, как здесь:
static void HierarchyWindowItemOnGui(int instanceId, Rect selectionRect)
windowChanged
Порой необходимо отследить моменты, когда в иерархии или папке проекта что-то поменялось.
Для этого есть два чудесных делегата - EditorApplication.hierarchyWindowChanged и EditorApplication.projectWindowChanged.
Порой необходимо отследить моменты, когда в иерархии или папке проекта что-то поменялось.
Для этого есть два чудесных делегата - EditorApplication.hierarchyWindowChanged и EditorApplication.projectWindowChanged.
sceneView
Для того, чтобы раскрашивать сцену при помощи методов класса Handles можно создавать методы, не привязанные к конкретным объектам и окнам. Делается это при помощи делегата SceneView.onSceneGUIDelegate
Для того, чтобы раскрашивать сцену при помощи методов класса Handles можно создавать методы, не привязанные к конкретным объектам и окнам. Делается это при помощи делегата SceneView.onSceneGUIDelegate
Это, конечно, не все делегаты - вы их еще море найдете. Я написал лишь те, которые юзаются чаще остальных.
Unsupported
Вы никогда не увидите этого класса в документации Unity, но тем не менее он содержит очень много полезных методов. Однако, будьте осторожны - ведь методы могут измениться с новой версией движка.
На этом базовый курс по написанию редакторов для Unity я считаю закрытым. Все свободны, можете идти :)
Содержание
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.