Как добавить опцию к GameObject в контекстном меню Hierarchy? - PullRequest
0 голосов
/ 12 февраля 2019
using UnityEditor;
using UnityEngine;

public class Test : EditorWindow
{
    [MenuItem("GameObject/Test")]
    static void Tests()
    {
        int width = 340;
        int height = 300;

        int x = (Screen.currentResolution.width - width) / 2;
        int y = (Screen.currentResolution.height - height) / 2;

        GetWindow<Test>().position = new Rect(x, y, width, height);
    }
}

Это создаст опцию Test в меню редактора вверху под GameObject.Но я хочу добавить опцию / свойство для одного или нескольких GameObject / s в Иерархии, а не в верхнем меню редактора.

Это то, что я пробовал:

using UnityEditor;
using UnityEngine;

public class ExportObjects : EditorWindow
{
    [MenuItem("GaemObject/Export", true, 1)]
    static void Export()
    {
        int width = 340;
        int height = 300;

        int x = (Screen.currentResolution.width - width) / 2;
        int y = (Screen.currentResolution.height - height) / 2;

        GetWindow<ExportObjects>().position = new Rect(x, y, width, height);
    }
}

Но это ничего не делаетничего не добавлялось в контекстное меню щелчка правой кнопкой мыши по объектам в иерархии.

Если я изменил строку:

[MenuItem("GaemObject/Export", true, 1)]

Кому:

[MenuItem("GaemObject/Export")]

Это добавит новое меню GameObject вверху редактора и Экспорт.Но я хочу добавить это, когда делаю правую кнопку мыши на объекте в иерархии.Один объект или для выбранных объектов.

Пробовал true, 1 и true, -10 или true, 10

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

См. этот пост это зависит от большего количества параметров.оно появится в контекстном меню иерархии с использованием параметра priority, например, с -10

[MenuItem("GameObject/Test", false, -10)]

Нет никакой опции для контроля, для каких объектов это будет отображаться или нет.

Но вы можете включить и отключить кнопку, добавив метод проверки.Например, активируйте метод только в том случае, если выбранный объект имеет Camera компонент

// true turns it into a validation method
[MenuItem("GameObject/Test", true, -10)]
private static bool IsCanera()
{
    return Selection.activeGameObject != null && Selection.activeGameObject.GetComponent<Camera>();
}

Таким же образом, но с использованием [ContextMenu] вместо этого вы можете добавить его в компонент вИнспектор

[ContextMenu("Example")]
private void DoSomething()
{
    // Do something
}

Вы также можете добавить метод непосредственно в контекстное меню только одного поля в Инспекторе, используя [ContextMenuItem]

[ContextMenuItem("reset this", "ResetExample")]
public int example;

private void ResetExample ()
{
    example = 0;
}
0 голосов
/ 12 февраля 2019

Посмотрите здесь https://docs.unity3d.com/Manual/class-PresetManager.html

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

Вам нужно будет создать компонент, который будет просто скриптом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...