Page 1 sur 1

[System.Serializable] ou Static

Publié : 12 Fév 2021 12:04
par lol7
Bonjour à tous,

testant les "bonnes pratiques" en code, j'essaie pour le moment deux approches de stockage de variables dans des Class (pour isoler par exemple des données de joueur, ce qui me permettra plus facilement de faire par la suite un encodage binaire pour sauvegarder ces mêmes données).

Pour le moment, je passe par du [System.Serializable]

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]

public class PlayerTest // Pas Mono
{
    // Vars
    [HideInInspector]
    public int playerInfo = 5;
}
ou du Static

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class PlayerTest2 // Pas Mono
{
    // Vars
    public static int playerInfo2 = 5;
}
Bon, les deux me semblent équivalent en praticité (a priori .... :) ). Je peux appeler et modifier à la volée leur valeur facilement. La seule "grosse différence" est que je dois déclarer en amont ma Class utilisant la solution [System.Serializable]. Alors que je peux taper directement dans ma Class Static sans déclaration préalable.

Code : Tout sélectionner

public class Player : MonoBehaviour
{
    // Déclaration de la Class utilisant [System.Serializable]
    public PlayerTest playerTest;
    
       void Start()
      {
        // TEST avec [System.Serializable]
        Debug.Log("PlayerTest : " + playerTest.playerInfo); // [System.Serializable]
        playerTest.playerInfo = playerTest.playerInfo + 1;
        Debug.Log("PlayerTest Plus : " + playerTest.playerInfo); // [System.Serializable]

       // TEST avec Static
        Debug.Log("PlayerTest2 : "+ PlayerTest2.playerInfo2); // Static
        PlayerTest2.playerInfo2 = PlayerTest2.playerInfo2 + 1;
        Debug.Log("PlayerTest2 Plus : " + PlayerTest2.playerInfo2); // Static
        }
}
Avez vous une préférence de votre côté ? Des arguments pour favoriser une méthode plus que l'autre ?

Merci !!!

PS : je connais également le principe du Singleton, que j'utilise par ailleurs, sur une Class plus générique de gestion de mon jeux.

Re: [System.Serializable] ou Static

Publié : 14 Fév 2021 23:17
par youtpout
Pour sérialiser tes données en binaire/json ou je ne sais quoi d'autre il faut que tes données soit sérialisable, normalement en c# les champs/classe statique ne sont pas sérialisable (avec unity on est pas à une incohérence prêt).

Re: [System.Serializable] ou Static

Publié : 18 Fév 2021 07:32
par lol7
Merci Youtpout.

Oui, effectivement, je pense que c'est l'élément clef. Je vais dissocier ces utilisations dans ce sens : besoin d'externaliser ou non.

Re: [System.Serializable] ou Static

Publié : 22 Fév 2021 12:46
par eldoir
Hello,
Je pense que tu ferais mieux d'utiliser [System.Serializable].
Tes variables static sont persistantes entre les scènes, ce qui peut occasionner des bugs assez obscurs.
Mais je suis curieux d'avoir les avis d'autres personnes ! :)