Ошибка NullReference в Unity C# - PullRequest
       0

Ошибка NullReference в Unity C#

0 голосов
/ 05 февраля 2020

Я пытаюсь получить ссылку на два моих игровых объекта в Unity, которые представляют собой «ScoreEntryContainer» и его дочерний «шаблон»:

screenshot

В моем сценарии Я добавил две переменные publi c transform, чтобы получить ссылку на них. Однако Unity выдает NullReferenceException, указывающий на ссылку на «Шаблон».

Error

Шаблон - это контейнер, в котором есть три игровых объекта Text UI.

В инспекторе я также назначил эти игровые объекты компоненту скрипта. Ошибка указывает на строку Debug.Log в приведенном ниже коде:

public class ScoreboardScript : MonoBehaviour
{
    public Transform container;
    public Transform template;


    private List<ScoreEntry> scoreEntryList;
    private List<Transform> scoreEntryTransformList;

    public void Awake()
    {
        template.gameObject.SetActive(false);

        scoreEntryList = new List<ScoreEntry>()
        {
            new ScoreEntry(10,150f),
            new ScoreEntry(20,150f),
            new ScoreEntry(30,150f)

        };


        foreach(ScoreEntry sc in scoreEntryList)
        {
            float templateHeight = 25f;

            Transform entry = Instantiate(template, container);
            RectTransform entryRectTransform = entry.GetComponent<RectTransform>();
            entryRectTransform.anchoredPosition = new Vector2(0, -templateHeight * scoreEntryList.IndexOf(sc));
            entry.gameObject.SetActive(true);

            int rank = 0;

            //entry.Find("SerialNoText").GetComponent<Text>().text = rank.ToString(); 

            Debug.Log(entry.Find("SerialNoText").GetComponent<Text>().text); // Error here
            float time = sc.time;
            int minutes = (int)(time / 60);
            int seconds = (int)(time % 60);
            //entry.Find("TimeText").GetComponent<Text>().text = minutes.ToString() + ":" + seconds.ToString();

        }

    }

Есть идеи, почему это происходит?

См. Инспектор:

here .

entry является ссылкой на Template GameObject.

См. Template в инспекторе:

Template

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Хорошо, я понял это.

Проблема была в том, что я использовал TextMeshPro вместо Text в пользовательском интерфейсе, который выдал нулевое исключение. Поэтому я изменил это соответственно в сценарии.

0 голосов
/ 05 февраля 2020

Template не имеет компонента Text. Итак, вызов entry.Find("SerialNoText").GetComponent<Text>() возвращает нулевую ссылку.

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