NullReferenceException on prefab instances

Hello everybody. I’ve got a problem.

I have a prefab with name LetterButton with Button component, which onclick should pass TextMeshPro component to GameManager script. In GameManager script I create many instances of LetterButton prefab. But when i click on them NullReferenceException error appears. Is there a way to add references to created at runtime prefab instances, which I can use in GameManager script?

public class LetterButton : MonoBehaviour
{

    [SerializeField] public TextMeshProUGUI letterButtonText;
    [SerializeField] public Button letterButton;

    private bool letterButtonPressed;

    private void Awake() {
        letterButton.onClick.AddListener(() => GameManager.Instance.LetterButtonPressed(letterButtonText));
    }
public class GameManager: MonoBehaviour
{

    public static GameManager Instance { get; private set; }

    [SerializeField] private LetterButton letterButtonPrefab;
    [SerializeField] private Canvas canvas;

    private float letterSpawnTimer;
    
    private void Awake() {
        Instance = this;
    }

    void Update()
    {
        letterSpawnTimer += Time.deltaTime;
        if (letterSpawnTimer >= 2f) {
            SpawnLetter();
            letterSpawnTimer = 0f;
        }
    }

    private void SpawnLetter() {
        string letter;

        LetterButton lb = PrefabUtility.InstantiatePrefab(letterButtonPrefab) as LetterButton;
        lb.transform.position = new Vector2(Random.Range(-350f, 250f), 1050f);
        lb.SetText(letter); 
        lb.transform.SetParent(canvas.transform, false);
    }

    public void LetterButtonPressed(TextMeshProUGUI letterButtonText) {
          //code
    }
1 Like

You could provide a Demo Project to test it faster…

At the 1st glance, try to avoid using the Lambda Expression in AddListener().