首页 > 解决方案 > Unity - NullReferenceException:对象引用未设置为对象的实例

问题描述

我有三个脚本;Player.cs它控制玩家的移动、相机方向和碰撞触发事件,MainMenu.cs它控制游戏中的所有菜单,以及UI.cs控制游戏中的所有 UI。

UI.cs我有以下方法;

public static void PrintSpooler(string target, string message)
{
    currentWrite = GameObject.Find(target).GetComponent<Text>();
    currentWrite.text = message;
} 

这是为了简化在屏幕上打印内容的过程,只需使用一个我可以从程序中的任何位置调用的方法,我可以从“Player.cs”和“MainMenu.cs”中调用。

调用MainMenu.cs看起来像这样;

public void Host()
{
    string localComputerName = Dns.GetHostName();
    IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
    string hostMessage = "Game hosted at " + localIPs[3];

    Time.timeScale = 1;

    SceneManager.LoadScene("TestScene2");
    UI.PrintSpooler("GameKills", hostMessage);        
}

应该发生的是,当玩家选择托管游戏时,它应该打印出托管游戏的 IP 地址,以便其他玩家可以加入游戏。实际发生的是我收到一条错误消息,指出“NullReferenceException:对象引用未设置为对象的实例”,它指向“UI.cs”中的代码位。真正奇怪的是,如果您注释掉“MainMenu.cs”中的方法调用以允许游戏继续“Player.cs”中的以下调用;

else if (other.GetComponent<Trap>())
{
    string killed = player + " killed by " + other.GetComponent<Trap>().Owner + "'s " + other.GetComponent<Trap>().name;
    UI.PrintSpooler("GameKills", killed);
}

据我所知,本质上是完全相同的呼叫,只是来自两个不同的位置。我认为正在发生的事情是,由于场景从名为“JoinGame”的场景切换到“TestScene2”(这是玩家玩游戏的实际场景,Unity 正在失去对代码对哪一部分所做的事情的跟踪)编码。

但是,当然,我一生都无法弄清楚,所以如果你们能提供帮助,那就太棒了!随时要求澄清您需要的任何内容!

多谢你们!

标签: c#unity3d

解决方案


推荐阅读