MVC dalam Persatuan dengan Objek Skrip. Bagian 1

MVC (Model-View-Controller) adalah skema yang melibatkan membagi data aplikasi, antarmuka pengguna dan logika kontrol menjadi tiga komponen terpisah sehingga masing-masing dapat dimodifikasi secara independen. Pengembang Cem Ugur Karacam berbagi pengalaman pemrogramannya di Unity dan secara singkat berbicara tentang Scriptable Objects. Kami menyajikan terjemahan dari artikelnya yang diterbitkan di dev.to.



Selamat datang di bagian pertama ceramah saya tentang penerapan MVC di Unity menggunakan Scriptable Objects. Dalam artikel ini saya hanya menulis tentang dasar-dasar bekerja dengan Objek Skrip, dan secara umum teks akan sederhana dan jelas.

Pertama, cari tahu apa yang dikatakan pengembang Unity tentang Objek Skrip:

  • Ini adalah kelas yang dapat diwarisi dari untuk membuat objek yang tidak boleh dilampirkan ke objek lain di TKP.
  • Manfaat terbesar dari objek yang dibuat akan jika Anda menggunakannya hanya untuk menyimpan data.

Sekarang logis untuk bertanya: mengapa Objek Scriptable?

Objek Scriptable adalah bagian dari fungsionalitas mesin Unity, sehingga objek tersebut memiliki banyak fitur bawaan untuk bekerja dengan editor.

Saya suka pendekatan yang digunakan ketika mengembangkan proyek di Unity. Anda dapat membuat alat sendiri dan menyesuaikannya dengan mudah yang diinstal secara default. Objek Skrip memperluas kemampuan Anda secara signifikan, karena memungkinkan Anda membuat wadah khusus untuk data dan menyimpannya sebagai aset dalam proyek.



Gambar di atas adalah contoh menggunakan Objek Scriptable di Unity. File .asset tunggal yang dibuat dalam suatu proyek dapat berisi informasi yang diperlukan untuk pengoperasian beberapa sistem dan memastikan pelestarian pengaturannya. Jika Anda ingin mempelajari lebih lanjut, ada video yang luar biasa di YouTube dengan presentasi tentang SO (Objek Skrip ) yang disebut " Menggulingkan Tyranny Perilaku Mono dalam Revolusi Objek Skrip yang Agung ".



Contoh hebat lainnya ditunjukkan di atas. Di sini, objek game mereferensikan objek Inventaris, dan Sistem Hemat mengatur semuanya. Gambar ini berasal dari kuliah luar biasa lainnya, "Arsitektur Game dengan Objek Skrip" ( Arsitektur Game dengan Objek Skrip ), saya sangat menyarankan untuk membacanya.

Fitur hebat lainnya adalah ketika Anda mengetahui Scriptable Objects, Anda mungkin tidak ingin menggunakan format penyimpanan data lain, seperti JSON atau XML, karena SO adalah format yang paling nyaman untuk menyimpan data dalam Unity.

Baiklah, mari kita lihat Objek Scriptable dalam aksi.

using UnityEngine; public class ItemData : ScriptableObject { public string itemName; public ItemType type; public float attack; } public enum ItemType { Dagger, Axe, Sword, Staff } 

Kami menulis kelas yang disebut ItemData dan beberapa properti khas game RPG. Selanjutnya, kita akan membuat beberapa item seperti itu di proyek, mendapatkan akses kepadanya dari skrip dan menampilkan nilai-nilai di konsol. Tapi pertama-tama, tambahkan satu baris penting ke kode kita.

 using UnityEngine; [CreateAssetMenu] public class ItemData : ScriptableObject { public string itemName; public ItemType type; public float attack; } public enum ItemType { Dagger, Axe, Sword, Staff } 

Atribut CreateAssetMenu , yang kami tambahkan sebelum kelas ItemData , memberi tahu Unity bahwa kami ingin membuat file .asset di mana kelas kami akan disimpan melalui menu. Kalau tidak, kita tidak akan dapat melakukan ini menggunakan tombol kanan mouse atau tombol Buat di folder proyek.





Buat folder bernama Items dan coba buat objek ItemData di folder ini.



