Как я могу добавить меню перечисления в gameobject?

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class InteractableItem : MonoBehaviour
{
    enum InteractableMode // your custom enumeration
    {
        Item1,
        Item2,
        Item3
    };

    InteractableMode interactableMode = InteractableMode.Item1;

    public float distance = 10f;

    [TextArea(1,10)]
    public string description = "";
}
  

Я могу видеть в инспекторе поля distance и description, но я не вижу меню перечисления, когда я прикрепляю скрипт к gameobject.

Я хочу видеть меню перечисления и иметь возможность выбирать и изменять режимы в меню перед запуском игры. Идея состоит в том, чтобы иметь возможность выбирать один из двух вариантов, доступен ли gameobject для взаимодействия как информационный элемент или также как пикап.

Если выбран информационный режим, используйте его как сейчас, но если выбрано отображение, используйте как сейчас, а также добавьте / используйте метод действия для отображения.

Комментарии:

1. Вы пробовали это сделать public или C # не принимает это для типа перечисления?

Ответ №1:

Сделайте перечисление общедоступным, а поле общедоступным или [SerializedField] закрытым:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class InteractableItem : MonoBehaviour
{
    public enum InteractableMode // your custom enumeration
    {
        Item1,
        Item2,
        Item3
    };

    [SerializeField]
    private InteractableMode interactableMode = InteractableMode.Item1;

    public float distance = 10f;

    [TextArea(1, 10)]
    public string description = "";
}
  

Инспектор

Комментарии:

1. Итак, что же все-таки делает атрибут [SerializeField]? Я имею в виду, что произойдет, если я тоже установлю переменную в public вместо private и [SerializeField] ?

2. Это просто позволяет вам видеть и изменять это поле в инспекторе Unity, пока оно остается закрытым для целей ООП.

Ответ №2:

Чтобы оно отображалось в редакторе, Unity должен иметь возможность сериализации interactableMode . Для этого вы можете сделать его общедоступным (и тогда вам также придется сделать InteractableMode перечисление общедоступным), или вы можете заставить Unity сериализовать его, выполнив:

 [SerializeField]
InteractableMode interactableMode = InteractableMode.Item1;
  

Ответ №3:

Попробуйте следующее, то есть создайте его public и создайте его экземпляр:

 public class InteractableItem : MonoBehaviour
{
    public InteractableMode interactableMode = InteractableMode.Item1;

    public enum InteractableMode // your custom enumeration
    {
        Item1,
        Item2,
        Item3
    };

    public float distance = 10f;

    [TextArea(1,10)]
    public string description = "";
}