Template adalah sebuah pola atau bentuk dasar untuk membuat sesuatu. Dalam pembuatan game, kita akan menemui beberapa bagian game yang memiliki kesamaan, contoh umumnya adalah karakter. Misalkan dalam game yang dibuat memiliki beberapa karakter yang dapat dipilih atau dibeli. Apa saja kesamaan yang mereka miliki? Oh banyak, contohnya sama-sama memiliki :

  • HP
  • amunisi
  • animasi
  • model / sprite
  • senjata
  • ability
  • dan lain-lain

Nah, kita bisa membuat template dasar karakter untuk mempermudah mengedit ataupun menambahnya. Caranya, adalah dengan menggunakan ScriptableObject. Dalam tutorial ini, kita akan belajar membuat template item untuk In-Game Store.


Class

Seperti membuat class biasa. Bedanya kita tidak menggunakan MonoBehaviour, melainkan ScriptableObject, karena class ini tidak akan kita attach ke dalam GameObject.

StoreItem.cs


using System.Collections;
using UnityEngine;
using System.Collections.Generic;

[CreateAssetMenu(fileName = "StoreItem", menuName = "Store Item/Item", order = 1)]
public class StoreItem : ScriptableObject {
    public string itemName          = "Item";
    public int price                = 0;
    public Sprite itemIcon          = null;
    public int amount               = 1;
}

Selain mendefinisikan class, kita juga membuat custom menu dari Asset. Nanti akan muncul menu baru bernamaStore Item > Item untuk membuat file baru bernama StoreItem yang berisikan class yang kita buat ini.

Class List

Setelah class, buat lagi scriptable untuk menampung kumpulan class tadi.

StoreItemList.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "StoreItemList", menuName = "Store Item/List", order = 1)]
public class StoreItemList : ScriptableObject {
    public List< StoreItem > storeItemList;
}

Attach & Assign Value

1.) Membuat file asset

Buat dulu asset StoreItem lewat menu Asset.

2.) Assign value yang diperlukan

3.) Letakkan ke dalam list

Siap Digunakan

Oke, proses membuat template sudah selesai. Sampai di tahap ini, kamu bisa membuat sebanyak mungkin item yang diperlukan. Bisa juga kamu membuat fitur update game tanpa perlu update aplikasi. Buat aja fitur download AssetBundle, lalu ekstrak isinya. Sepertinya sih bisa belum coba juga hehe.

Dalam contoh ini, saya cuma membuka file asset berdasarkan path penyimpanan, lalu menampilkan isi dari StoreItemList.

StoreManager.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class StoreManager : MonoBehaviour {

    void Start(){
        StoreItemList asset = (StoreItemList)AssetDatabase.LoadAssetAtPath ("Assets/StoreItemList.asset", typeof(StoreItemList));
        List storeItems = asset.storeItemList;

        foreach(StoreItem item in storeItems){
            GameObject itm = new GameObject ();
            itm.name = item.name;
            itm.AddComponent().sprite = item.itemIcon;
            itm.transform.position = new Vector3 (0, 0, 0);
        }
    }
}

Download source code.