- Home /
how do I set up a character selection menu?
I'm trying to set up a character selection menu for my game, so it can have a VS mode where the player and enemy choice will spawn once the match starts. I know I need to use booleans to do it, but my mind is a bit foggy to the rest.
What exactly are you trying to achieve? A $$anonymous$$ain $$anonymous$$enu screen, a screen that could select multiple characters the player could control?
Answer by burnumd · Feb 18, 2011 at 04:27 PM
You'll want to set up a class that contains information about both the prefab to spawn and any GUIContent associated with the character. The simplest example would be:
//JS
var selectionScreenProfile : GUIContent;
var characterToSpawn : GameObject;
Store a bunch of these in some collection (like an Array).
In your GUI, you'll need to keep track of which player has selected which player, which you can do by keeping an int for each player. So your GUI script may start out something like...
var characterProfiles : CharacterProfile[] //Presuming the script above is named CharacterProfile.js var numberOfPlayers : int = 1;
private var playerSelections : int[];
function Awake () { playerSelections = new int[numberOfPlayers]; }
I don't know how your character selection screen input is supposed to work, but you simply change the number associated with whichever player selected a character, ie, for player 1:
playerSelections[0] = 5
Assuming player 1 selected the fifth character in characterProfiles
. In the GUI, you'd draw a box around (or in some other way distinguish) the profile when it's drawn. When you're ready to move on to the actual game stage, you'll need a record of whichever characters the player has selected. So let's add this to the top of the script:
public static var selectedPlayers : CharacterProfile[];
And change Awake to say
function Awake () {
playerSelections = new int[numberOfPlayers];
selectedPlayers = new CharacterProfile[numberOfPlayers];
}
And just before you load the fight scene, record those selections:
for (var i : int = 0; i < numberOfPlayers; i++)
{
selectedPlayers[i] = characterProfiles[playerSelections[i]];
}
When the fightScene loads, have some script get the players and instantiate them (presuming your character selection scene GUI script is CharacterSelection.js:
function Start ()
{
for (var i : int = 0; i < CharacterSelection.selectedPlayers.length ; i++)
{
GameObject.Instantiate (CharacterSelection.selectedPlayers[i], spawnPosition, spawnRotation);
//Do any other setup associated with player creation.
}
}
I'm assu$$anonymous$$g that for (var i : int = 0; i < numberOfPlayers; i++) { selectedPlayers[i] = characterProfiles[playerSelections[i]]; }
Goes in the update function of character selection?
Nope. The way I've set it up selectedPlayers is static, meaning it (and whatever it contains) will live between scenes. I was presu$$anonymous$$g that your character selection screen would be a different Unity scene than your actual fight stage. So it's basically there as a placeholder to keep a reference to whatever characters your players have selected. That's why I say you should only use that when all the players have selected their characters and you're about to move on to the next scene.
Answer by gabriele-picco · Mar 27, 2019 at 09:59 AM
The solution I adopted was to attach objects to the transparent buttons in a scrool rect, so as to manage 3d objects with the convenient of scrool rect interface.
Here you can find the official documentation for use scrool rect: http://docs.unity3d.com/Manual/script-ScrollRect.html
Maybe my assets can serve you ;)
https://assetstore.unity.com/packages/templates/systems/character-selector-pro-113136
Your answer
Follow this Question
Related Questions
Player movement isn't working 1 Answer
Pause Android game- menu pop-up? 1 Answer
Having trouble with puase menu using standard playercontroller 0 Answers
Cannot set boolean variable from another script 1 Answer
boolean flicker 3 Answers