Unity |尝试使用客户端权限生成播放器时发生NullReferenceException [重复]

问题描述 投票:-1回答:1

此问题已经在这里有了答案:

我正在创建一个多人游戏,并尝试使用客户权限生成我的玩家预制体,以便每个玩家都可以由其各自的用户控制。

我的工作流程如下:1)主机启动,生成其PlayerUnit。2)客户端连接,生成其PlayerUnit。3)游戏开始,PlayerUnits产生各自的PlayerCharacters(这是问题所在)。

我可以使用NetworkServer.Spawn(player);产生玩家的权限,但是,这允许主机控制所有PlayerCharacters。因此,据我所知,必须使用客户端权限来生成PlayerCharacters,以便只有正确的用户才能控制它们。但是,当我用NetworkServer.SpawnWithClientAuthority(player, connectionToClient);生成PlayerCharacter时,出现以下错误:

NullReferenceException: Object reference not set to an instance of an object
UnityEngine.Networking.NetworkServer.SpawnWithClientAuthority (UnityEngine.GameObject obj, UnityEngine.Networking.NetworkConnection conn) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:1565)

SpawnWithClientAuthority NetworkConnection is not ready!
UnityEngine.Networking.NetworkServer:SpawnWithClientAuthority(GameObject, NetworkConnection)

主机仍然可以控制两个播放器角色。

这是我产生PlayerUnit的代码(在我的CustomNetworkManager中:)>

public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
    var player = Instantiate(playerPrefab);
    NetworkServer.AddPlayerForConnection(conn, player, playerControllerId); 
}

public override void OnClientConnect(NetworkConnection conn)
{
    base.OnClientConnect(conn);
    ClientScene.AddPlayer(0); 
}

这是用于生成PlayerCharacter(附加到PlayerUnit的代码:]

[Command]
public void CmdSpawnPlayer(int playerCount)
{
    CustomNetworkHUD.playerCount++;
    var players = new GameObject[] { redPlayer, bluePlayer, greenPlayer, yellowPlayer };
    var player = Instantiate(players[playerCount - 1]);
    player.SetActive(true);
    ClientScene.RegisterPrefab(player);
    NetworkServer.Spawn(player); // No errors, but not desired behaviour
    //NetworkServer.SpawnWithClientAuthority(player, connectionToClient);  
}

很抱歉,如果问题非常明显,这是我第一次与Unity联网。

我正在创建一个多人游戏,并尝试使用客户权限生成我的玩家预制体,以便每个玩家都可以由其各自的用户控制。我的工作流程如下:1)主机启动,它们的...

c# unity3d multiplayer
1个回答
0
投票

这是解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.