团结|尝试使用客户端权限生成播放器时发生NullReferenceException

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

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

我可以使用agm-map{ height: 500px } 使玩家满意,但是,这使主机可以控制所有PlayerCharacters。因此,据我所知,必须使用客户端权限来生成PlayerCharacters,以便只有正确的用户才能控制它们。但是,当我用NetworkServer.Spawn(player);生成PlayerCharacter时,出现以下错误:

NetworkServer.SpawnWithClientAuthority(player,connectionToClient);

并且主机仍然可以控制两个玩家角色。

这是我用于生成PlayerUnit的代码(在我的CustomNetworkManager中):

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)

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

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); 
}

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

nijiaoshenmene 回答:团结|尝试使用客户端权限生成播放器时发生NullReferenceException

这是解决方案:

问题在于在PlayerUnit和PlayerCharacters之间传递连接。

通过使用NetworkServer.ReplacePlayerForConnection(connectionToClient,player,connectionID);,我为PlayerCharacter提供了PlayerUnit先前拥有的连接。

这至少是我的理解。

https://docs.unity3d.com/2017.1/Documentation/ScriptReference/Networking.NetworkServer.ReplacePlayerForConnection.html

本文链接:https://www.f2er.com/3131000.html

大家都在问