Un Scriptable Object est un objet scriptable dans Unity qui permet de stocker des données. C’est un conteneur de données qui peut être utilisé pour stocker toutes sortes d’informations, telles que des paramètres de jeu, des objets d’inventaire, des statistiques de joueur, etc.
Jusqu’ici tous tes scripts n’ont été que pour créer des composants. Tu les ajoutes à une objet qui existe déjà dans la scène afin de modifier leur comportement. Mais quand il s’agit de stocker des données persistantes, comme des objets d’inventaire, des dialogues ou des réglages, c’est souvent bien plus pratique de les manipuler directement dans les assets à l’aide des ScriptableObject!
Un ScriptableObject est comme un modèle d’asset que tu vas pouvoir instancier et manipuler directement depuis tes assets!
En bref, les ScriptableObjects sont un excellent moyen de stocker des données dans Unity et de les rendre facilement accessibles à la fois pour le développeur et le joueur.
La première étape consiste à créer un script qui servira de modèle pour notre ScriptableObject!
using UnityEngine; |
Il y a plusieurs choses à faire remarquer par rapport à un script ordinaire:
Dans cet exemple, on a placé le ScriptableObject dans le menu “Magic RPG/Objet” !
Pour créer une instance de cet objet, tu peux simplement cliquer avec le bouton droit de la souris dans l’onglet Projet et sélectionner « Create → Magic RPG → Item ». Cela créera une nouvelle instance de l’objet scriptable qui peut être modifiée indépendamment des autres instances.
Maintenant que tu as plusieurs Assets dérivés de ton ScriptableObject, tu peux les paramétrer un à un dans l’inspecteur!
Cela consiste à remplir les champs vides de chaque objet que tu as créé!
Tu peux considérer un ScriptableObject comme un objet qui vit en dehors de ta scène. Tu peux l’assigner à n’importe quel composant pour qu’il puisse en lire et modifier les variables publiques!
Ce script par exemple, va ajouter un à l’objet assigné à chaque fois que je démarre le jeu:
public class AjouterObjet : MonoBehaviour |
Item est le nom du modèle du ScriptableObject défini plus haut. Ça peut être Quest, Dialogue ou Power à la place! Tout dépend du type de ScriptableObject que tu as défini!
quantite est l’une des variable publiques définie à l’intérieur du ScriptableObject. C’est cette variable que nous souhaitons affecter dans cet exemple!
Il suffit d’assigner le bon Asset de type Item dans l’inspecteur et il sera affecté à chaque fois que tu lances le jeu
Remarque ce qu’il se passe quand tu lances le jeu plusieurs fois de suite: La valeur du ScriptableObject continue d’augmenter sans se réinitialiser même une fois qu’on arrête le jeu! ⚠️
C’est parce que les ScriptableObjects existent en dehors de la scène! Ils ne sont donc pas remis par défaut quand on quitte la scène!
C’est très pratique pour garder des informations d’une scène à l’autre (comme l’inventaire) mais si tu souhaites remettre tout à zéro à chaque fois que la scène se lance, il faudra coder spécifiquement un script qui s’en occupe!
Exemple:
public class ResetItem : MonoBehaviour |