c# - 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 正在失去对代码对哪一部分所做的事情的跟踪)编码。
但是,当然,我一生都无法弄清楚,所以如果你们能提供帮助,那就太棒了!随时要求澄清您需要的任何内容!
多谢你们!
解决方案
推荐阅读
- git - 克隆到本地目录?
- sql - 视图是否适合大量数据?
- javascript - jest.spyOn 等效于 jest.mock
- c# - System.OperationCanceledException:操作已取消 - AWS 文件服务
- php - 去掉`goto`语句后如何排序,让大家更容易理解?
- python - Python Mechanize:UnboundLocalError:分配前引用的局部变量'f'
- javascript - 如何在angularjs中从HTML到$rootScope的双向绑定发送数据
- imagemagick - ImageMagick:填补大洞
- c# - Visual Studio - 从调试值创建单元测试
- python - 从源代码安装 Tensorflow 的 Bazel 构建错误