Halaman ini berisi informasi untuk membantu pengembang Unity yang berpengalaman memulai dengan Roblox, termasuk orientasi dasar, perbandingan konseptual, dan perbedaan kunci antara kedua platform.
Mengenal


Jendela Hierarchy di Unity dan Explorer di Roblox Studio adalah jendela utama untuk mengorganisir elemen dalam adegan 3D:
- Keduanya memungkinkan Anda untuk mengelola dan mengorganisir objek (misalnya, karakter dan aset lingkungan).
- Keduanya menggunakan struktur pohon untuk hubungan induk-anak antara objek.
Namun, jendela Hierarchy tidak memiliki struktur yang telah ditentukan, sedangkan jendela Explorer memiliki struktur yang ketat. Mungkin berguna untuk memikirkan jendela Explorer sebagai kombinasi dari jendela Hierarchy dan Project di Unity, dengan folder Workspace sebagai elemen yang paling dikenali.
Demikian pula, Asset Manager dan Toolbox di Roblox Studio tumpang tindih dengan jendela Project di Unity. Asset Manager memungkinkan Anda mengelola semua aset dalam permainan Anda, sedangkan Toolbox memungkinkan Anda mengakses aset yang telah Anda terbitkan. Toolbox juga memungkinkan Anda mencari Creator Store untuk aset dari Roblox atau komunitas, mirip dengan Asset Store di Unity.
Perbedaan filosofis
Roblox adalah "mesin simulasi" daripada mesin permainan tradisional. GameObjects di Unity dan Parts di Roblox keduanya berfungsi sebagai blok bangunan dasar untuk membuat objek dalam lingkungan 3D, tetapi dalam praktiknya, keduanya cukup berbeda:
- Representasi: GameObjects di Unity adalah konsep tingkat tinggi untuk objek apa pun dalam adegan, sedangkan Parts di Roblox dirancang untuk mewakili objek fisik seperti balok kayu dan bola plastik, bukan geometri abstrak seperti objek primitif di Unity.
- Fisika: Untuk melakukan simulasi fisika di Unity, Anda melampirkan komponen seperti Rigidbody dan Collider ke GameObject. Di Roblox, fisika sudah terintegrasi ke dalam tipe data Parts; mesin menangani interaksi secara otomatis.
Anda dapat melihat perbedaannya dengan segera jika Anda membuat GameObject dan Part. GameObject tidak memiliki lebih dari posisi, rotasi, dan skala. Part memiliki informasi yang sama—ditambah material dan warna, nilai untuk reflektansi dan transparansi, massa dan bentuk, dan banyak lagi. Mengubah Part menjadi sesuatu yang lebih mirip dengan GameObject kosong berarti menghapus banyak properti bawaan. Sebaliknya, Anda dapat membuat GameObject yang terlihat sangat mirip dengan Part dengan menambahkan komponen MeshFilter, MeshRenderer, Collider, dan Rigidbody ke dalamnya.
Dari perspektif scripting, GameObject paling mirip dengan Instance di Roblox, kelas dasar untuk semua kelas Roblox lainnya, tetapi karena Anda tidak (dan tidak bisa) membuat objek dari tipe Instance, perbandingan ini tidak terlalu praktis.
Perbandingan lain adalah GameObject di Unity dengan Model di Roblox. Model bertindak sebagai wadah untuk kumpulan bagian yang saling terhubung dengan cara yang sama seperti Anda mungkin membangun hubungan induk-anak antara banyak GameObjects di Unity. Anda menentukan salah satu bagian model sebagai bagian utama untuk mendefinisikan titik pivot. Model juga menyimpan skrip, animasi, efek suara, prompt, batasan, pemancar partikel, dan banyak lagi.
Sebagai contoh, GameObject di Unity mungkin memiliki komponen untuk ParticleSystem, Physics3D, SpringConstraint, dan sebuah skrip. Di jendela Hierarchy, Anda melihat satu GameObject bernama SpringyFireball. Jendela Inspector menunjukkan kumpulan komponen dan propertinya.
Di Roblox, model SpringyFireball yang sebanding di jendela Explorer mungkin terlihat seperti ini:
Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- ScriptFilosofi fisika-dari-default Roblox meluas ke proses membangun model 3D. Di Roblox, mengelas beberapa bagian menjadi sebuah perakitan adalah cara yang sangat baik untuk membangun sesuatu dengan cepat, karena Roblox memperlakukan bagian yang dilas sebagai satu tubuh kaku. Pendekatan ini tidak tersedia di Unity.
Alih-alih menggunakan satuan metrik standar untuk panjang dan massa, Roblox menggunakan satuan nominal yang disebut studs dan Roblox Mass Units (RMUs). Untuk konversi metrik yang kira-kira dan rekomendasi seputar penggunaan, lihat Units.
Lokasi itu penting
Permainan Roblox adalah multiplayer secara default, jadi Roblox Studio mencakup banyak lokasi penyimpanan yang berbeda dengan perilaku spesifik. Untuk informasi lebih lanjut, lihat runtime klien-server dan organisasi objek.
| Location | Description |
|---|---|
| Workspace | Mewakili dunia 3D permainan. Dapat menjalankan skrip server yang terhubung langsung ke objek dan mengontrol perilakunya. |
| ReplicatedFirst | Berisi objek yang direplikasi ke klien sebelum yang lainnya. Lokasi ini ideal untuk set objek dan skrip klien yang paling minimum yang diperlukan untuk menampilkan layar pemuatan. |
| ReplicatedStorage | Berisi objek yang direplikasi ke klien dan server. Lokasi ini ideal untuk Scripts dengan RunContext dari Client, ModuleScripts klien, dan ModuleScripts yang ingin Anda gunakan di server dan klien. LocalScripts tidak dijalankan dari lokasi ini. |
| ServerScriptService | Berisi skrip server. Lokasi ini ideal untuk skrip yang perlu mengakses fungsionalitas atau objek sisi server, seperti logika permainan dan penyimpanan cloud. |
| ServerStorage | Berisi objek sisi server. Lokasi ini ideal untuk objek besar yang tidak perlu segera direplikasi ke klien saat mereka bergabung dengan permainan. Skrip tidak dijalankan dari lokasi ini, tetapi Anda dapat menyimpan ModuleScripts sisi server di sini. |
| StarterPlayer ⟩ StarterCharacterScripts | Berisi LocalScripts yang dijalankan saat karakter muncul. |
| StarterPlayer ⟩ StarterPlayerScripts | Berisi LocalScripts yang dijalankan saat pemain bergabung dengan permainan. |
| StarterGui | Berisi elemen GUI yang ditampilkan klien saat memuat permainan. LocalScripts dapat dijalankan dari lokasi ini. |
| StarterPack | Umumnya hanya berisi Tools, tetapi juga dapat menyertakan LocalScripts untuk menyiapkan ransel pemain. |
Scripting
Roblox games support three different types of Luau scripts:
Skrip Klien
Skrip-skrip ini dijalankan di klien, dan server tidak memiliki visibilitas terhadap perilakunya. Karena alasan warisan, skrip ini dapat berupa LocalScripts atau Scripts dengan nilai RunContext dari Client. Skrip klien biasanya berada dalam ReplicatedStorage, StarterPlayerScripts, atau StarterCharacterScripts.
Skrip Server
Skrip-skrip ini dijalankan di server, dan klien tidak memiliki visibilitas terhadap perilakunya. Skrip server memiliki nilai RunContext dari Server dan biasanya berada dalam ServerScriptService, yang kontennya tidak direplikasi ke klien.
Skrip Modul
Skrip-skrip ini adalah potongan kode yang dapat digunakan kembali yang mengembalikan tepat satu nilai, biasanya sebuah fungsi atau tabel (atau tabel fungsi). Daripada menduplikasi kode dalam skrip klien dan server, gunakan skrip modul untuk berbagi kode dan data antara keduanya. Skrip modul sering kali berada dalam ReplicatedStorage, tetapi dapat berada di tempat lain jika Anda ingin berbagi kode antara skrip di sisi yang sama dari batas klien-server.
Unity tidak memiliki konsep jenis skrip yang berbeda. Jika Anda memilih untuk membuat permainan multiplayer, Unity menggunakan pustaka jaringan untuk menunjukkan kapan GameObject (dan skripnya) harus eksklusif untuk server.
Di Unity, banyak fungsi mesin tersedia melalui metode MonoBehaviour. Misalnya, untuk menjalankan kode sebelum loop render, Anda menambahkan kode ke metode Update(). Untuk menangani peristiwa tabrakan fisika, Anda menambahkan kode ke metode OnCollideEnter().
Skrip Roblox lebih bersifat berbasis peristiwa. Anda mengakses fungsi serupa dengan berlangganan ke layanan dan mendengarkan pembaruan.
C# dan Luau
Untuk scripting, Unity menggunakan C#. Roblox menggunakan Luau, bahasa skrip yang diturunkan dari Lua 5.1.
Dibandingkan dengan C#, Luau memiliki tipe bertahap dan umumnya memiliki sintaks yang kurang verbose. Namun, dalam proyek yang lebih besar, pengetikan bertahap dapat memperkenalkan kategori bug yang dihindari oleh bahasa yang memiliki tipe kuat seperti C#, jadi pertimbangkan untuk mengaktifkan pemeriksaan tipe ketat dalam skrip Roblox.
Untuk perbedaan sintaks dasar antara bahasa skrip, lihat perbandingan Luau dan C#.
Contoh kode Luau
Contoh kode Luau berikut ini menunjukkan bagaimana cara mendengarkan input pengguna (dalam hal ini, tombol E) setelah pemain mengenakan pancingan dan memanggil fungsi tambahan:
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Ambil skrip modul dari ReplicatedStorage yang mengembalikan satu fungsi
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Mengasumsikan bahwa skrip ini adalah anak dari pancingan
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Periksa bahwa tombol ditekan, kemudian panggil fungsi lain
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Hanya aktifkan aksi ketika pemain mengenakan pancingan
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Nonaktifkan aksi ketika pemain melepas pancingan
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)Skrip Roblox dapat relatif ringkas karena Roblox memiliki banyak asumsi bawaan: Player dengan karakter Humanoid yang terhubung ke server dan dapat melengkapi Tools. Asumsi ini tidak ada di Unity, jadi implementasinya akan sangat berbeda.
Aset
Unity dan Roblox keduanya mendukung impor mesh dan model kustom dalam format .fbx. Jenis aset tertentu mungkin memerlukan konfigurasi dan pengaturan ekspor spesifik dari perangkat lunak pemodelan pihak ketiga Anda. Untuk informasi lebih lanjut, lihat halaman berikut:
Di Unity, objek diimpor ke direktori Assets Anda, terlihat di jendela Project. Di Roblox, aset diimpor ke Workspace dan ke Toolbox atau Asset Manager.
Roblox juga menawarkan plugin Blender sumber terbuka untuk memperlancar proses impor.
Transforms
Transformasi milik Unity dan CFrames Roblox memiliki tujuan yang serupa dalam mewakili transformasi 3D objek:
- Baik transformasi maupun CFrames mewakili posisi dan rotasi sebuah objek di ruang 3D. Transformasi mencakup skala, sedangkan Roblox menggunakan properti BasePart.Size yang bukan bagian dari CFrame.
- Keduanya mendukung perkalian untuk transformasi yang kompleks dan memiliki metode bawaan untuk manipulasi lainnya.
Kolaborasi
Di Unity, Anda berkolaborasi dengan sistem kontrol versi standar atau layanan berbayar seperti Unity Version Control.
File Roblox hidup di cloud (meskipun Anda dapat mengekspor salinan), jadi Roblox Studio menyediakan alur kerja kolaborasi bawaan untuk pengeditan simultan, manajemen grup, izin, penyusunan skrip, dan banyak lagi. Lihat Kolaborasi.
Plugin
Mirip dengan alat Unity, Roblox Studio mendukung plugin, yang dapat menyederhanakan atau memberi Anda kontrol tambahan atas berbagai aspek dari proses pengembangan. Plugin tersedia di Creator Store, sama seperti aset, banyak yang gratis.
Glosarium
| Unity | Roblox | Catatan |
|---|---|---|
| Scene | Place | |
| GameObject | Part atau Model | Lihat Perbedaan filosofis. |
| Prefab | Package | |
| Transform | CFrame | CFrame tidak menyertakan informasi skala. Lihat Transforms. |
| Hierarchy | Explorer | |
| Inspector | Properties | |
| Scene view | 3D viewport | |
| Game view | 3D viewport | Tampilan viewport bertransisi menjadi tampilan permainan saat Anda menguji permainan Anda. |
| Project window | Asset Manager atau Toolbox | |
| Terrain Inspector | Terrain Editor | |
| Spawn point | SpawnLocation | |
| Console | Output | |
| Asset Store | Creator Store | |
| Overlays | Toolbar | |
| Tool | Plugin |