x


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.

more ▼

asked Feb 11 '11 at 04:08 AM

Persona gravatar image

Persona
246 74 85 96

What exactly are you trying to achieve? A Main Menu screen, a screen that could select multiple characters the player could control?

Feb 11 '11 at 04:25 AM fireDude67

Pick from multiple characters.

Feb 12 '11 at 12:14 AM Persona
(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

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.
    }
}
more ▼

answered Feb 18 '11 at 04:27 PM

burnumd gravatar image

burnumd
3.3k 22 34 71

I'm assuming that for (var i : int = 0; i < numberOfPlayers; i++) { selectedPlayers[i] = characterProfiles[playerSelections[i]]; }

Goes in the update function of character selection?

Feb 20 '11 at 04:06 PM Persona

Nope. The way I've set it up selectedPlayers is static, meaning it (and whatever it contains) will live between scenes. I was presuming 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.

Feb 21 '11 at 02:29 PM burnumd
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x794
x384
x239
x130
x26

asked: Feb 11 '11 at 04:08 AM

Seen: 2815 times

Last Updated: Feb 11 '11 at 04:08 AM