Tutorial · Dasar scripting

Cara membuat game di Roblox Studio, langkah demi langkah

Kamu bisa membuat game Roblox hanya dengan Roblox Studio, yang gratis, dan akun Roblox. Panduan ini membangun coin course singkat dari template Baseplate: platform untuk dilompati, lava yang me-reset kamu, coin di daftar pemain dan finish pad yang memberi Win, dijalankan oleh dua script server. Lalu game-nya dipublikasikan dan dirilis ke pemain, mengikuti aturan Roblox saat ini soal siapa yang boleh memainkannya.

Diperbarui 26 Oktober 202617 menit baca

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
  1. Yang dibangun
  2. 1. Pasang Studio
  3. 2. Bangun course
  4. 3. Script PlayerStats
  5. 4. Script CourseService
  6. Aturan di server
  7. 5. Playtest
  8. 6. Publish
  9. 7. Jadikan publik
  10. Bareng teman
  11. Langkah berikutnya
  12. Error umum
  13. Dengan RoCode
  14. Pertanyaan umum
  15. Sumber dan bacaan lanjutan

Apa yang akan kamu bangun

IlustrasiCourse yang sudah jadi dalam game yang berjalan: tiga coin dalam satu run, lalu Finish memberi Win dan mengirim pemain kembali ke awal.

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-bagian coin course
BagianTempatnyaFungsinya
SpawnLocationLangsung di Workspace (ikut dengan template Baseplate)Tempat pemain muncul saat masuk dan saat respawn. Finish mengirim pemain kembali ke sini.
Folder CourseWorkspaceMenampung seluruh level, jadi script menemukan semuanya di satu tempat.
Folder Lava dan part-nyaDi dalam CourseSetiap part di dalamnya me-reset pemain yang menyentuhnya.
Folder Coins dan part-nyaDi dalam CourseSetiap coin membayar 1 Coin ke pemain pertama yang menyentuhnya, menghilang, dan kembali setelah 10 detik.
Part FinishDi dalam CourseMemberi Win ke pemain yang mengumpulkan 3 coin di run ini, lalu memindahkannya kembali ke awal.
Script PlayerStatsServerScriptServiceMemberi setiap pemain stat Coins dan Wins di daftar pemain.
Script CourseServiceServerScriptServiceMenjalankan lava, coin dan Finish. Satu-satunya tempat Coins dan Wins berubah.
Explorer saat course selesai. Tambahkan platform, part lava dan coin sebanyak yang kamu mau. Hanya nama Course, Lava, Coins dan Finish yang wajib.
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

  1. Unduh Roblox Studio dari Creator Hub Roblox dan jalankan installer-nya (RobloxStudio.exe di Windows, RobloxStudio.dmg di Mac). Studio adalah aplikasi gratis untuk Windows dan Mac.
  2. Saat terbuka, login dengan akun Roblox kamu. Kalau belum punya, buat dulu di roblox.com.
  3. 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.
  4. 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

  1. Di Explorer, arahkan kursor ke Workspace, klik tombol + (atau tekan Ctrl+I, Cmd+I di Mac) dan sisipkan Folder. Ganti namanya jadi Course.
  2. Arahkan kursor ke Course, klik +, dan sisipkan dua Folder lagi di dalamnya. Beri nama Lava dan Coins.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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
-- 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
-- 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.

Fungsi setiap bagian CourseService
Bagian scriptKodeFungsinya
PengaturanCOINS_TO_FINISH, COIN_RESPAWN_SECONDSBerapa coin yang harus dikumpulkan pemain dalam satu run sebelum Finish dihitung (3), dan berapa lama coin yang diambil tetap tersembunyi (10 detik).
Mencari courseWaitForChild, 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 menyentuhplayerFromHitPart 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.
Lavahumanoid.Health = 0Me-reset karakter apa pun yang menyentuh part di folder Lava.
Cointaken, Transparency = 1, task.delayPemain 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 inirunCoinsMenghitung 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.
FinishrunCoins[player] < COINS_TO_FINISHMengabaikan 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 baruCharacterAdded, GetPlayers()Setiap karakter baru memulai run baru. Loop-nya mencakup pemain yang masuk selama script masih menunggu Course.
Bersih-bersihPlayerRemovingMelupakan 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.

Apa yang bisa dicoba cheater di course ini
Cheater mencobaHasilKenapa
Mengubah Coins atau Wins di perangkatnya sendiriHanya dia yang melihatnyaNilai aslinya ada di server, dan hanya CourseService yang mengubahnya.
Teleport langsung ke FinishTidak dapat WinFinish 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 jauhBisaPanduan 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 FinishBisaPerangkat setiap pemain mengendalikan karakternya sendiri, dan Roblox mencantumkan teleport dan terbang di antara hal yang bisa dilakukan client dengannya.
Mengabaikan lavaBisaPerangkat 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

  1. Pastikan Test terpilih di dropdown mode tes, lalu tekan Play (F5). Namamu muncul di daftar pemain dengan Coins 0 dan Wins 0.
  2. 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.
  3. 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.
  4. 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.
  5. 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

  1. Buka menu File dan pilih Publish. Jendela Game details terbuka.
  2. 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.
  3. Klik Save. Roblox mempublikasikan game ke cloud dan menghubungkannya ke akun kamu, jadi kamu bisa membukanya dari komputer mana pun.
  4. Game sekarang sudah dipublikasikan tapi privat. Hanya kamu, orang dengan akses Edit dan anggota grup dengan role yang tepat yang bisa memainkannya.
  5. 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.

  1. Buka menu File dan pilih Publish lagi. Jendela Publish terbuka.
  2. Klik Continue. (Tombol Invite di sebelahnya justru mengundang early tester.)
  3. 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.
  4. Klik Publish.
Siapa yang bisa bermain setelah rilis
Yang kamu lakukanLabelSiapa yang bisa bermain
Menjawab NoContent May VaryPengguna 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 kuesionerSesuai jawabanmuPengguna yang sudah dicek umurnya, 16 tahun ke atas, atau pengguna yang sudah diverifikasi umurnya, 18 tahun ke atas, tergantung isi game.
Memenuhi syarat semua umurMinimal, Mild atau Moderate (9+), dari seluruh kuesionerSemua 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:

  1. Dengan game terbuka di Studio, klik Collaborate di sisi kanan mezzanine, bar yang sisi kirinya berisi tombol Play.
  2. Cari temanmu, pilih, pilih Edit di dropdown permission dan klik Save. Untuk game milikmu, hanya teman Roblox yang bisa dapat akses Edit.
  3. 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 MovementCheckSkip yang 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.

Kamu ketik

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.

RoCode mengerjakan
  • 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

Bangun di Studio

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

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.

Coba RoCode di game kamu sendiri.

Kredit gratis setiap hari, tanpa kartu. Pasang plugin-nya, jelaskan fiturnya, lalu cek hasilnya di Studio.