c# - 尝试访问 NetworkLobby 中的 LobbyPlayer 实例时出现 Unity NullPointerException

标签 c# android unity3d

我正在尝试使用 Unity 5.1.4 和 c# 为 Android 制作网络游戏。首先我做了一个可以托管和加入的网络游戏。由于团队管理的原因,我需要一个大厅,首先需要客户端与服务器建立连接以同步变量。

我使用了 Unity Standard Assets 并尝试为必要的脚本派生一些方法。将 NetworkLobby 附加到工作中的网络游戏仍然存在一些问题。

更准确地说,我需要这个大厅来让加入的玩家选择一个“团队”,并通过它来生成哪个玩家预制件。

情况/想法:

有两个主要脚本正在运行。一个扩展 NetworkLobbyManager 的 NetworkLobbyManager_custom 和一个扩展 LobbyPlayer 的 LobbyPlayer_custom。两者都是大厅的标准 Assets 。 NetworkLobbyManager 附加到 GameObject,LobbyPlayer_custom 附加到我用作大厅预制件的预制件。

NetworkLobbyManger_Custom 管理我的菜单和大厅场景中的 Canvas 和按钮。它还在服务器和客户端之间建立连接。

LobbyPlayer_custom 用于保存玩家选择的团队并更改为客户端上的游戏场景。

应用程序是这样工作的:

  1. NetworklobbyManager_custom 可让您启动主机/作为客户端加入。
  2. 在您建立连接后,会弹出一个带有两个按钮的 Canvas 来选择团队。
  3. 单击按钮后,系统会检查团队是否有空闲位置,并且所选团队应保存在 LobbyPlayer_custom 脚本中。

这是我遇到的问题。我无法访问包含脚本或用于保存选择的脚本的 LobbyPlayerPrefabs。

当我尝试访问 LobbyPlayer_custom 脚本以查找做出选择的 LobbyPlayer_custom 的 ID 时,我收到 NullPointerException。

    private string GetLobbyPlayersIdByIp (string ip)
    {
      LobbyPlayer_custom lobbyPlayer;
        for(int i=0; i< maxPlayers; i++)
        {
            if ((lobbySlots[i] != null))
            {   // nullpointer here
                lobbyPlayer = lobbySlots[i] as LobbyPlayer_custom;
                if (lobbyPlayer.GetPlayerIP().Equals(ip))
                {
                    return lobbyPlayer.GetPlayerUID();
                }
            }
        }
        return "null";
    }

我还尝试通过如下方式查找所有 LobbyPlayerPrefab 实例来访问 LobbyPlayer_custom 脚本:

    LobbyPlayer_custom lobbyPlayer;
        Object[] objs = Resources.FindObjectsOfTypeAll(typeof(GameObject));

        foreach (Object obj in objs)
        {
            if (obj.name.Contains("player") || obj.name.Contains("Player"))
            {
                lobbyPlayer = (obj as GameObject).GetComponent<LobbyPlayer_custom>();
                //none of the lobbyPlayers methods are accessible
            }          
        }

有谁知道如何访问生成的预制件的所有 LobbyPlayer 脚本?

非常感谢。

最佳答案

如果您要实例化预制件,FindObjectsOfType() 应该可以满足您的需求。另一种选择是在实例化预制件时将每个脚本实例存储在列表中。

关于c# - 尝试访问 NetworkLobby 中的 LobbyPlayer 实例时出现 Unity NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839772/

相关文章:

c# - 获取另一个类的所有属性名称 - Unity 5 C#

c# - 服务器 500 : Too many pending secure conversations

android - 移动网络应用程序的“共享功能”

android - 可检查的相对布局作为多选列表中的项目

Firebase crashlytics 没有记录所有崩溃

c# - 检查动画剪辑是否已完成

c# - Parallel.For 不使用我的主线程

c# - 程序返回 sql 语法错误,需要帮助来识别错误

c# - 如何序列化一个大集合

android - 如何在 Android 中从周日开始从 Sq-lite 检索仅 1 周的数据?