Переменная никогда не назначается и всегда будет иметь значение по умолчанию null - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь сделать так, чтобы на мои элементы ссылались в Unity, создавая закрытые переменные, используя Serializable Fields, а затем используя {get {return}} внизу для доступа к нему. Я полный новичок в C # и Unity, поэтому я был бы благодарен за простое объяснение. Каждое из этих Сериализуемых Полей имеет такую ​​же ошибку и не появляется в моем Инспекторе Unity.

    public struct UIElements
    {
        [SerializeField] RectTransform answerContentArea;
        public RectTransform AnswerContentArea { get { return answerContentArea; } }

        [SerializeField] TextMeshProUGUI questionInfoTextObject;
        public TextMeshProUGUI QuestionInfoTextObject { get { return questionInfoTextObject; } }

        [SerializeField] TextMeshProUGUI scoreText;
        public TextMeshProUGUI ScoreText { get { return scoreText; } }

        [Space]

        [SerializeField] Image resolutionBG;
        public Image ResolutionBG { get { return resolutionBG; } }

        [SerializeField] TextMeshProUGUI resolutionStateInfoText;
        public TextMeshProUGUI ResolutionStateInfoText { get { return resolutionStateInfoText; } }

        [SerializeField] TextMeshProUGUI resolutionScoreText;
        public TextMeshProUGUI ResolutionScoreText { get { return resolutionScoreText; } }

        [Space]

        [SerializeField] TextMeshProUGUI highScoreText;
        public TextMeshProUGUI HighScoreText { get { return highScoreText; } }

        [SerializeField] CanvasGroup mainCanvasGroup;
        public CanvasGroup MainCanvasGroup { get { return mainCanvasGroup; } }

        [SerializeField] RectTransform finishUIElements;
        public RectTransform FinishUIElements { get { return finishUIElements; } }
    }

Ответы [ 3 ]

0 голосов
/ 01 октября 2019

Unity предоставляет систему сериализации для полей MonoBehaviour, которую вы можете использовать для установки ссылок на поля в редакторе, а затем использовать ее из кода.

В вашем случае вам нужно сделать UIElements каккласс, который наследуется от MonoBehaviour, присоедините его к некоторому GameObject на сцене и установите необходимые ссылки - после этого вы можете использовать ссылки для объектов в сцене.

0 голосов
/ 01 октября 2019

Кажется, что все ваши поля определены как свойство . Кто-то исправит меня, если я ошибаюсь, но чтобы отобразить свойство в инспекторе, вам нужно «создать» свой собственный инспектор, потому что Unity не может безопасно сериализовать / десериализовать свойства, поскольку методы получения и установки могут иметь разные эффекты в зависимости от того, какой код они инкапсулируют.

Надеюсь, этот пост пролил больше света на вас.

Редактировать

Этот также может быть полезен

0 голосов
/ 01 октября 2019

Вы должны пометить структуру как Serializable, чтобы отобразить ее в Инспекторе Unity, например:

[Serializable]
public struct UIElements
{
// ...
}

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

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