Я пытаюсь создавать разные префабы в зависимости от платформы игрока. Поэтому я переопределяю NetworkLobbyManager, чтобы создавать объекты так, как я хочу. Итак, я создаю Dictionnary, который связывает connectionId с индексом префаба, а затем я создаю экземпляр префаба в соответствии с этим индексом.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class LobbyManager : NetworkLobbyManager
{
private Dictionary<int, int> m_currentPlayers;
void Start()
{
m_currentPlayers = new Dictionary<int, int>();
}
void AddPlayer(NetworkConnection conn)
{
if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
m_currentPlayers.Add(conn.connectionId, 0);
}
else if (Application.platform == RuntimePlatform.Android)
{
m_currentPlayers.Add(conn.connectionId, 1);
}
}
public override GameObject OnLobbyServerCreateLobbyPlayer(NetworkConnection conn, short playerControllerId)
{
AddPlayer(conn);
return base.OnLobbyServerCreateLobbyPlayer(conn, playerControllerId);
}
public override GameObject OnLobbyServerCreateGamePlayer(NetworkConnection conn, short playerControllerId)
{
GameObject go = Instantiate(spawnPrefabs[m_currentPlayers[conn.connectionId]]);
NetworkServer.AddPlayerForConnection(conn, go, playerControllerId);
return go;
}
}
Но с этим кодом спаун игрока на клиенте всегда такой же, как и на хосте, и я не знаю почему, потому что кажется, что я переопределяю правильные функции, и я видел здесь http://abrgame.blogspot.fr/2016/01/using-unet-to-spawn-other-player.html парень, который использовал ту же технику, и это работает для него...