Как правильно создать ссылку на объект Unity? - PullRequest
4 голосов
/ 29 января 2020

Я новичок в C# и Unity и не могу найти четкий ответ на мою проблему.

Я пытаюсь создать простой TextMeshProUGUI буфер текстового журнала на панели. Сам буфер работает нормально, пока я не попытаюсь получить к нему доступ из другого класса - я полагаю, потому что я не создаю ссылку на панель правильно.

Вот мой код для TextMeshProUGUI сборщика объектов:

using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class TextLogControl : MonoBehaviour
{
    public TextMeshProUGUI textPrefab;  // Unity prefab 

    public  List<TextMeshProUGUI> textItems = new List<TextMeshProUGUI>();

    [SerializeField]
    public int maxItems = 100;


    public void LogText(string newTextString, Color newColor)
    {

    Instantiate(textPrefab, transform);

        textPrefab.text = newTextString;

        if (textItems.Count >= maxItems)
        {
            textItems.RemoveAt(0); // I should probably be destroying something, but that's another question
        }

        textPrefab.gameObject.SetActive(true);

        textItems.Add(textPrefab);
    }

    // The above function works correctly if I write a test function within this same class

}

Вот код для класса, который пытается получить доступ к функции LogText():

using System;
using UnityEngine;

public class World : MonoBehaviour
{
    Color defaultColor = Color.black;

    public TextLogControl textLog; 


    public void Init()
    {
        // I need to create a reference here somewhere, but nothing I am trying is working

        textLog.LogText("Welcome - you made it!", defaultColor);

    }
}

Я помещаю скрипт TextLogControl в Unity GameObject, который содержит TMP объектов, и это работает само по себе.

Я думал, что создаю ссылку на держатель GameObject, перетаскивая его на свой объект World в Unity, как показано ниже, но я все еще получаю NRE, когда я звоню World.Init(), что означает, что я делаю что-то не так, но я не могу понять, что.

Я думал, что это создаст ссылку, которая не создается

I thought this would create the reference that is not being created

Редактировать: я получаю ошибку

NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта

При попытке запустить World.Init() - в частности, textLog является нулевым, даже если я перетащил его в соответствующее место в Unity (я верю).

1 Ответ

2 голосов
/ 29 января 2020

Поскольку это так долго для комментария, нулевая ссылка означает, что он пытается получить доступ к чему-то, что не существует. Вы либо забыли перетащить что-то в редактор, либо вы на шаг впереди, и у вас есть что-то без комментариев, которое все еще нужно комментировать. Ваш код использует то, чего нет. Я рекомендую вам добавить этот фрагмент кода в ваши файлы, чтобы проверить, идет ли ошибка от NullRefrence класса или кода else.

    TextMeshProUGUIs = textPrefab.GetComponent<TextMeshProUGUI>();
    if (TextMeshProUGUIs == null)
    {
        Debug.LogError("No TextMeshProUGUI component found.");  
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...