Unity: выпадающий список переменных в Inspector

155
23 сентября 2019, 04:20

Делаю для игры перевод на разные языки. В первом скрипте есть публичный класс с публичными переменными

public static lang lng = new lang();
public class lang
{
    public string language;
    public string[] trainingTap;
}

Стал делать второй скрипт "Translator", который вешается на каждый обьект с текстом. Подскажите, как сделать так, что бы в инспекторе можно было из этого скрипта сделать выпадающий список с публичными переменными другого скрипта? Что то вроде того, как на прилагающейся картинке. Пытался связаться с автором видео, безуспешно

Answer 1

тот дропдаун который ты прилепил на скриншоте -- это банальный Enum. Энамы в инспекторе отображаются именно так.

enum myEnum
{
  Item1, 
  Item2, 
  Item3
};
public myEnum DropDown = myEnum.Item1;//будет отображатся как дропдаун

Но раз уж ты затронул вопрос о переводе, то я бы советовал не лепить собственные велосипеды, а погуглить ассеты платные или бесплатные которые это реализуют по запросу "unity localization"

Вот в этом вопросе я давал пару полезных линков по теме: Локализация игрового меню

Answer 2

Для этих целей вам нужно написать кастомный скрипт для инспектора вашего компонента(скрипта), а в нем использовать EditorGUILayout.Popup() метод, который позволяет сделать выпадающий список и принимает как параметр массив строк.

Пример из документации по этому методу выглядит похожим на то, что вы хотите:

using UnityEditor;
using UnityEngine;
using System.Collections;
public class EditorGUILayoutPopup : EditorWindow
{
    //Массив строк, которые хотим видеть в выпадающем списке
    public string[] options = new string[] {"Cube", "Sphere", "Plane"};
    public int index = 0;
    [MenuItem("Examples/Editor GUILayout Popup usage")]
    static void Init()
    {
        EditorWindow window = GetWindow(typeof(EditorGUILayoutPopup));
        window.Show();
    }
    void OnGUI()
    {
        index = EditorGUILayout.Popup(index, options);
        if (GUILayout.Button("Create"))
            InstantiatePrimitive();
    }
}

Что будет выглядеть вот так:

READ ALSO
Как сделать различные спрайты в массиве UI объектов [закрыт]

Как сделать различные спрайты в массиве UI объектов [закрыт]

Как назначить определенному элементу массива UI объекта (контент в scrollview) соответствующий спрайт из массива спрайта?

88
Как поместить модель в сессию в asp.net?

Как поместить модель в сессию в asp.net?

Модель NewModel приходит на контроллер, нужно ее поместить в сессию:

85
AspNetCore приложение в Docker. как работать с логами?

AspNetCore приложение в Docker. как работать с логами?

Здравствуйте начал искать информацию как вытаскивать обычные текстовые логи из Docker контейнера и ничего не нашелИз этого я сделал вывод что...

103
Длительный фоновый процесс в asp.net core

Длительный фоновый процесс в asp.net core

У меня есть web api на aspnet core

93