如何解决 NullReferenceException:对象引用未设置到对象的实例[重复]

问题描述 投票:0回答:1

我如何解决这个问题我正在尝试调用附加到我的场景中的预制件的函数,我使用C#统一引擎,编辑器lts3.3.1

这是我的代码,DialogCall类在其函数OnTriggerEnter()中将调用DialogueTrigger类的TriggerDialogue()函数。正在我的游戏中开发对话系统。

DialogueCall 代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class DialogueCall : MonoBehaviour
{
    public DialogueTrigger dialogueTrigger;
    public GameObject[] gameObject;
    void Start(){
        dialogueTrigger = GameObject.FindGameObjectWithTag("Dialog").GetComponent<DialogueTrigger>();
    }
    private void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.tag == "Player")
        {
            for(int a=0;a<5;a++){
                gameObject[a].SetActive(false);
            }
            dialogueTrigger.TriggerDialogue();
            
        }
    }
}

DialogueTrigger 代码

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

public class DialogueTrigger : MonoBehaviour {

    public Dialogue dialogue;

    public void TriggerDialogue ()
    {
        FindObjectOfType<DialogueManager>().StartDialogue(dialogue);
    }

}

对话 TriggerDialogue() 函数附加到按钮上的预制对象,单击该按钮即可在我的游戏中启动对话。

谢谢!

我希望当 Player 与我的对象碰撞时调用 DialogueTrigger 类的 TriggerDialogue() 函数。但我收到错误NullReferenceException:对象引用未设置到对象的实例 DialogueCall.OnTriggerEnter(UnityEngine.Collider 其他)(位于 Assets/Scripts/DialogueCall.cs:20)

希望我的问题现在得到改善!

c# unity-game-engine game-physics
1个回答
0
投票

首先你不应该使用

gameObject
作为变量名,它已经是 Unity 保留的键盘了。

如果错误确实如此,那么它应该是数组的一个元素没有分配游戏对象。

我会修改你解决这个问题的方法。

一旦场景启动,预制件就不再是一个东西,它们变成了常规对象。 Prefab 是一个统一的编辑器概念

© www.soinside.com 2019 - 2024. All rights reserved.