Créer des ScriptableObjects dans Unity

ScriptableObject dans Unity est un type spécial de classe qui permet la création d'objets réutilisables basés sur les données. Il est couramment utilisé pour stocker et gérer les données de jeu, les configurations et les paramètres, mais peut également être utilisé à diverses fins, telles que la gestion des paramètres de jeu, la création de systèmes basés sur les données, la définition des capacités des personnages, le stockage dialogue ou informations de quête, etc. Il offre un moyen flexible et efficace d'organiser et de gérer les données dans les Unity projets.

Le principal avantage des ScriptableObjects est qu'ils permettent de créer des conteneurs de données qui peuvent être facilement partagés et réutilisés dans plusieurs instances de scripts. Ils peuvent être considérés comme "blueprints" pour créer des instances d'un type de données spécifique. Il est possible de créer plusieurs instances d'un ScriptableObject et de modifier leurs données indépendamment.

Créer un objet scriptable

ScriptableObject peut être créé dans l'éditeur Unity et enregistré en tant qu'actif dans le projet. Contrairement aux scripts MonoBehaviour, ScriptableObject n'est pas attaché à GameObject dans la scène mais peut être référencé et utilisé par d'autres scripts.

Pour créer un ScriptableObject, suivez les étapes ci-dessous:

  • Dans l'éditeur Unity, cliquez avec le bouton droit dans la fenêtre Projet et accédez à "Create -> C# ScriptableObject".
  • Donnez-lui un nom significatif et ouvrez le script dans l'éditeur de code préféré.

Définition de la classe ScriptableObject:

  • Dans le script, héritez de la classe ScriptableObject.
  • Définissez des champs publics ou des propriétés pour représenter les données à stocker dans le ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    public string dataName;
    public int dataValue;
}

Dans l'exemple ci-dessus, nous définissons une classe ScriptableObject avec deux champs publics: 'dataName (string)' et 'dataValue (int)'.

Personnalisation du ScriptableObject dans l'inspecteur:

  • Utilisez des attributs tels que '[SerializeField]' pour exposer des champs spécifiques à l'inspecteur Unity pour modification tout en gardant ces champs inaccessibles à partir du script qui utilisez ce ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    private string dataName;

    [SerializeField]
    private int dataValue;
}

Création d'instances de ScriptableObjects:

  • Dans l'éditeur Unity, cliquez avec le bouton droit dans la fenêtre Projet et sélectionnez "Create" pour créer une instance du ScriptableObject.
  • Personnalisez les données de l'instance créée dans l'inspecteur.

Accéder aux données ScriptableObject à partir d'autres scripts:

  • Dans le script MonoBehaviour ou tout autre script, créez un champ public ou sérialisé de type ScriptableObject et affectez-le dans la vue Inspecteur.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Les données de l'instance de ScriptableObject sont alors accessibles via le champ attribué.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

    private void Start()
    {
        Debug.Log("Data Name: " + myData.dataName);
        Debug.Log("Data Value: " + myData.dataValue);
    }
}

Conclusion

Les ScriptableObjects sont un outil polyvalent pour gérer et organiser les données dans les projets de jeu. En créant des conteneurs de données réutilisables et personnalisables, ScriptableObjects offre un moyen flexible et efficace de stocker des configurations, des paramètres et d'autres informations non spécifiques à l'instance. Avec la possibilité de créer plusieurs instances d'un ScriptableObject et de modifier leurs données indépendamment, il devient facile de créer des systèmes pilotés par les données, de gérer les paramètres de jeu, de définir les capacités des personnages, de stocker les dialogues ou les informations de quête, et bien plus encore. L'utilisation de ScriptableObjects améliore la réutilisabilité, la maintenabilité et l'évolutivité des projets Unity, rationalisant finalement le processus de développement et permettant la création de jeux plus robustes et dynamiques.

Articles suggérés
Créer des jeux au tour par tour dans Unity
Ouverture de tiroirs et d'armoires avec des clés spécifiques dans Unity
Créer un jeu de puzzle dans Unity
Créer un jeu inspiré de Pac-Man dans Unity
Comment lire des fichiers vidéo dans Unity
Implémentation des objectifs dans Unity Games
Interagir avec des objets dans le jeu Unity