[System.Serializable] ou Static

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
lol7
Messages : 4
Inscription : 09 Juil 2018 10:29

[System.Serializable] ou Static

Message par lol7 » 12 Fév 2021 12:04

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.

youtpout
Messages : 58
Inscription : 15 Nov 2020 15:54

Re: [System.Serializable] ou Static

Message par youtpout » 14 Fév 2021 23:17

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).

lol7
Messages : 4
Inscription : 09 Juil 2018 10:29

Re: [System.Serializable] ou Static

Message par lol7 » 18 Fév 2021 07:32

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.

Avatar de l’utilisateur
eldoir
Messages : 8
Inscription : 25 Août 2016 16:54
Localisation : France
Contact :

Re: [System.Serializable] ou Static

Message par eldoir » 22 Fév 2021 12:46

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 ! :)

Répondre

Revenir vers « Scripting »