Editor-код позволяет кастомизировать и расширять Unity-редактор. <br> Чтобы работать с **Editor Scripting**, нужно обязательно это делать в папке Editor (Нужно папку создать), Иначе Unity выдаст ошибку при сборке. Папок Editor может быть несколько и они могут быть в любом месте внутри папки Assets ### MenuItem MenuItem - это атрибут, который позволяет добавлять свои кнопки в системные меню Unity-редактора Для создания кнопки, необходимо определить статический метод. А над этим методом указать атрибут MenuItem. У атрибута указывается желаемое местоположение в Unity-редакторе и заодно указывается желаемое название кнопки. ```csharp [MenuItem("GameObject/My Menu/By Button")] public static void AddGameObject() { var gameObject = new GameObject(); } ``` <br> Чтобы наша кнопка/меню появилась в контекстном меню (скрин ниже), то нужно в начале MenuItem прописать GameObject ![Editor-код (Editor Scripting)](images/Editor-код%20(Editor%20Scripting).png) <br> Если в начале строки MenuItem прописать название любой вкладки, то наша кнопка/меню появится внутри вкладки (File, Editor, Assets и так далее). ![Editor-код (Editor Scripting)-1](images/Editor-код%20(Editor%20Scripting)-1.png) <br> [Официальная документация по MenuItem](https://docs.unity3d.com/ScriptReference/MenuItem.html) <br> ### Прочее <br> ##### Создание GameObject Если через эдитор создаем ГМ, то нужно обязательно задавать парента. Если не задавать парента, то при открытом префабе, может все равно его туда не добавить, а добавить просто на сцену. Если нужно добавлять всегда ГМ только на сцену и не в какой-то родительских ГМ, то можно парента не указывать. ```csharp var gameObject = new GameObject(); ``` <br> Если мы хотим узнать, какой GM на данный момент выделен в эдиторе ```csharp if (Selection.activeGameObject == null) ``` <br> Если нам нужно уничтожить Unity-объект в эдиторе, то нужно это делать через метод Object.DestroyImmediate(). Через просто Destroy() это сделать не получится. ```csharp Object.DestroyImmediate(); ``` <br> Чтобы после работы Editor-кода (например, после добавление GM на сцену) появилась звездочка. Нужно вызвать следующий метод ![Editor-код (Editor Scripting)-2](images/Editor-код%20(Editor%20Scripting)-2.png) Метод помечает Unity-объект как измененный. ```csharp EditorUtility.SetDirty(anyUnityObject); ``` <br> Метод регистрирует новосозданный GameObject для возможности откатить действие через cmd + z Указанный текст используется в месте, показанный на скриншоте ![Editor-код (Editor Scripting)-3](images/Editor-код%20(Editor%20Scripting)-3.png) ```csharp Undo.RegisterCreatedObjectUndo(createdGameObject, "ClarityRooms/Create Text"); ``` В зависимости от того, что мы изменили через Editor-код, нужно через определенные методы (см скрин) выполнить регистрацию. Для возможности откатывать действия через cmd + z. ![Editor-код (Editor Scripting)-4](images/Editor-код%20(Editor%20Scripting)-4.png) <br> [Официальный урок от Unity по Editor-коду](https://learn.unity.com/tutorial/editor-scripting#)