[SerializeField]
GameObject[] playerCharacterPrefabs;
short playerControllerHighestId = 0;
void OnGUI()
{
if (GUI.Button(new Rect(10, Screen.height - 60, 400, 50), "spawn a new character of mine"))
{
// pay attention here !!
ClientScene.AddPlayer(client.connection, playerControllerHighestId++);
//AddPlayer 这会将AddPlayer消息发送到服务器,并调用NetworkManager.OnServerAddPlayer。
}
}
public override void OnStartClient(NetworkClient client)
{
base.OnStartClient(client);
// always remember to register prefabs before spawning them.
//注册 prefabs
foreach (GameObject go in playerCharacterPrefabs)
ClientScene.RegisterPrefab(go);
Debug.Log("Connect to a new game");
}
public override void OnClientConnect(NetworkConnection conn)
{
base.OnClientConnect(conn);
}
public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
Debug.Log("余数 " + (playerControllerId % 2));
GameObject newPlayer = GameObject.Instantiate(playerCharacterPrefabs[playerControllerId % 2]);
newPlayer.transform.position = Vector3.zero + Vector3.right * playerControllerId;
// object spawned via this function will be a local player
// which belongs to the client connection who called the ClientScene.AddPlayer
NetworkServer.AddPlayerForConnection(conn, newPlayer, playerControllerId);
}