Bagaimana Anda menggunakan suatu Singleton?
Singleton adalah pola desain yang memastikan hanya ada satu instance dari kelas tertentu dalam sebuah program.
Pola Singleton menyediakan satu instance global dari sebuah kelas, membuatnya mudah diakses dari skrip lain yang membutuhkannya, seperti mengelola logika, audio, UI, dan sumber daya terpusat dalam dunia.
Dalam ZEPETOScript, Anda dapat mengimplementasikan Singleton dengan cara berikut:
private static _instance: ClassName = null;
public static get Instance(): ClassName {
if (this._instance == null) {
this._instance = GameObject.FindObjectOfType<ClassName>();
}
return this._instance;
}👍 Tips
- Jika sudah ada GameObject dengan skrip Singleton yang terpasang di Scene, Anda dapat menggunakan format ini.
- Jika tidak ada, tambahkan kode untuk membuat GameObject.
- Contoh: new GameObject("ObjectName").AddComponent<ClassName>();
Mari kita implementasikan Singleton untuk mengelola UI dalam sebuah contoh:
1) Tambahkan UI > Teks dan Tombol ke Scene.
- Atur logika untuk meningkatkan skor ketika tombol "IncreaseScore" ditekan
- Atur logika untuk mengurangi skor ketika tombol "DecreaseScore" ditekan

2) Buat skrip bernama "ScoreManager," di mana Singleton akan diterapkan.
- Skrip ScoreManager akan bertanggung jawab untuk meningkatkan/mengurangi skor dan memperbarui Teks saat dipanggil dari skrip lain.
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { GameObject } from 'UnityEngine';
import { Text } from 'UnityEngine.UI';
export default class ScoreManager extends ZepetoScriptBehaviour {
// Deklarasi Singleton
private static _instance: ScoreManager = null;
public static get Instance(): ScoreManager {
if (this._instance == null) {
this._instance = GameObject.FindObjectOfType<ScoreManager>();
}
return this._instance;
}
// Deklarasi variabel
public scoreText: Text;
private _currentScore : number;
Start() {
// Set skor awal ke 0 untuk pengujian
this._currentScore = 0;
}
// Skrip lain dapat memanggil IncreaseScore
public IncreaseScore(amount: number) {
this._currentScore += amount;
this.scoreText.text = `Skor : ${this._currentScore}`;
}
// Skrip lain dapat memanggil DecreaseScore
public DecreaseScore(amount: number) {
this._currentScore -= amount;
this.scoreText.text = `Skor : ${this._currentScore}`;
}
}
- Deskripsi Skrip
- private static _instance: Ini adalah variabel statis privat dalam kelas, awalnya diatur ke null.
- public static get Instance: Properti statis ini menyediakan cara bagi kode eksternal untuk mengakses instance unik dari kelas ini.
- Periksa if (this.\_instance == null). Jika null, gunakan GameObject.FindObjectOfType<>() untuk menemukan dan mengembalikan komponen dari tipe ClassName, dan menetapkannya ke variabel statis.
3) Setelah menulis skrip, kembali ke Inspector dan sambungkan komponen Teks.

4) Selanjutnya, buat skrip bernama "ScoreLogicSample" untuk menunjukkan cara memanggil Singleton. Pastikan bahwa ScoreManager dan ScoreLogicSample berada di direktori yang sama.

- Tulis kode seperti ini:
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { GameObject } from 'UnityEngine';
import { Text, Button } from 'UnityEngine.UI';
// Impor skrip Singleton
import ScoreManager from './ScoreManager';
export default class ScoreLogicSample extends ZepetoScriptBehaviour {
public increaseScoreButton: Button;
public decreaseScoreButton: Button;
// Deklarasikan variabel bertipe ScoreManager
private ScoreManager : ScoreManager;
Start() {
// Tetapkan ScoreManager ke variabel
this.ScoreManager = GameObject.FindObjectOfType<ScoreManager>();
this.increaseScoreButton.onClick.AddListener(()=> {
// Panggil fungsi yang dideklarasikan dalam Singleton
this.ScoreManager.IncreaseScore(10);
});
this.decreaseScoreButton.onClick.AddListener(()=> {
// Panggil fungsi yang dideklarasikan dalam Singleton
this.ScoreManager.DecreaseScore(10);
});
}
}
- Penting untuk menentukan jalur dengan benar saat mendapatkan skrip Singleton.
- Anda dapat menyesuaikan bagian di mana ScoreManager dipanggil dalam skrip Anda sendiri sesuai kebutuhan.
5) Tekan tombol [▶︎(putar)] untuk menguji.
- Anda harus mengamati fungsi dalam ScoreManager yang dipanggil saat Anda mengklik tombol di ScoreLogicSample, sehingga berfungsi seperti yang diharapkan.