Sekarang kami akan menulis skrip lain yang disebut Inventory untuk bekerja dengan file data.

 using UnityEngine; public class Inventory : MonoBehaviour { public ItemData[] inventory; } 

Tambahkan metode untuk itu yang akan menampilkan informasi ke konsol. Kami juga menjalankan pemeriksaan agar tidak melampaui batas array, tetapi untuk memutar di sekitar array.

 using UnityEngine; public class Inventory : MonoBehaviour { public ItemData[] inventory; int index = 0; public void NextItemInfo() { if (index > inventory.Length) { index = 0; } Debug.Log("Item name: " + inventory[index].name); Debug.Log ("Attack power: " + inventory[index].attack); switch(inventory[index].type) { case ItemType.Axe: Debug.Log("Item type: Axe"); break; case ItemType.Dagger: Debug.Log("Item type: Dagger"); break; case ItemType.Staff: Debug.Log("Item type: Staff"); break; case ItemType.Sword: Debug.Log("Item type: Sword"); break; } index ++; } } 

Saya akan menetapkan panggilan ke metode kami ke spasi. Di Unity, ini sangat mudah. Berkat kelas Input , kita dapat memeriksa dalam metode Update apakah kunci yang diperlukan telah ditekan.

 using UnityEngine; public class Inventory : MonoBehaviour { public ItemData[] inventory; int index = 0; private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { NextItemInfo(); } } public void NextItemInfo() { if (index > inventory.Length) { index = 0; } Debug.Log("Item name: " + inventory[index].name); Debug.Log ("Attack power: " + inventory[index].attack); switch(inventory[index].type) { case ItemType.Axe: Debug.Log("Item type: Axe"); break; case ItemType.Dagger: Debug.Log("Item type: Dagger"); break; case ItemType.Staff: Debug.Log("Item type: Staff"); break; case ItemType.Sword: Debug.Log("Item type: Sword"); break; } index ++; } } 

Saatnya untuk kembali ke editor Unity. Kami akan mengisi array inventory kami dengan file ItemData dibuat sebelumnya dari folder Items . Tapi pertama-tama, buat objek kosong di tempat kejadian dan tambahkan skrip Inventory kami ke situ.



Sekarang mari kita jalankan proyek dan mengujinya.



Itu berhasil! Dan sekarang saya ingin menunjukkan kepada Anda bahwa Objek Skrip dapat menyimpan tidak hanya data, tetapi juga metode untuk bekerja dengannya. Sebagai contoh, mari kita tambahkan metode untuk menghitung harga di kelas ItemData . Untuk informasi lebih lanjut tentang ini, lihat dokumen di sini dan di sini .

 using UnityEngine; [CreateAssetMenu] public class ItemData : ScriptableObject { public string itemName; public ItemType type; public float attack; public float GetPrice() { return attack * 40; } } 

Kemudian kami menggunakan metode baru kami di kelas Inventory .

 using UnityEngine; public class Inventory : MonoBehaviour { public ItemData[] inventory; int index = 0; private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { NextItemInfo(); } } public void NextItemInfo() { if (index == inventory.Length) { index = 0; } Debug.Log("Item name: " + inventory[index].name); Debug.Log ("Attack power: " + inventory[index].attack); switch(inventory[index].type) { case ItemType.Axe: Debug.Log("Item type: Axe"); break; case ItemType.Dagger: Debug.Log("Item type: Dagger"); break; case ItemType.Staff: Debug.Log("Item type: Staff"); break; case ItemType.Sword: Debug.Log("Item type: Sword"); break; } Debug.Log("Item price: " + inventory[index].GetPrice()); index ++; } } 

Sekarang kita akan mereproduksi semuanya dan melihat hasilnya.



Contoh dari tutorial ini ada di GitHub !

Bagian pertama dari cerita berakhir. Pada artikel selanjutnya, kita akan berbicara tentang menggunakan MVC di Unity. Tapi, karena kita sudah terbiasa dengan Objek Skrip, kami akan menambahkan beberapa fitur baru untuk membuatnya lebih dingin dan lebih sulit seperti yang dilakukan guru Unity yang sebenarnya.

Source: https://habr.com/ru/post/id475562/


All Articles