Singkatnya
Untuk membuat game di Roblox Studio, buka Studio, pilih template Baseplate, bangun level dari Part (centang Anchored supaya tidak bergeser), dan tambahkan Script di ServerScriptService untuk aturannya, seperti folder leaderstats untuk coin. Tekan Play (F5) untuk mengetesnya. Lalu pilih File > Publish untuk menyimpannya ke akun kamu. Game tetap privat sampai kamu merilisnya (menjadikannya publik) dari menu yang sama dan menjawab pertanyaan soal konten dengan batasan umur.
- Taruh aturan game di Script server. Perubahan yang dibuat LocalScript hanya dilihat satu pemain itu, dan apa pun di perangkat pemain bisa diubah cheater.
- Merilis butuh akun dengan reputasi baik yang berumur minimal 2 hari, dan cek umur. Kalau kamu menjawab No untuk pertanyaan konten dengan batasan umur, Roblox memberi label Content May Vary dan merilis game ke pengguna yang sudah dicek umurnya, 16 tahun ke atas. Menjangkau semua umur punya syarat tambahan.
- Studio berjalan di Windows dan Mac. Halaman setup Roblox tidak mencantumkan versi HP atau tablet.
Di halaman ini
Apa yang akan kamu bangun
Game-nya course singkat. Pemain mulai di SpawnLocation, melompat antar platform di atas lantai lava, mengambil coin dan menyentuh Finish pad hijau. Finish memberi Win hanya ke pemain yang mengambil minimal 3 coin sejak terakhir spawn atau finish, lalu mengirimnya kembali ke awal. Coins dan Wins tampil di daftar pemain, dan setiap aturan berjalan di server.
| Bagian | Tempatnya | Fungsinya |
|---|---|---|
SpawnLocation | Langsung di Workspace (ikut dengan template Baseplate) | Tempat pemain muncul saat masuk dan saat respawn. Finish mengirim pemain kembali ke sini. |
Folder Course | Workspace | Menampung seluruh level, jadi script menemukan semuanya di satu tempat. |
Folder Lava dan part-nya | Di dalam Course | Setiap part di dalamnya me-reset pemain yang menyentuhnya. |
Folder Coins dan part-nya | Di dalam Course | Setiap coin membayar 1 Coin ke pemain pertama yang menyentuhnya, menghilang, dan kembali setelah 10 detik. |
Part Finish | Di dalam Course | Memberi Win ke pemain yang mengumpulkan 3 coin di run ini, lalu memindahkannya kembali ke awal. |
Script PlayerStats | ServerScriptService | Memberi setiap pemain stat Coins dan Wins di daftar pemain. |
Script CourseService | ServerScriptService | Menjalankan lava, coin dan Finish. Satu-satunya tempat Coins dan Wins berubah. |
Workspace
Baseplate Part
SpawnLocation SpawnLocation
Course Folder new
Platform Part new
Lava Folder new
Lava Part new
Coins Folder new
Coin Part new
Finish Part new
ServerScriptService
PlayerStats Script new
CourseService Script new
Kamu membangun semua yang ada di Workspace dengan tangan di Langkah 2. Kedua script ditaruh di ServerScriptService. Roblox tidak pernah mengirim script di container itu ke pemain, jadi tidak ada yang bisa membaca atau mengubahnya dari perangkat mereka.
Langkah 1: Pasang Studio dan buka Baseplate
- Unduh Roblox Studio dari Creator Hub Roblox dan jalankan installer-nya (
RobloxStudio.exedi Windows,RobloxStudio.dmgdi Mac). Studio adalah aplikasi gratis untuk Windows dan Mac. - Saat terbuka, login dengan akun Roblox kamu. Kalau belum punya, buat dulu di roblox.com.
- Di bagian Open a Template, pilih Baseplate. Template ini dimulai dengan dua objek saja: SpawnLocation, tempat karakter muncul dan respawn, dan Baseplate, lantai dengan tekstur grid 4 kali 4 yang sejajar dengan stud, satuan panjang Roblox.
- Buka tiga jendela yang akan selalu kamu pakai. Explorer mencantumkan setiap objek di game kamu, dan Properties mengubah objek yang kamu pilih; keduanya dibuka dari menu Window atau tab Home. Output menampilkan error dari script kamu, dan dibuka dari menu Window atau tab Script.
Langkah 2: Bangun course-nya
- Di Explorer, arahkan kursor ke Workspace, klik tombol + (atau tekan Ctrl+I, Cmd+I di Mac) dan sisipkan Folder. Ganti namanya jadi
Course. - Arahkan kursor ke Course, klik +, dan sisipkan dua Folder lagi di dalamnya. Beri nama
LavadanCoins. - Bangun lantai lava. Klik Part di tab Home atau Model untuk menyisipkan blok, lalu pakai tool Scale untuk merentangkannya jadi satu lempengan besar dan datar yang akan ada di bawah seluruh course, dengan banyak ruang di setiap sisi. Di Properties, atur Color-nya ke merah dan Material-nya ke Neon, centang Anchored, dan seret ke folder
Lava. Sekarang pemain yang jatuh di mana pun mendarat di lava, bukan di Baseplate. - Bangun platform. Sisipkan part lain dengan cara yang sama dan pakai tool Move dan Scale untuk menaruhnya di atas lava, masing-masing beberapa stud di atasnya, dengan celah untuk dilompati. Di Properties, pastikan Anchored dicentang di masing-masing, dan seret ke Course.
- Bangun coin. Tahan panah kecil di tombol Part dan pilih Cylinder. Buat kecil dan kuning, centang Anchored, dan hapus centang CanCollide supaya pemain bisa menembusnya, bukan menabraknya. Taruh di folder
Coins, lalu tekan Ctrl+D (Cmd+D di Mac) untuk menduplikasinya sampai kamu punya minimal 3, dan sebarkan di atas platform sepanjang course. - Bangun finish. Sisipkan satu part lagi di atas lava di ujung jauh, cukup besar untuk didarati, warnai hijau, centang Anchored, beri nama persis
Finish, dan seret langsung ke Course, bukan ke salah satu folder. - Pindahkan SpawnLocation ke atas lava di awal course, di sebelah platform pertama, supaya berada di atas lempengan. Biarkan langsung di Workspace, bukan di dalam Course: CourseService mencarinya di sana untuk mengirim pemain kembali ke awal.
Nama itu penting
CourseService menemukan course lewat nama: folder bernama Course langsung di Workspace, folder Lava dan Coins di dalamnya, dan part bernama Finish di dalamnya. Eja persis, dengan huruf besar yang sama. Nama part lava dan coin tidak penting: setiap part langsung di dalam Lava adalah lava, dan setiap part langsung di dalam Coins adalah coin.
Langkah 3: Tambahkan Coins dan Wins ke daftar pemain
Di Explorer, arahkan kursor ke ServerScriptService, klik +, sisipkan Script dan beri nama PlayerStats. Ganti seluruh isinya dengan ini:
-- Script di ServerScriptService bernama PlayerStats.
-- Memberi setiap pemain stat Coins dan Wins. Folder bernama leaderstats di dalam
-- pemain membuat Roblox menampilkan nilai-nilai ini di daftar pemain di kanan atas.
local Players = game:GetService("Players")
local function onPlayerAdded(player: Player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats" -- harus dieja persis seperti ini
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Value = 0
wins.Parent = leaderstats
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do -- siapa pun yang masuk sebelum baris ini berjalan
onPlayerAdded(player)
end
Folder-nya harus bernama leaderstats, semua huruf kecil. Roblox membaca setiap nilai di dalamnya dan menampilkannya di daftar pemain, dengan nama nilai sebagai judul kolom.
Setiap pemain dapat Folder bernama leaderstats berisi dua objek IntValue. IntValue menyimpan bilangan bulat, cukup untuk menghitung coin. Loop di akhir menyiapkan pemain yang masuk sebelum baris PlayerAdded berjalan, jadi tidak ada yang terlewat.
Panduan leaderboard (dalam bahasa Inggris) membangun folder yang sama dengan lebih detail, lalu menambahkan penyimpanan dan top 10 global.
Langkah 4: Buat lava, coin dan finish berfungsi
Sisipkan Script kedua ke ServerScriptService, beri nama CourseService, dan tempel ini. Ini satu-satunya tempat Coins dan Wins berubah. Dua pengaturan di bagian atas adalah angka yang memang untuk kamu ubah.
-- Script di ServerScriptService bernama CourseService.
-- Menjalankan course di server, jadi setiap pemain melihat hal yang sama dan tidak ada yang bisa
-- memberi dirinya coin: part lava me-reset pemain, coin membayar 1 Coin lalu kembali,
-- dan Finish pad memberi Win ke pemain yang mengumpulkan cukup coin di run ini.
local Players = game:GetService("Players")
local COINS_TO_FINISH = 3 -- coin yang harus dikumpulkan pemain dalam satu run sebelum Finish dihitung
local COIN_RESPAWN_SECONDS = 10
local course = workspace:WaitForChild("Course")
local lavaFolder = course:WaitForChild("Lava")
local coinFolder = course:WaitForChild("Coins")
local finish = course:WaitForChild("Finish") :: BasePart
local spawnLocation = workspace:FindFirstChildOfClass("SpawnLocation")
if not spawnLocation then
warn("CourseService: no SpawnLocation directly in Workspace, so the Finish cannot send players back")
end
-- Coin yang dikumpulkan di run ini: sejak pemain terakhir spawn atau sampai di Finish
local runCoins: { [Player]: number } = {}
-- Mencari pemain yang karakternya menyentuh sebuah part, atau nil untuk yang lain
local function playerFromHit(otherPart: BasePart): Player?
local character = otherPart:FindFirstAncestorOfClass("Model")
return if character then Players:GetPlayerFromCharacter(character) else nil
end
local function addStat(player: Player, statName: string, amount: number)
local leaderstats = player:FindFirstChild("leaderstats")
local stat = leaderstats and leaderstats:FindFirstChild(statName)
if stat and stat:IsA("IntValue") then
stat.Value += amount
end
end
-- Lava: part apa pun di folder Lava me-reset pemain yang menyentuhnya
for _, lava in lavaFolder:GetChildren() do
if lava:IsA("BasePart") then
lava.Touched:Connect(function(otherPart: BasePart)
local character = otherPart:FindFirstAncestorOfClass("Model")
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid.Health = 0
end
end)
end
end
-- Coin: pemain pertama yang menyentuh coin mendapatkannya, lalu coin bersembunyi sampai muncul lagi
for _, coin in coinFolder:GetChildren() do
if coin:IsA("BasePart") then
local shownTransparency = coin.Transparency
local taken = false
coin.Touched:Connect(function(otherPart: BasePart)
local player = playerFromHit(otherPart)
if not player or taken then
return -- bukan pemain, atau coin ini sudah diambil
end
taken = true
coin.Transparency = 1
addStat(player, "Coins", 1)
runCoins[player] = (runCoins[player] or 0) + 1
task.delay(COIN_RESPAWN_SECONDS, function()
coin.Transparency = shownTransparency
taken = false
end)
end)
end
end
-- Finish: Win untuk pemain yang menyelesaikan course, lalu kembali ke awal
finish.Touched:Connect(function(otherPart: BasePart)
local player = playerFromHit(otherPart)
if not player or (runCoins[player] or 0) < COINS_TO_FINISH then
return
end
runCoins[player] = 0 -- diatur dulu, supaya menyentuh pad lagi tidak dihitung dua kali
addStat(player, "Wins", 1)
local character = player.Character
if character and spawnLocation then
character:PivotTo(spawnLocation.CFrame + Vector3.new(0, 4, 0))
player:SetAttribute("MovementCheckSkip", true) -- untuk script cek kecepatan, kalau kamu menambahkannya
end
end)
-- Karakter baru (setelah reset atau jatuh) memulai run baru
local function onPlayerAdded(player: Player)
runCoins[player] = 0
player.CharacterAdded:Connect(function()
runCoins[player] = 0
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do -- siapa pun yang masuk selama script ini menunggu Course
onPlayerAdded(player)
end
Players.PlayerRemoving:Connect(function(player: Player)
runCoins[player] = nil
end)
CourseService menelusuri folder Lava dan Coins sekali, saat game mulai. Bangun setiap part lava dan coin di Studio sebelum kamu menekan Play: part yang ditambahkan script lain saat bermain tidak tersambung.
| Bagian script | Kode | Fungsinya |
|---|---|---|
| Pengaturan | COINS_TO_FINISH, COIN_RESPAWN_SECONDS | Berapa coin yang harus dikumpulkan pemain dalam satu run sebelum Finish dihitung (3), dan berapa lama coin yang diambil tetap tersembunyi (10 detik). |
| Mencari course | WaitForChild, FindFirstChildOfClass("SpawnLocation") | Menunggu Course, Lava, Coins dan Finish lewat nama, dan mencari SpawnLocation langsung di Workspace tempat Finish mengirim pemain kembali. Kalau tidak ada, ia mencetak peringatan di Output. |
| Siapa yang menyentuh | playerFromHit | Part yang menyentuh bisa kaki, tangan atau pegangan topi. FindFirstAncestorOfClass("Model") naik ke model karakter, dan GetPlayerFromCharacter mengubahnya jadi pemain, atau nil untuk apa pun yang bukan karakter pemain. |
| Lava | humanoid.Health = 0 | Me-reset karakter apa pun yang menyentuh part di folder Lava. |
| Coin | taken, Transparency = 1, task.delay | Pemain pertama yang menyentuh coin dapat 1 Coin. Coin jadi tidak terlihat dan mengabaikan sentuhan sampai kembali setelah COIN_RESPAWN_SECONDS. Karena server yang menyembunyikannya, coin hilang untuk setiap pemain. |
| Run ini | runCoins | Menghitung coin yang dikumpulkan setiap pemain sejak terakhir spawn atau sampai di Finish. Angka Coins di daftar pemain terus bertambah; hitungan ini mulai lagi dari 0 di setiap respawn dan setiap Win. |
| Finish | runCoins[player] < COINS_TO_FINISH | Mengabaikan pemain dengan kurang dari 3 coin di run ini. Kalau tidak, hitungannya dikembalikan ke 0 dulu, supaya berdiri di pad tidak membayar dua kali, menambah 1 Win, dan memindahkan karakter 4 stud di atas SpawnLocation. |
| Run baru | CharacterAdded, GetPlayers() | Setiap karakter baru memulai run baru. Loop-nya mencakup pemain yang masuk selama script masih menunggu Course. |
| Bersih-bersih | PlayerRemoving | Melupakan pemain yang keluar. |
Lava mengatur Health ke 0, seperti tutorial lava milik Roblox sendiri. Karakter baru punya ForceField selama 10 detik setelah spawn di SpawnLocation, secara default, dan Humanoid:TakeDamage tidak berefek selama ForceField melindunginya. Mengatur Health langsung mengabaikan ForceField, jadi lava tetap bekerja bahkan sesaat setelah respawn.
Finish memindahkan karakter dengan character:PivotTo(...), yang disebut referensi Roblox sebagai cara utama memindahkan model dari script. Mengatur posisi root part karakter justru memindahkan satu part itu menjauh dari bagian tubuh lainnya.
Baris MovementCheckSkip tidak melakukan apa-apa sendirian. Baris itu ada untuk cek kecepatan di server dari panduan sprint: kalau nanti kamu menambahkan cek itu, teleport dari Finish tidak dianggap ngebut.
Kenapa aturannya berjalan di server
Setiap aturan di course ini ada di CourseService, Script server, dengan sengaja. Kalau LocalScript yang menambah coin, nilai Coins baru hanya ada di perangkat pemain itu: server dan pemain lain tidak akan pernah melihatnya. Dan apa pun di perangkat pemain bisa diubah. Panduan keamanan Roblox bilang exploiter "has complete control over their local state and network traffic", jadi server harus membuat setiap keputusan yang penting.
| Cheater mencoba | Hasil | Kenapa |
|---|---|---|
| Mengubah Coins atau Wins di perangkatnya sendiri | Hanya dia yang melihatnya | Nilai aslinya ada di server, dan hanya CourseService yang mengubahnya. |
| Teleport langsung ke Finish | Tidak dapat Win | Finish butuh 3 coin yang dikumpulkan di run ini. Halaman defensive design Roblox memakai kasus obby persis ini, exploiter yang teleport ke ujung untuk mengklaim hadiah, dan menyarankan checkpoint yang dicek server sebelum memberi hadiah. |
| Menyentuh coin atau Finish dari jauh | Bisa | Panduan keamanan Roblox bilang exploiter bisa memicu event Touched dari jarak atau frekuensi berapa pun. Setiap coin tetap membayar sekali, ke siapa pun yang menyentuh pertama, lalu tersembunyi selama 10 detik untuk semua orang. |
| Terbang atau teleport ke setiap coin, lalu ke Finish | Bisa | Perangkat setiap pemain mengendalikan karakternya sendiri, dan Roblox mencantumkan teleport dan terbang di antara hal yang bisa dilakukan client dengannya. |
| Mengabaikan lava | Bisa | Perangkat yang sama menentukan apakah sentuhan karakternya terjadi atau tidak. Untuk game pertama, itu bisa diterima. |
Jadi aturan coin menghentikan curang yang paling sederhana, lompat langsung ke ujung, dan tidak lebih dari itu. Itu wajar untuk game pertama. Lapisan berikutnya adalah cek di server bahwa karakter benar-benar dekat coin atau Finish sebelum membayar, seperti panduan keamanan Roblox mengecek jarak pemain dari shop; checkpoint yang harus dicapai berurutan, seperti di panduan checkpoint obby; dan cek gerakan seperti di panduan sprint. Apa yang direplikasi dan tidak menjelaskan pembagian client dan server lebih detail (semuanya dalam bahasa Inggris).
Langkah 5: Playtest
- Pastikan Test terpilih di dropdown mode tes, lalu tekan Play (F5). Namamu muncul di daftar pemain dengan Coins 0 dan Wins 0.
- Jalan ke sebuah coin. Coins naik ke 1 dan coin-nya menghilang. Tunggu 10 detik dan coin kembali. Jalan ke coin itu lagi: Coins naik ke 2.
- Sentuh lava. Karakter kamu tumbang dan muncul lagi di SpawnLocation setelah 5 detik, waktu respawn default Roblox. Coins di daftar pemain tetap, tapi hitunganmu untuk run ini mulai lagi dari 0.
- Sentuh Finish dengan kurang dari 3 coin di run ini: tidak terjadi apa-apa. Kumpulkan 3 coin, lalu sentuh: Wins naik ke 1 dan kamu jatuh kembali ke SpawnLocation.
- Tekan Stop (Shift+F5). Pilih Server & Clients di dropdown, atur 2 client dan tekan Play (atau F7). Ambil coin di satu jendela client dan lihat yang lain: coin-nya juga hilang di sana, karena server menyembunyikannya untuk semua orang.
Biarkan jendela Output terbuka sepanjang waktu. Kedua script ini tidak mencetak apa pun kalau berjalan, jadi peringatan atau error merah dari PlayerStats atau CourseService adalah masalah sungguhan. Lihat Error umum.
Langkah 6: Publikasikan game kamu
- Buka menu File dan pilih Publish. Jendela Game details terbuka.
- Ketik Name, pilih Genre (Subgenre opsional) dan tulis Description singkat tentang apa yang dilakukan pemain. Kamu juga bisa mengunggah ikon dan thumbnail di sini. Cek ukurannya dulu dengan pengecek ukuran thumbnail dan ikon gratis.
- Klik Save. Roblox mempublikasikan game ke cloud dan menghubungkannya ke akun kamu, jadi kamu bisa membukanya dari komputer mana pun.
- Game sekarang sudah dipublikasikan tapi privat. Hanya kamu, orang dengan akses Edit dan anggota grup dengan role yang tepat yang bisa memainkannya.
- Mau masukan sebelum merilisnya? Pilih File > Invite early testers dan pilih sampai 10 teman yang umurnya mirip. Kalau kamu belum menyelesaikan cek umur, Roblox memintamu melakukannya dulu. Tester melihat watermark yang memberi tahu bahwa game-nya masih preview.
Mulai sekarang, save ke Roblox dari menu File menyimpan versi place kamu di cloud. File > Publish yang mengubah versi yang didapat pemain. Sesekali, mainkan salinan yang sudah dipublikasikan dari Roblox, di luar Studio, untuk mengecek apakah sama dengan yang kamu tes.
Langkah 7: Rilis (jadikan game kamu publik)
Merilis adalah cara menjadikan game kamu publik, supaya orang selain kamu dan kolaboratormu bisa memainkannya. Sebelum mulai, cek syaratnya: akun kamu harus punya reputasi baik dan berumur minimal 2 hari, dan kamu butuh cek umur, lewat estimasi umur wajah atau ID pemerintah.
- Buka menu File dan pilih Publish lagi. Jendela Publish terbuka.
- Klik Continue. (Tombol Invite di sebelahnya justru mengundang early tester.)
- Jawab pertanyaan pertama Maturity & Compliance Questionnaire dari Roblox: apakah game kamu berisi konten dengan batasan umur? Jawab sesuai isi game kamu yang sebenarnya. Kalau kamu menjawab Yes, kamu mengisi seluruh kuesionernya.
- Klik Publish.
| Yang kamu lakukan | Label | Siapa yang bisa bermain |
|---|---|---|
| Menjawab No | Content May Vary | Pengguna yang sudah dicek umurnya, 16 tahun ke atas. Kamu bisa mengisi seluruh kuesioner nanti di Creator Hub untuk menjangkau audiens yang lebih luas. |
| Menjawab Yes, lalu mengisi kuesioner | Sesuai jawabanmu | Pengguna yang sudah dicek umurnya, 16 tahun ke atas, atau pengguna yang sudah diverifikasi umurnya, 18 tahun ke atas, tergantung isi game. |
| Memenuhi syarat semua umur | Minimal, Mild atau Moderate (9+), dari seluruh kuesioner | Semua umur. Di atas langkah-langkah tadi, kamu memverifikasi akun (estimasi umur wajah kalau di bawah 18, ID pemerintah kalau 18 ke atas), menyalakan verifikasi 2 langkah, entah mempertahankan langganan Roblox Plus atau Premium selama 2 bulan berturut-turut atau membayar biaya sekali yang bisa dikembalikan, dan game lolos evaluasi Roblox untuk rilis semua umur. |
Untuk hanya mengizinkan teman-temanmu, buka Creator Dashboard, pilih game-nya, masuk ke Publish settings > Manage Audience, klik Manage access, nyalakan Friends di tab Public dan klik Save Changes. Dengan Friends menyala, hanya temanmu dan orang di tab Playtest yang bisa bermain.
Syarat yang sama berlaku untuk setiap aksi rilis: rilis pertama, merilis versi baru dari game yang sudah keluar, merilis ke game lain dengan Publish As, dan mengubah siapa yang boleh bermain.
Membuatnya bareng teman
Tool kolaborasi Studio membuat kamu dan teman bisa mengedit place yang sama pada saat yang sama. Untuk game milikmu:
- Dengan game terbuka di Studio, klik Collaborate di sisi kanan mezzanine, bar yang sisi kirinya berisi tombol Play.
- Cari temanmu, pilih, pilih Edit di dropdown permission dan klik Save. Untuk game milikmu, hanya teman Roblox yang bisa dapat akses Edit.
- Temanmu membuka game dari Creator Dashboard, dan kalian berdua bekerja di place yang sama sekaligus.
Untuk berkolaborasi dengan kreator lain, kamu menyelesaikan cek umur dulu, lewat ID atau estimasi umur wajah. Setelah itu, secara default, Studio hanya membiarkan kamu berkolaborasi dengan kreator di kelompok umur yang cocok. Kamu bisa memakai Team Create sendirian tanpa cek umur. Selama sesi kolaborasi, Studio menyimpan place ke cloud setiap empat menit.
Jadikan game sungguhan
Course ini adalah loop yang lengkap: main, kumpulkan, finish, menang. Setiap panduan ini menambah satu sistem di atasnya (dalam bahasa Inggris kecuali disebut lain).
- Baru kenal script? Belajar scripting Roblox untuk pemula (dalam Bahasa Indonesia) membahas variabel, function, event dan loop, bagian-bagian penyusun CourseService.
- Simpan Coins dan Wins antar sesi dengan Langkah 3 dari panduan leaderboard. Script penyimpanannya menggantikan script Coins dan Wins seperti PlayerStats, jadi hapus PlayerStats saat kamu menambahkannya. Tutorial DataStore menjelaskan penyimpanan secara mendalam.
- Checkpoint berurutan, dengan stat Stage dan respawn di checkpoint terakhir: panduan checkpoint obby. Script-nya membuat folder leaderstats sendiri, jadi salin baris Coins dan Wins dari PlayerStats ke folder itu dan hapus PlayerStats. Dua script yang masing-masing membuat leaderstats memberi setiap pemain dua folder, dan Coins dan Wins bisa berhenti berubah.
- Belanjakan Coins di GUI shop. Panduan itu memakai nilai Coins di leaderstats, jadi lewati script Leaderstats-nya: PlayerStats sudah membuat Coins.
- Jual perk dengan Robux lewat game pass. Sebelum menetapkan harga, kalkulator pajak Robux gratis menunjukkan berapa yang kamu terima dari setiap penjualan setelah bagian Roblox, dan kalkulator DevEx berapa nilai Robux itu dalam dolar AS.
- Layar judul dengan tombol Play: panduan main menu.
- Ronde dengan intermission, map acak dan timer: panduan sistem ronde, yang menambah ke nilai Wins yang sama. Lewati script leaderstats-nya, karena PlayerStats sudah membuat Wins.
- Cutscene pembuka dengan shot kamera, teks dan tombol Skip: panduan cutscene.
- Pintu ke area rahasia yang terbuka dengan E, dengan kunci opsional: panduan pintu.
- Pad teleporter antar bagian map, atau menu teleport: panduan teleporter.
- Shift untuk sprint di keyboard, HP dan gamepad, dengan cek gerakan di server: panduan sprint. Cek gerakannya membaca atribut
MovementCheckSkipyang diatur Finish. - Pertarungan atau loop yang berbeda: beri pemain pedang atau senjata raycast, atau mulai game baru di mana pemain klik untuk coin, beli upgrade dan rebirth, dengan panduan game simulator.
Error umum dan cara memperbaikinya
Buka jendela Output (menu Window atau tab Script) sebelum kamu menekan Play. Kebanyakan masalah di course ini mencetak peringatan atau error di sana, atau berasal dari nama yang tidak cocok.
Infinite yield possible on 'Workspace:WaitForChild("Course")'
CourseService sudah menunggu 5 detik untuk folder bernama Course langsung di Workspace dan tidak menemukannya. Cek ejaan dan huruf C besarnya. Peringatan yang sama yang menyebut Lava, Coins atau Finish berarti objek itu tidak ada di Course atau namanya berbeda. Sampai objek itu muncul, tidak ada yang berjalan setelah baris itu, jadi lava, coin dan Finish semuanya tidak berfungsi.
Coins dan Wins tidak muncul di daftar pemain
Cek bahwa nama folder di PlayerStats adalah leaderstats, semua huruf kecil, dan PlayerStats adalah Script, bukan LocalScript, langsung di dalam ServerScriptService. Kalau keduanya benar, cari error merah dari PlayerStats di Output.
Error merah dari CourseService begitu aku menekan Play
Cek CanTouch di Properties pada setiap part lava, setiap coin dan Finish. Kalau mati di salah satunya saat kamu menekan Play, Roblox melempar error saat CourseService menyambungkan Touched ke part itu, dan script berhenti di situ: tidak ada yang berfungsi setelah titik itu, jadi coin berikutnya, Finish atau reset run mungkin tidak pernah tersambung. Centang CanTouch di semuanya dan tekan Play lagi.
Menyentuh coin tidak berefek apa-apa
Coin harus berupa part langsung di dalam folder Coins, bukan di dalam folder lain atau model di sana, karena CourseService hanya melihat child langsung dari folder itu. Coin juga harus sudah ada sebelum kamu menekan Play, dengan CanTouch dicentang (lihat poin di atas).
Aku menyentuh Finish dan tidak terjadi apa-apa
Kamu butuh 3 coin yang dikumpulkan di run ini, sejak terakhir spawn atau sampai di Finish. Menyentuh lava me-reset hitungan itu, begitu juga Win, meskipun angka Coins di daftar pemain tetap. Cek juga bahwa part-nya bernama persis Finish dan berada langsung di dalam Course.
Finish memberi Win tapi tidak memindahkanku kembali
CourseService mencari SpawnLocation langsung di Workspace, dan mencetak peringatan di Output kalau tidak menemukannya di sana. Kalau kamu menyeret SpawnLocation ke Course atau salah satu folder-nya, seret kembali ke Workspace di Explorer dan tekan Play lagi.
Lava tidak me-reset aku
Part lava harus langsung di dalam folder Lava sebelum kamu menekan Play, dengan CanTouch dicentang. Part lava yang kamu taruh di tempat lain di Course cuma platform merah.
Platform atau coin-ku jatuh saat aku menekan Play
Belum di-anchor. Pilih, centang Anchored di Properties, dan tekan Play lagi.
Bangun dengan RoCode
Kalau kamu lebih suka menjelaskan game-nya daripada membangun setiap bagian dengan tangan, RoCode bisa membangunnya di place yang kamu buka. RoCode adalah agen AI independen untuk Roblox Studio, bukan buatan Roblox: kamu jelaskan fiturnya di web chat-nya, dan plugin Studio-nya membuat part dan script di Explorer kamu, jadi kamu tidak menyalin kode dari jendela chat.
Buat coin course: folder Course berisi folder Lava dan Coins dan part Finish, leaderstat Coins dan Wins, lava yang me-reset pemain, coin bernilai 1 yang kembali setelah 10 detik, dan finish yang memberi Win hanya setelah 3 coin di run ini.
- Bisa mencari leaderstats atau kode DataStore yang sudah ada di place kamu dulu, jadi ia bisa memperluas yang kamu punya, bukan menambah leaderboard kedua
- Membuat folder dan part di Workspace dan Script di ServerScriptService
- Mengecek compile error setiap script yang ditulisnya di dalam Studio dengan Check Script. Itu cek compile, bukan cek tipe atau playtest
- Mengatur titik undo sebelum dan sesudah setiap kumpulan perubahan, jadi Ctrl+Z mundur satu kumpulan setiap kali
Dengan plugin 3.9 atau lebih baru RoCode bisa menjalankan playtest singkat dan membaca error-nya, dan dengan plugin 3.9.11 atau lebih baru ia bisa mengendalikan karakter tes untuk mengecek game-nya berjalan, tapi ia hanya mengecek apa yang dipilihnya untuk dites, jadi kamu tetap memainkannya sendiri. Membangun game utuh dengan RoCode bekerja satu sistem per prompt seperti ini. Cara RoCode tersambung ke Studio.
Pertanyaan umum
Bisakah aku membuat game Roblox gratis?
Bisa. Studio gratis, dan membangun serta mempublikasikan hanya butuh akun Roblox. Merilis ke pemain juga butuh akun dengan reputasi baik yang berumur minimal 2 hari, dan cek umur. Beberapa tambahan butuh Robux, seperti biaya yang bisa dikembalikan, salah satu cara untuk menjangkau semua umur.
Bisakah aku membuat game Roblox di HP, iPad atau Chromebook?
Halaman setup Roblox hanya mencantumkan Studio untuk Windows dan Mac, jadi kamu butuh salah satu komputer itu untuk membangun game.
Bagaimana cara menjadikan game Roblox-ku publik?
Rilis game-nya. Di Studio pilih File > Publish, klik Continue, jawab pertanyaan konten dengan batasan umur, lalu klik Publish. Kamu butuh akun dengan reputasi baik yang berumur minimal 2 hari, dan cek umur. Kalau kamu menjawab No, Roblox merilis game ke pengguna yang sudah dicek umurnya, 16 tahun ke atas. Menjangkau semua umur punya syarat tambahan, tercantum di Langkah 7.
Kenapa temanku tidak bisa memainkan game-ku?
Game baru itu privat: hanya kamu, orang dengan akses Edit dan anggota grup dengan role yang tepat yang bisa masuk. Rilis dengan File > Publish, yang butuh cek umur dan pertanyaan konten dengan batasan umur, atau undang sampai 10 teman yang umurnya mirip sebagai early tester dengan File > Invite early testers.
Kenapa game-ku hanya untuk 16+?
Biasanya karena kamu menjawab No untuk pertanyaan konten dengan batasan umur saat merilisnya. Roblox lalu memberi game label Content May Vary dan merilisnya ke pengguna yang sudah dicek umurnya, 16 tahun ke atas. Jawaban Yes dengan seluruh kuesioner juga memberi 16+, atau 18+, tergantung isi game. Menjangkau semua umur butuh verifikasi akun, verifikasi 2 langkah, langganan Roblox Plus atau Premium selama 2 bulan berturut-turut atau biaya sekali yang bisa dikembalikan, evaluasi game dan seluruh kuesioner.
Bagaimana cara membuat game bareng teman?
Klik Collaborate di Studio dan beri teman akses Edit. Untuk berkolaborasi dengan kreator lain kamu menyelesaikan cek umur dulu, dan setelahnya Studio secara default hanya membiarkan kamu berkolaborasi dengan kreator di kelompok umur yang cocok. Lalu kalian berdua bisa bekerja di place yang sama pada saat yang sama.
Apakah aku harus bisa scripting?
Tidak untuk panduan ini: kamu menempel dua script, dan tabel-tabelnya menjelaskan fungsi setiap bagian. Untuk mengubahnya dengan percaya diri, mulai dengan belajar scripting untuk pemula.
Sumber dan bacaan lanjutan
- Roblox Creator Docs: Roblox Studio setup (dalam bahasa Inggris). Studio aplikasi gratis untuk Windows dan Mac; memasang dan login
- Roblox Creator Docs: Create and publish games and places (dalam bahasa Inggris). template, File > Publish, privat secara default, early tester, merilis ke publik, syarat rilis, batas harian dan Manage Audience
- Roblox Creator Docs: Templates (dalam bahasa Inggris). isi template Baseplate
- Roblox Creator Docs: Explorer window (dalam bahasa Inggris). menyisipkan objek, folder dan menduplikasi
- Roblox Creator Docs: Parts (dalam bahasa Inggris). menyisipkan part, cylinder, memindahkan, mengubah ukuran dan warna
- Roblox Creator Docs: Deadly lava tutorial (dalam bahasa Inggris). part lava yang mengatur Health ke 0 saat disentuh
- Roblox Creator Docs: Create a coin collection mechanic (dalam bahasa Inggris). part coin dengan CanCollide mati dan Anchored menyala
- Roblox Creator Docs: Score points tutorial (dalam bahasa Inggris). folder leaderstats dan nama persisnya
- Roblox Creator Docs: BasePart.CanTouch (dalam bahasa Inggris). menyambungkan Touched ke part dengan CanTouch mati melempar error
- Roblox Creator Docs: Studio testing modes (dalam bahasa Inggris). Test, Play (F5), Stop dan Server & Clients
- Roblox Creator Docs: Humanoid:TakeDamage (dalam bahasa Inggris). perlindungan ForceField, dan mengatur Health langsung
- Roblox Creator Docs: PVInstance:PivotTo (dalam bahasa Inggris). cara memindahkan model dari script
- Roblox Creator Docs: Version History (dalam bahasa Inggris). versi yang disimpan dan versi terpublikasi yang didapat pemain
- Roblox Creator Docs: Security tactics and cheat mitigation (dalam bahasa Inggris). jangan pernah percaya client; event Touched dari jarak berapa pun
- Roblox Creator Docs: Network ownership, movement validation, and physics (dalam bahasa Inggris). client bisa teleport dan menerbangkan karakternya sendiri
- Roblox Creator Docs: Defensive design (dalam bahasa Inggris). kasus obby teleport ke ujung
- Roblox Creator Docs: Collaboration (dalam bahasa Inggris). tombol Collaborate, akses Edit, cek umur dan autosave
Cara kode ini dicek: setiap skrip di halaman ini lolos pemeriksa tipe strict Luau dengan definisi API Roblox (luau-lsp, 26 Oktober 2026). Pemeriksaan tipe menangkap nama API yang salah ketik dan tipe yang keliru, bukan logika game, jadi uji dulu di Studio sebelum dipublikasikan.