【问题标题】:Unity Mirror Networking InvalidCastException: Specified cast is not validUnity Mirror Networking InvalidCastException:指定的演员表无效
【发布时间】:2021-11-05 09:16:03
【问题描述】:

我试图创建一个自定义播放器生成器,但一直遇到

"指定的强制转换无效

尝试在网上搜索但所有结果都没有用,所以希望这里的人可以帮助我。

问题行:

NetworkServer.AddPlayerForConnection(conn, playerobject); 

....是错误发生。 (以下为完整错误)

代码:

public override void OnClientConnect(NetworkConnection conn)
{
    var connection = conn;
    connlist.Add(connection);

    if (!clientLoadedScene)
    {
        if (!NetworkClient.ready) NetworkClient.Ready();
        {
            GameObject playerobject = (GameObject)Instantiate(Player, new Vector3(0, 0, 0), new Quaternion(0, 0, 0, 0));
            playerobject.GetComponent<PlayerManager>().PlayerName = nameplayer;
            NetworkServer.AddPlayerForConnection(conn, playerobject);
            Debug.Log(nameplayer + " is spawned!");
        }
    }

    base.OnClientConnect(conn);
}

错误已满:

InvalidCastException:指定的强制转换无效。 Mirror.NetworkIdentity.SetClientOwner (Mirror.NetworkConnection conn) (在 Assets/Mirror/Runtime/NetworkIdentity.cs:250) Mirror.NetworkServer.AddPlayerForConnection (Mirror.NetworkConnection conn, UnityEngine.GameObject 播放器) (在 Assets/Mirror/Runtime/NetworkServer.cs:617) NetManager.OnClientConnect (Mirror.NetworkConnection conn) (在 Assets/Scripts/NetManager.cs:58) Mirror.NetworkManager.OnClientAuthenticated (Mirror.NetworkConnection conn) (在 Assets/Mirror/Runtime/NetworkManager.cs:1158) Mirror.NetworkManager.OnClientConnectInternal () (在 Assets/Mirror/Runtime/NetworkManager.cs:1142) Mirror.LocalConnectionToServer.Update () (在 Assets/Mirror/Runtime/LocalConnections.cs:84) Mirror.NetworkClient.NetworkLateUpdate () (在 Assets/Mirror/Runtime/NetworkClient.cs:1249) Mirror.NetworkLoop.NetworkLateUpdate()(在 Assets/Mirror/Runtime/NetworkLoop.cs:189)

【问题讨论】:

    标签: c# unity3d multiplayer


    【解决方案1】:

    我不确定你在哪一行得到错误,但据我所知,Instantiate() 方法返回一个GameObject,所以你不需要转换它,另外你不应该将您的连接var 存储在列表中,如果您打算保留它,您修改后的代码应类似于:

    public override void OnClientConnect(NetworkConnection conn)
    {
        connlist.Add(conn);
    
        if (!clientLoadedScene)
        {
            if (!NetworkClient.ready) NetworkClient.Ready();
            {
                var playerobject = Instantiate(Player, new Vector3(0, 0, 0), new Quaternion(0, 0, 0, 0));
                playerobject.GetComponent<PlayerManager>().PlayerName = nameplayer;
                NetworkServer.AddPlayerForConnection(conn, playerobject);
                Debug.Log(nameplayer + " is spawned!");
            }
        }
    
        base.OnClientConnect(conn);
    }
    

    【讨论】:

    • 是的,那是在我得到错误之后我尝试了很多我还没有删除它但是 AddPlayerForConnection 是问题
    【解决方案2】:

    我找到了一个解决方案,我将 Spawn 代码移到了 OnServerAddPlayer 而不是 OnClientConnect 的函数中,它解决了所有问题并且效果惊人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-05
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多