Comment utilisez-vous un Singleton ?
Un Singleton est un modèle de conception qui garantit qu'il n'y a qu'une seule instance d'une classe particulière dans un programme.
Le modèle Singleton fournit une instance globale unique d'une classe, la rendant facilement accessible depuis d'autres scripts qui en ont besoin, comme la gestion de la logique, de l'audio, de l'interface utilisateur et des ressources centralisées dans le monde.
Dans ZEPETOScript, vous pouvez implémenter un Singleton de la manière suivante :
private static _instance: ClassName = null;
public static get Instance(): ClassName {
if (this._instance == null) {
this._instance = GameObject.FindObjectOfType<ClassName>();
}
return this._instance;
}👍 Conseils
- S'il y a déjà un GameObject avec un script Singleton attaché dans la scène, vous pouvez utiliser ce format.
- S'il n'y en a pas, ajoutez du code pour créer le GameObject.
- Exemple : new GameObject("NomObjet").AddComponent<ClassName>();
Implémentons un Singleton pour gérer l'interface utilisateur dans un exemple :
1) Ajoutez UI > Texte et Bouton à la scène.
- Configurez la logique pour augmenter le score lorsque le bouton "AugmenterScore" est pressé
- Configurez la logique pour diminuer le score lorsque le bouton "DiminuerScore" est pressé

2) Créez un script appelé "ScoreManager," où le Singleton sera appliqué.
- Le script ScoreManager sera responsable de l'augmentation/diminution du score et de la mise à jour du texte lorsqu'il est appelé depuis d'autres scripts.
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { GameObject } from 'UnityEngine';
import { Text } from 'UnityEngine.UI';
export default class ScoreManager extends ZepetoScriptBehaviour {
// Déclaration du Singleton
private static _instance: ScoreManager = null;
public static get Instance(): ScoreManager {
if (this._instance == null) {
this._instance = GameObject.FindObjectOfType<ScoreManager>();
}
return this._instance;
}
// Déclaration des variables
public scoreText: Text;
private _currentScore : number;
Start() {
// Définir le score initial à 0 pour les tests
this._currentScore = 0;
}
// D'autres scripts peuvent appeler IncreaseScore
public IncreaseScore(amount: number) {
this._currentScore += amount;
this.scoreText.text = `Score : ${this._currentScore}`;
}
// D'autres scripts peuvent appeler DecreaseScore
public DecreaseScore(amount: number) {
this._currentScore -= amount;
this.scoreText.text = `Score : ${this._currentScore}`;
}
}
- Description du script
- private static _instance: C'est une variable statique privée au sein de la classe, initialement définie sur null.
- public static get Instance: Cette propriété statique fournit un moyen pour le code externe d'accéder à l'instance unique de cette classe.
- Vérifiez if (this.\_instance == null). Si c'est null, utilisez GameObject.FindObjectOfType<>() pour trouver et retourner un composant de type ClassName, et l'assigner à la variable statique.
3) Après avoir écrit le script, retournez à l'Inspecteur et connectez le composant Texte.

4) Ensuite, créez un script appelé "ScoreLogicSample" pour démontrer comment appeler le Singleton. Assurez-vous que ScoreManager et ScoreLogicSample sont dans le même répertoire.

- Écrivez du code comme ceci :
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { GameObject } from 'UnityEngine';
import { Text, Button } from 'UnityEngine.UI';
// Importer le script Singleton
import ScoreManager from './ScoreManager';
export default class ScoreLogicSample extends ZepetoScriptBehaviour {
public increaseScoreButton: Button;
public decreaseScoreButton: Button;
// Déclarer une variable de type ScoreManager
private ScoreManager : ScoreManager;
Start() {
// Assigner ScoreManager à la variable
this.ScoreManager = GameObject.FindObjectOfType<ScoreManager>();
this.increaseScoreButton.onClick.AddListener(()=> {
// Appeler la fonction déclarée dans le Singleton
this.ScoreManager.IncreaseScore(10);
});
this.decreaseScoreButton.onClick.AddListener(()=> {
// Appeler la fonction déclarée dans le Singleton
this.ScoreManager.DecreaseScore(10);
});
}
}
- Il est important de spécifier le chemin correctement lors de l'obtention du script Singleton.
- Vous pouvez adapter la partie où ScoreManager est appelé dans votre propre script selon vos besoins.
5) Appuyez sur le bouton [▶︎(lecture)] pour tester.
- Vous devriez observer les fonctions dans ScoreManager être appelées lorsque vous cliquez sur les boutons dans ScoreLogicSample, ce qui les fait fonctionner comme prévu.
