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 '11 at 02:28 PM

Tommy gravatar image

Tommy
156 20 22 27

(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 '11 at 12:58 PM

Tommy gravatar image

Tommy
156 20 22 27

(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 '11 at 02:50 PM

Statement gravatar image

Statement ♦♦
20.1k 35 70 175

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 '11 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 '11 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 '11 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 '11 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 '11 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:

x3698
x825
x296
x151

asked: Mar 28 '11 at 02:28 PM

Seen: 2071 times

Last Updated: Mar 28 '11 at 03:20 PM