Сейчас я хочу рассказать о том, как создавать собственные окна на основе реализации простой функции LookAt.

Я честно говоря не знаю, есть ли такая нативная функция (сочетание клавиш). Но на ее примере очень легко продемонстрировать то, как можно расширять редактор своими утилитами.

Итак что мы должны сделать, чтобы создать собственное окошко:

  1. Создать класс унаследованный от класса EditorWindow, который находится в пространстве имен UnityEditor.
  2. Добавить статический метод создания окна.
  3. Пометить этот метод атрибутом MenuItem, чтобы зарегистрировать его в контекстном меню редактора.
  4. Реализовать у класса метод OnGUI, выполняющий отрисовку содержимого.
  5. Не забыть положить свой созданный класс в папку с названием Editor, т.к. это расширение редактора.

Итак реализация:
LookAtWindow.cs

using UnityEngine;
using UnityEditor;
 
public class LookAtWindow : EditorWindow
{
 
    // Регистрируем пункт меню и функцию, выполняющую открытие окна
    [MenuItem("Window/Look At Window")]
    public static void CreateWindow()
    {
        LookAtWindow window = GetWindow<LookAtWindow>();
        window.title = "Look At Window";
    }
 
    // объект для поворота
    public Transform source;
    // цель
    public Transform target;
 
    // Функция отрисовки окна
    public void OnGUI()
    {
        // поле для указания исходного объекта
        GUILayout.BeginHorizontal();
        GUILayout.Label("Source:", GUILayout.Width(120));
        source = (Transform)EditorGUILayout.ObjectField(source, typeof(Transform));
        GUILayout.EndHorizontal();
 
        // поле для указания цели
        GUILayout.BeginHorizontal();
        GUILayout.Label("Target:", GUILayout.Width(120));
        target = (Transform)EditorGUILayout.ObjectField(target, typeof(Transform));
        GUILayout.EndHorizontal();
 
        // запоминаем текущий цвет GUI для восстановления
        Color oldColor = GUI.color;
 
        // проверяем наричие объекта для поворота и цели
        bool flag = false;
        if (source == null || target == null)
        {
            GUI.color = Color.red;
            GUILayout.Label("Selcect Source and Target!");
            flag = true;
            GUI.color = oldColor;
        }
 
        // если цель является объектом
        if ((source == target) && !flag)
        {
            GUI.color = Color.red;
            GUILayout.Label("Source equals Target!");
            GUI.color = oldColor;
        }
 
        // Делаем кнопку неактивной если не выполняется условие
        GUI.enabled = !flag && (source != target);
 
        // свободное место
        GUILayout.FlexibleSpace();
 
        // кнопка, выполняющая действие
        if (GUILayout.Button("Look At"))
        {
            source.LookAt(target);
        }
 
        // снова активируем GUI
        GUI.enabled = true;
        GUILayout.Space(8);
 
    }
}

Результаты.
Состав проекта:

Контекстное меню:

Само окно встроенное в оболочку:

Вот в принципе и все, о чем хотел рассказать. Удачи!

VN:F [1.9.3_1094]
Rating: 9.3/10 (13 votes cast)
VN:F [1.9.3_1094]
Rating: +8 (from 10 votes)
Продолжаем расширять редактор, 9.3 out of 10 based on 13 ratings

Один комментарий на «Продолжаем расширять редактор»

  1. Armando

    lewisohn@dora.progandist” rel=”nofollow”>.…

    спс….

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.



Страница 1 of 0