Я создаю многопользовательскую игру и пытаюсь создать префаб моего игрока с правами клиента, чтобы каждый игрок мог контролировать его соответствующий пользователь.
Мой рабочий процесс выглядит следующим образом: 1) Хост запускается, его PlayerUnitпородил. 2) Клиент подключается, его PlayerUnit создается. 3) Игра начинается, PlayerUnits порождает соответствующих PlayerCharacters (Вот в чем проблема).
Я могу появиться в порядке игрока, используя NetworkServer.Spawn(player);
, однако это позволяет хосту контролировать все PlayerCharacters. Поэтому, насколько я понимаю, PlayerCharacters должен порождаться с полномочиями клиента, чтобы только правильный пользователь мог контролировать их. Однако, когда я запускаю PlayerCharacter с NetworkServer.SpawnWithClientAuthority(player, connectionToClient);
, я получаю следующие ошибки:
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.