繁体   English   中英

Unity Mirror Networking InvalidCastException:指定的演员表无效

[英]Unity Mirror Networking InvalidCastException: Specified cast is not valid

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

"指定的演员表无效

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

问题行:

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) (at Assets/Mirror/Runtime/NetworkIdentity.cs:250) Mirror.NetworkServer.AddPlayerForConnection (Mirror.NetworkConnection conn, UnityEngine.GameObject player) (at Assets/Mirror/Runtime/NetworkServer .cs:617) NetManager.OnClientConnect (Mirror.NetworkConnection conn) (at Assets/Scripts/NetManager.cs:58) Mirror.NetworkManager.OnClientAuthenticated (Mirror.NetworkConnection conn) (at Assets/Mirror/Runtime/NetworkManager.cs:1158 ) Mirror.NetworkManager.OnClientConnectInternal() (at Assets/Mirror/Runtime/NetworkManager.cs:1142) Mirror.LocalConnectionToServer.Update() (at Assets/Mirror/Runtime/LocalConnections.cs:84) Mirror.NetworkClient.NetworkLateUpdate() (在 Assets/Mirror/Runtime/NetworkClient.cs:1249)Mirror.NetworkLoop.NetworkLateUpdate () (在 Assets/Mirror/Runtime/NetworkLoop.cs:189)

我不确定您在哪一行遇到错误,但我记得Instantiate()方法返回了一个GameObject因此您不需要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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM