我有三个脚本; 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;
}
这是为了简化在屏幕上打印出来的过程,只需要一个我可以从程序中的任何地方调用的方法,我可以从“播放器”和“播放器”中进行操作。和&#39; MainMenu.cs&#39;。
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地址,以便其他玩家可以加入游戏。实际发生的是我得到一条错误消息&#34; NullReferenceException:对象引用未设置为对象的实例&#34;它指向&#39; UI.cs&#39;中的一些代码。真正奇怪的是,如果你在&#39; MainMenu.cs&#39;中注释掉方法调用。允许游戏继续在&#39; Player.cs&#39;工程;
else if (other.GetComponent<Trap>())
{
string killed = player + " killed by " + other.GetComponent<Trap>().Owner + "'s " + other.GetComponent<Trap>().name;
UI.PrintSpooler("GameKills", killed);
}
据我所知,实质上是完全相同的呼叫,仅来自两个不同的位置。我认为正在发生的事情是,由于场景从一个名为&#34; JoinGame&#34;到&#34; TestScene2&#34; (这是玩家玩游戏的实际场景,Unity正在忘记代码对代码的哪一部分所做的工作。
但是,当然,我不能为我的生活弄清楚,所以如果你们能帮忙那就太棒了!随意请求澄清您需要的任何内容!
谢谢,伙计们!