x


Display Playerpref string in GUI.TextField.

Hey, i've got some trouble as im trying to display a Playerpref string in a gui textfield, heres the code:

var name1 : String = PlayerPrefs.GetString("Player1 Name");
var namevar1 : String;

function OnGUI () { 
        GUI.Box (Rect (10, 40,500,500), ""); 
        GUI.Label (Rect (20, 50,100,20), "Spelare #1 - ");
        namevar1 = GUI.TextField (Rect (90, 50,100,20), ""+name1);
        PlayerPrefs.SetString("Player1 Name", namevar1);
        //player1lvl = GUI.TextField (Rect (195, 50,100,20), ""+player1lvl);
        //PlayerPrefs.SetString("Player1 Level", player1lvl);
        //p1use = GUI.TextField (Rect (300, 50,15,20), ""+p1use);
        //PlayerPrefs.SetString("Player1 Use", p1use);
}

Made lines that ain't relevant right now comments. Thanks in advance!

Current code:

var playerName : String;

function OnEnable() {
    playerName = PlayerPrefs.GetString("Player1 Name", "Player 1");
}

function OnDisable() {
    PlayerPrefs.SetString("Player1 Name", playerName);
}

function OnGUI () { 
    if (GUI.Button (Rect (10,10,100,20), "Instllningar")) 
        showMoreGui = true; 

    if (showMoreGui) { 
        GUI.Box (Rect (10, 40,500,500), ""); 
        GUI.Label (Rect (20, 50, 100, 20), "Spelare #1 - ");
        playerName = GUI.TextField (Rect (90, 50, 100, 20), playerName);

        if (GUI.Button (Rect (400, 510,100,20), "Stng")) 
            showMoreGui = false; 
    }
} 
more ▼

asked Mar 28, 2011 at 02:28 PM

Tommy gravatar image

Tommy
171 56 42 47

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

Here isa sulotion, that works just fine for me:

var namevar1 : String;
var name1 : String;

function Update()
{
 name1 = PlayerPrefs.GetString("Player1 Name");
 namevar1 = name1;
}

function OnGUI () { 
GUI.Box (Rect (10, 40,500,500), ""); 
        GUI.Label (Rect (20, 50,100,20), "Spelare #1 - ");
        namevar1 = GUI.TextField (Rect (90, 50,100,20), ""+namevar1);

        if (GUI.changed)
    {
        PlayerPrefs.SetString("Player1 Name", namevar1);
    }
}

This will display the playerpref string "Player 1 Name", in the GUI textfield.

more ▼

answered Apr 07, 2011 at 12:58 PM

Tommy gravatar image

Tommy
171 56 42 47

(comments are locked)
10|3000 characters needed characters left

You aren't passing the same variable to the textfield as you get returned.

namevar1 = GUI.TextField (..., name1); // See that you use different variables?

Also, it is probably better to make load/save in OnEnable and OnDisable because I heard PlayerPrefs is somewhat slow. This also makes your GUI code much cleaner. Varsgod :)

var playerName : String;

function OnEnable() {
    playerName = PlayerPrefs.GetString("Player1 Name", "Player 1");
}

function OnDisable() {
    PlayerPrefs.SetString("Player1 Name", playerName);
}

function OnGUI () { 
    GUI.Box (Rect (10, 40, 500, 500), GUIContent.none); 
    GUI.Label (Rect (20, 50, 100, 20), "Spelare #1 - ");
    playerName = GUI.TextField (Rect (90, 50, 100, 20), playerName);
}
more ▼

answered Mar 28, 2011 at 02:50 PM

Statement gravatar image

Statement
26k 76 108 241

I'm still trying to get this working for 18 objects that should do the same (18 textfields). Just woundering what the second var at the "playerName = PlayerPrefs.GetString("Player1 Name", "Player 1");" does? :)

Mar 28, 2011 at 03:02 PM Tommy

The second variable "Player 1" is the default value returned if there was no value to start with. For example, playing the game for the first time. It's just a convenience so you don't have to write code such as if !exists player1, set player1 "Player 1". If you are going to repeat input like that I'd suggest you make a function that handles this automatically. Store each player value in a new class for easier variable management.

Mar 28, 2011 at 03:05 PM Statement

I suggest you make helper functions like LabelTextField which accept two parameters (except rect). Like so: LabelTextField(Rect (10, 40, 500, 500), "Spelare #1", player1.name);

Mar 28, 2011 at 03:07 PM Statement

And also make a higher level function like PlayerGUI(Rect(.....), player1) which in turn make use of LabelTextField, which you also have to code for yourself. Much cleaner than having a ton of controls right after each other :)

Mar 28, 2011 at 03:08 PM Statement

To group gui items make use of GUI.BeginGroup and GUI.EndGroup. That way you can work with relative position. There's also GUILayout so you don't have to deal a lot with rect sizes. Either way works of course and as long you get the job done any way is the right way :)

Mar 28, 2011 at 03:10 PM Statement
(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:

x5753
x1352
x507
x238

asked: Mar 28, 2011 at 02:28 PM

Seen: 3329 times

Last Updated: Mar 28, 2011 at 03:20 PM