- Home /
UNet - Connecting and Testing a 'choose your character' scenario
Hi folks,
Been working on this for a couple of hours already. I'm new to networking in Unity and have followed the basic tutorials but this is a bit of a custom setup.
Currently I have 2 prefabs each with their own unique "abilities" in their code. I have created a custom network manager that accepts a list of prefabs, and have put these two in there. The manager also accepts an int which I'm currently just putting in manually in the Unity IDe to "choose your character" and OnClientConnect I'm sending this ID as a message to the ClientScene.AddPlayer method. It looks like this:
[SerializeField]
private int chosenPlayer= 0;
public GameObject[] PlayerPrefabList;
// Client
public override void OnClientConnect(NetworkConnection conn)
{
// Create message which stores our custom identifier
IntegerMessage msg = new IntegerMessage(chosenPlayer);
// Call Add player and pass the message
ClientScene.AddPlayer(conn, 0 , msg);
}
public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId, NetworkReader extraMessageReader)
{
// Variable to store the identifier
int id = 0;
// Read client message and receive identifier
if (extraMessageReader != null)
{
id = extraMessageReader.ReadMessage<IntegerMessage>().value;
}
// Select a specific prefab using the identifier (e.g. available prefabs could be stored in an array)
GameObject playerObj = PlayerPrefabList[id];
// Create player object with prefab
GameObject player = (GameObject)Instantiate(playerObj, NetworkManager.singleton.GetStartPosition().position, NetworkManager.singleton.GetStartPosition().rotation);
// Add player object for connection
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
}
The problem I'm having is two-fold:
Firstly, I want to test that I can successfully have both players on the scene at the same time. The only workflow I know for this right now is, build the game, run it on one screen, then go back and hit "play" on the ide. So what I was trying to do is build the game with 0 selected for chosenCharacter, then go into the IDE and set it to 1 before starting. It does not work as expected..the IDE appears to "hijack" the connection from running game window on the other monitor form the build, instead of coming in as a "new" player with a different prefab.
Secondly, I ultimately want to have the network manager WAIT for both players to choose their characters before spawning them (as I want to spawn them in a specific position that requires player1 to be spawned, and then player 2 above player 1). But not sure how to best approach that. Any suggestions?