[英]InvalidCastException: Specified cast is not valid in Unity
[英]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.