Dilema penentuan tipe data saat mendeklarasikan suatu variabel merupakan hal yang lumrah terjadi terutama bagi pemrogram-pemrogram awam seperti saya. Hal ini juga terjadi saat saya menonton tutorial pembuatan sistem shop sederhana pada Unity oleh Code Monkey.
Selama ini, saya selalu menyimpan game object dengan tipe GameObject
. Pada tutorial tersebut, narasumber menggunakan Transform
untuk menyimpan game object container dan template untuk shop item-nya, yang tertera pada cuplikan kode berikut.
public class UI_Shop : MonoBehaviour {
private Transform container;
private Transform shopItemTemplate;
...
}
Saat berselancar di internet, rasanya seperti tidak ada perbedaan yang signifikan antara penggunaan Transform
dan GameObject
, namun setelah merenung beberapa saat, saya menemukan alasan di balik penggunaan Transform
tersebut, dan mungkin dapat menyimpulkan kapan penggunaan Transform
lebih baik dibandingkan harus menyimpan sebagai GameObject
.
1. Lebih Sering Mengakses Anak dari Objek yang Disimpan
Untuk mengakses anak dari suatu game object, Unity telah menyediakan method Transform.Find
, sedangkan method GameObject.Find
sendiri digunakan untuk mencari game object tertentu di scene tersebut. Dengan begitu, penggunaan Transform
lebih efisien dibandingkan GameObject
pada kasus ini.
Hal ini menjelaskan pemilihan Transform
pada variabel container
pada cuplikan gambar di atas, di mana container
digunakan untuk mengakses anaknya yang kemudian disimpan pada variabel shopItemTemplate
.
2. Lebih Sering Mengakses atau Mengubah Aspek Transform pada Game Object
Pada kasus ini, jelas bahwa penggunaan Transform
lebih menguntungkan daripada GameObject
. Dengan menggunakan GameObject
, ada cukup banyak waktu yang digunakan untuk memanggil GameObject.transform
, ditambah kode yang tidak lebih rumit dibaca dibandingkan langsung mereferensikan variabel sebagai Transform
.
3. Preferensi dan Konvensi
Sebenarnya, ada hal yang lebih penting dibandingkan keberjalanan kode yang sangat efisien dari segi waktu dan memori. Hal tersebut ialah maintainability. Untuk membuat kode yang mudah di-maintain, diperlukan sebuah konvensi/kesepakatan antar pemrogram. Hal ini dikarenakan setiap pemrogram memiliki preferensi yang berbeda-beda, sehingga harus ada satu ketentuan dalam sebuah projek agar kode yang dibuat mudah di-maintain. Hal ini yang (sepertinya) menjadi alasan utama penggunaan referensi GameObject
atau Transform
ketika menyimpan sebuah data game object.
Referensi
Simple Shop in Unity -- Code Monkey
Instantiate as GameObject vs Transform -- StackOverflow
Find Child GameObject -- StackOverFlow
Transform vs GameObject -- Unity Forum
Transform.Find
GameObject.Find
Top comments (0)