BERITA PROGRAMMING Ketahanan Data pada unity

Ketahanan Data pada unity

Oleh Muhammad Faizud Daroin | Kamis, 31 Oktober 2019

Ketahanan Data pada unity

Seperti yang kita ketahui, di unity, ketika kita berpindah scene, data ataupun gameobject yang ada pada scene sebelumnya tidak dibawa ke scene yang baru, lalu bagaimana cara agar kita dapat mempertahankan data tersebut?

Aktivitas di kantor membosankan?
Karyawan engangement kurang?
GAMIFIKASI-IN aja!

Yuk, ikuti program inovatif MAGANG ONLINE untuk berbagai bidang seperti animasi, coding, 3D, illustrasi, musik dan bisnis hanya di GAMELAB.ID!

Dalam pembuatan game dengan unity, tidak jarang kita menginginkan agar data (seperti score, item, dll.) tetap ada saat berpindah scene.

Seperti yang kita ketahui, ketika kita berpindah scene, data ataupun gameobject yang ada pada scene sebelumnya tidak dibawa ke scene yang baru, lalu bagaimana cara agar kita dapat mempertahankan data tersebut? Salah satu caranya adalah dengan menyimpannya pada PlayerPrefs pada saat sebelum memuat scene baru, lalu saat scene baru telah dimuat, kita akan ambil kembali data yang ada PlayerPrefs.

Hanya saja, menggunakan PlayerPrefs tidaklah aman, karena value yang kita simpan dalam PlayerPrefs dapat diubah oleh user sesuka mereka, satu satunya keamanannya adalah lokasinya yang sulit ditemukan oleh pengguna biasa.

Lalu bagaimana cara yang aman untuk menjaga data tetap ada? Unity telah menyediakan function yang bernama “DontDestroyOnLoad” yang mana akan mengakibatkan object yang menjadi argumen untuk function tersebut tidak akan dihancurkan saat berpindah scene, yang berarti bahwa, data kita akan aman.

Untuk implementasinya, kita dapat membuat gameobject baru dengan script, katakanlah sebuah GameManager, dimana GameManager ini tidak akan hancur ketika berpindah scene, jadi pada Start(), kita akan panggil function DontDestroyOnLoad()

Script game manager dontdestroyonload()

Lalu masukkan script GameManager tersebut ke salah satu gameobject dalam scene. Jika dicoba di play mode, object yang memiliki script ini akan dimasukkan pada scene khusus dengan nama “DontDestroyOnLoad”, object yang berada di sini akan terus ada meski kita telah berpindah scene

v

SampleScene -> New Scene

Perpindahan terjadi, tetapi GameManager tetap ada

Sekarang yang menjadi masalah adalah, ketika di scene lain memiliki GameManager mereka sendiri (untuk debugging misalnya), kita akan berakhir dengan memiliki lebih dari 1 GameManager, dan kita tidak ingin hal itu terjadi karena kita hanya ingin data GameManager hanya ada satu dan GameManager tersebut tidak boleh diganti, ataupun ada GameManager lain, oleh karena itu, untuk mengatasi masalah tersebut dengan salah satu design pattern yang disebut dengan “Singleton” untuk lebih lanjut mengenai singleton bisa dibaca disini.

Jadi yang perlu kita lakukan adalah membuat variable static baru dengan nama “Instance” atau dengan nama lain terserah, lalu kita akan menginisiasinya di Awake(), serta memanggil DontDestroyOnLoad(), tetapi sebelum itu kita harus membuat kondisi dimana jika variable Instance tersebut telah diisi, maka kita akan menghancurkan gameObject ini dan membatalkan pengisian GameManager baru ini, jika tidak, kita akan mengisi variable Instance dengan object saat ini.

Maka hasil scriptnya akan menjadi seperti ini:

Score disini adalah data yang ingin kita jaga, sedangkan Instance adalah tempat kita menyimpan object singleton kita, pada kasus ini, GameManager, jadi saat pertama kali object ini dibuat, object akan disimpan di variable instance, lalu jika berpindah scene yang memiliki GameManager mereka sendiri, GameManager dalam scene scene tersebut akan menghancurkan dirinya sendiri karena sifat variable static mengakibatkan variable Instance pada GameManager pada scene scene tersebut menjadi terisi (hanya ada satu variable “Instance”). Lalu kenapa setter pada variable Instance dibuat private, hal itu dilakukan agar script lain tidak dapat mengisi variable Instance.

Nah sekarang kita dapat mengubah data public apapun yang ada di GameManager, dengan mengaksesnya di scene manapun, untuk mengaksesnya kita hanya perlu memangil GameManager.Instance. Untuk contohnya, saat kita ingin menambah score pada GameManager, dari script lain:

Terima kasih!

Sumber: Unity Live Training on Data Persistence, Maret 2014


Muhammad Faizud Daroin

Muhammad Faizud Daroin

Kamis, 31 Oktober 2019

ARTIKEL TERKAIT

Magang lebih mudah dan bisa dilakukan dari mana saja dengan Program Magang Online Gamelab. Magang Bersertifikat, plus Pelatihan!

DAFTAR MAGANG

ARTIKEL POPULER

KATEGORI