UNET : Passer des paramètres entre écrans pour le joueur

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
Naografix
Messages : 16
Inscription : 16 Sep 2014 19:29

UNET : Passer des paramètres entre écrans pour le joueur

Message par Naografix » 10 Jan 2017 14:58

Bonjour,

Je travailles actuellement sur un lobby customisé où mon joueur peut choisir son pseudo ainsi que sa couleur avant de rejoindre/connecter à un lobby.

Tout d'abord, je me suis inspiré de ce lobby : https://www.assetstore.unity3d.com/en/#!/content/41836

La connexion se déroule en trois étapes :
Le joueur choisit son pseudo et sa couleur,
Ensuite il choisit un lobby
Et rejoint la salle d'attente avec ses paramètres préalablement entrés.

Image

Le soucis, c'est que je veux éviter de passer par un système de sauvegarde grâce au PlayerPrefs.
J'aimerais que tout se fasse "à la voler"

Mais voila, étant donné que le sélection de la couleur ainsi que du pseudo se font sur un écran, et que mon joueur "spawn" dans le lobby automatiquement, je n'arrive pas à lui envoyer des paramètres (nom et couleur) autrement que de passer par le PlayerPrefs.

C'est pourquoi j'aimerais savoir s'il existe une autre solution :

Voici mon code avant refonte, (copier coller de l'asset en grande partie)

Code : Tout sélectionner

//Attached to my Name Panel
public class LobbyName : MonoBehaviour
{
    public LobbyManager LobbyManager;
    public Text TxtName;

    public void OnClickValidName()
    {
        Constants.PlayerName = TxtName.text;

        LobbyManager.ChangeTo(LobbyManager.MenuLobby);
    }
}

//Attached to my canvas
public class LobbyManager : NetworkLobbyManager
{
    public Button BackButton;

    private RectTransform _currentPanel;
    public RectTransform ListLobby;
    public RectTransform MenuLobby;
    public RectTransform NameLobby;

    public string PlayerName { get; set; }

    private void Start()
    {
        _currentPanel = NameLobby; 

        NameLobby.gameObject.SetActive(true);
    }

    public void ChangeTo(RectTransform newPanel)
    {
        if (_currentPanel != null)
            _currentPanel.gameObject.SetActive(false);

        if (newPanel != null)
            newPanel.gameObject.SetActive(true);

        _currentPanel = newPanel;
    }
}

//Attached to my Player Item
public class LobbyPlayer : NetworkLobbyPlayer
{
    public Text TxtPlayerName;

    public string PlayerName = "";

    public override void OnClientEnterLobby()
    {
        base.OnClientEnterLobby();

        TxtPlayerName.text = Constants.PlayerName;

        LobbyPlayerList.Instance.AddPlayer(this);
    }
}

//Attached to my Menu lobby panel
public class LobbyMenu : MonoBehaviour
{
    public LobbyManager LobbyManager; 

    public void OnClickConnect()
    {
        LobbyManager.StartClient();

        LobbyManager.ChangeTo(LobbyManager.ListLobby); 
    }
}
Merci de votre aide.

Avatar de l’utilisateur
@RLG
Messages : 367
Inscription : 17 Jan 2015 00:13
Localisation : Rennes

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par @RLG » 10 Jan 2017 14:59

Pourquoi un 2ème post ?
Everything happens for a reason. Sometimes the reason is that you're stupid and make bad decisions.

Naografix
Messages : 16
Inscription : 16 Sep 2014 19:29

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Naografix » 10 Jan 2017 15:00

J'ai mis plus de détails dans celui ci. J'ai ensuite demandé la suppression sur l'autre post.

Avatar de l’utilisateur
Akiro
Messages : 52
Inscription : 17 Août 2016 09:59
Localisation : Suisse

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Akiro » 10 Jan 2017 15:05

Hello,

Je ne comprends pas pourquoi tu veux faire compliqué alors que la solution la plus simple reste les PlayerPrefs ?

Et comment est-ce que tu veux attribué un nom à des joueurs avec des paramètres si tu ne les sauvegarde pas quelque part ?

Si tu veux garder les noms et les paramètres que pour une session, partie, tu n'as qu'à faire un système d'effacement automatique avec les PlayerPrefs non ? (À moins que ça ne fonctionne pas comme ça, c'est de la pure algo ce que j'écris, je connais pas les PlayerPrefs :ange: ).

Naografix
Messages : 16
Inscription : 16 Sep 2014 19:29

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Naografix » 10 Jan 2017 15:08

Akiro a écrit :Hello,

Je ne comprends pas pourquoi tu veux faire compliqué alors que la solution la plus simple reste les PlayerPrefs ?

Et comment est-ce que tu veux attribué un nom à des joueurs avec des paramètres si tu ne les sauvegarde pas quelque part ?

Si tu veux garder les noms et les paramètres que pour une session, partie, tu n'as qu'à faire un système d'effacement automatique avec les PlayerPrefs non ? (À moins que ça ne fonctionne pas comme ça, c'est de la pure algo ce que j'écris, je connais pas les PlayerPrefs :ange: ).
Salut !

Merci de ta réponse.

Et bien je voulais éviter de sauvegarder le pseudo ainsi que la couleur avec le PlayerPrefs pour ne pas les sauvegarder en "dur"
https://docs.unity3d.com/ScriptReferenc ... Prefs.html

J'aimerais juste que ce que je rentre dans mes écrans, reste sur la session ingame. Si le joueur quitte, tout se supprimera.

Avatar de l’utilisateur
@RLG
Messages : 367
Inscription : 17 Jan 2015 00:13
Localisation : Rennes

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par @RLG » 10 Jan 2017 15:13

Everything happens for a reason. Sometimes the reason is that you're stupid and make bad decisions.

Naografix
Messages : 16
Inscription : 16 Sep 2014 19:29

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Naografix » 10 Jan 2017 15:14

@RLG a écrit :Tu peux nettoyer les PlayerPrefs : https://docs.unity3d.com/ScriptReferenc ... teAll.html
Bon et bien, apparemment je suis obliger de passer par des PlayerPrefs ^^'

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Moi 1971 » 10 Jan 2017 15:19

Les PlayerPrefs servent à sauvegarder des données sur l'ordinateur du joueur. Pas sur l'ordi/serveur du jeu.
Les PlayerPrefs peuvent te servir à sauvegarder le nom et la couleur que le joueur à choisi pour les réutiliser ultérieurement.
Ainsi, s'il y a des des sonnées dans les PlayerPrefs, tu pourras renseigner le nom et la couleur que le joueur aura choisi avant pour lui éviter de re-saisir toujours la même chose à chaque fois qu'il lance le jeu.

Naografix
Messages : 16
Inscription : 16 Sep 2014 19:29

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Naografix » 10 Jan 2017 15:22

Je connais parfaitement le fonctionnement du PlayerPrefs, je sais que cela semble logique d'utiliser ça.

Mais je voulais connaître une autre solution que d'utiliser les PlayerPrefs, car dans certain cas, je ne pourrais pas utiliser cette sauvegarde alors que j'aurais le cas similaire du "passement" de données

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: UNET : Passer des paramètres entre écrans pour le joueur

Message par Moi 1971 » 10 Jan 2017 15:55

Une autre solution :
Créer ton propre fichier de sauvegarde sur l'ordi du joueur.
Créer ton propre fichier de sauvegarde sur un serveur distant. Fichier ou base de données.

Pour renseigner une variable il faut accéder à l'objet qu'il la contient.
Si l'Objet joueur possède une variable "nom" de type string et "couleur" de type int.

Code : Tout sélectionner

Objet.nom = "Le nom du joueur";
Objet.couleur = 2;
Exactement de la même manière que quand tu fais :

Code : Tout sélectionner

TxtPlayerName.text = Constants.PlayerName;

Répondre

Revenir vers « Scripting »