Poradnik · Podstawy skryptowania

Jak zrobić grę w Roblox Studio, krok po kroku

Grę Roblox możesz zrobić tylko z Roblox Studio, które jest darmowe, i kontem Roblox. Ten poradnik buduje krótki tor z monetami na szablonie Baseplate: platformy do skakania, lawę, która cię resetuje, monety na liście graczy i metę, która daje zwycięstwo (Win), a wszystko napędzają dwa skrypty serwera. Potem publikuje grę i udostępnia ją graczom, zgodnie z obecnymi zasadami Roblox o tym, kto może w nią grać.

Zaktualizowano 26 października 202618 min czytaniaAutor:

Krótka odpowiedź

Żeby zrobić grę w Roblox Studio, otwórz Studio, wybierz szablon Baseplate, zbuduj poziom z Partów (zaznacz Anchored, żeby się nie ruszały) i dodaj Scripty w ServerScriptService z zasadami, na przykład folder leaderstats na monety. Kliknij Play (F5), żeby przetestować. Potem wybierz File > Publish, żeby zapisać grę na swoim koncie. Pozostaje prywatna, dopóki jej nie udostępnisz (nie zrobisz publiczną) z tego samego menu i nie odpowiesz na pytanie o treści z ograniczeniem wiekowym.

  • Trzymaj zasady gry w Scriptach serwera. Zmianę zrobioną przez LocalScript widzi tylko ten gracz, a wszystko na urządzeniu gracza może zmienić oszust.
  • Udostępnienie gry wymaga konta w dobrej kondycji, założonego co najmniej 2 dni temu, i weryfikacji wieku. Jeśli odpowiesz Nie na pytanie o treści z ograniczeniem wiekowym, Roblox oznacza grę jako Content May Vary i udostępnia ją użytkownikom ze zweryfikowanym wiekiem 16 lat lub więcej. Dotarcie do wszystkich grup wiekowych ma dodatkowe wymagania.
  • Studio działa na Windowsie i Macu. Strona konfiguracji Roblox nie podaje żadnej wersji na telefon ani tablet.
Na tej stronie
  1. Co zbudujesz
  2. 1. Instalacja Studio
  3. 2. Budowa
  4. 3. Skrypt PlayerStats
  5. 4. Skrypt CourseService
  6. Zasady na serwerze
  7. 5. Testowanie
  8. 6. Publikacja
  9. 7. Udostępnienie
  10. Ze znajomymi
  11. Kolejne kroki
  12. Częste błędy
  13. Z RoCode
  14. Najczęstsze pytania
  15. Źródła i dalsza lektura

Co zbudujesz

IlustracjaGotowy tor w działającej grze: trzy monety w jednej rundzie, a potem meta daje Win i odsyła gracza na start.

Gra to krótki tor. Gracze zaczynają na SpawnLocation, skaczą między platformami nad podłogą z lawy, zbierają monety i dotykają zielonej mety. Meta daje Win tylko graczowi, który zebrał co najmniej 3 monety od ostatniego pojawienia się albo dotarcia do mety, a potem odsyła go na start. Coins i Wins widać na liście graczy, a wszystkie zasady działają na serwerze.

Elementy toru z monetami
ElementGdzie jestCo robi
SpawnLocationBezpośrednio w Workspace (jest w szablonie Baseplate)Tu gracze pojawiają się po dołączeniu i po odrodzeniu. Meta odsyła graczy właśnie tutaj.
Folder CourseWorkspaceZawiera cały poziom, żeby skrypt znalazł wszystko w jednym miejscu.
Folder Lava i jego partyWewnątrz CourseKażdy part w środku resetuje gracza, który go dotknie.
Folder Coins i jego partyWewnątrz CourseKażda moneta płaci 1 Coin pierwszemu graczowi, który jej dotknie, chowa się i wraca po 10 sekundach.
Part FinishWewnątrz CourseDaje Win graczowi, który zebrał 3 monety w tej rundzie, a potem odsyła go na start.
Script PlayerStatsServerScriptServiceDaje każdemu graczowi statystykę Coins i Wins na liście graczy.
Script CourseServiceServerScriptServiceObsługuje lawę, monety i metę. To jedyne miejsce, w którym zmieniają się Coins i Wins.
Explorer z gotowym torem. Dodaj tyle platform, partów lawy i monet, ile chcesz. Stałe są tylko nazwy Course, Lava, Coins i Finish.
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

Wszystko w Workspace budujesz ręcznie w kroku 2. Dwa skrypty trafiają do ServerScriptService. Roblox nigdy nie wysyła graczom skryptów z tego kontenera, więc nikt nie może ich odczytać ani zmienić ze swojego urządzenia.

Krok 1: zainstaluj Studio i otwórz Baseplate

  1. Pobierz Roblox Studio z Creator Hub Roblox i uruchom instalator (RobloxStudio.exe na Windowsie, RobloxStudio.dmg na Macu). Studio to darmowa aplikacja na Windowsa i Maca.
  2. Gdy się otworzy, zaloguj się na swoje konto Roblox. Jeśli go nie masz, załóż je najpierw na roblox.com.
  3. W sekcji Open a Template wybierz Baseplate. Zaczyna się tylko z dwoma obiektami: SpawnLocation, na którym postacie pojawiają się i odradzają, i Baseplate, podłoże z teksturą siatki 4 na 4 dopasowaną do studsów, czyli jednostki długości w Roblox.
  4. Otwórz trzy okna, których będziesz używać cały czas. Explorer pokazuje każdy obiekt w twojej grze, a Properties zmienia zaznaczony obiekt; oba otwierasz z menu Window albo z zakładki Home. Output pokazuje błędy z twoich skryptów i otwierasz go z menu Window albo z zakładki Script.

Krok 2: zbuduj tor

  1. W Explorerze najedź myszką na Workspace, kliknij przycisk + (albo naciśnij Ctrl+I, Cmd+I na Macu) i wstaw Folder. Nazwij go Course.
  2. Najedź myszką na Course, kliknij + i wstaw do środka dwa kolejne Foldery. Nazwij je Lava i Coins.
  3. Zbuduj podłogę z lawy. Kliknij Part w zakładce Home albo Model, żeby wstawić blok, i narzędziem Scale rozciągnij go w dużą, płaską płytę, która leży pod całym torem, z dużym zapasem z każdej strony. W Properties ustaw jego Color na czerwony, a Material na Neon, zaznacz Anchored i przeciągnij go do folderu Lava. Teraz gracz, który spadnie w dowolnym miejscu, ląduje w lawie, a nie na Baseplate.
  4. Zbuduj platformy. Wstaw kolejne party w ten sam sposób i narzędziami Move i Scale ustaw je nad lawą, każdą kilka studsów wyżej, z przerwami do przeskakiwania. W Properties upewnij się, że Anchored jest zaznaczone na każdej, i przeciągnij je do Course.
  5. Zbuduj monety. Przytrzymaj małą strzałkę przy przycisku Part i wybierz Cylinder. Zrób go małym i żółtym, zaznacz Anchored i odznacz CanCollide, żeby gracze przez niego przechodzili, zamiast się z nim zderzać. Włóż go do folderu Coins, naciskaj Ctrl+D (Cmd+D na Macu), żeby go duplikować, aż będziesz mieć co najmniej 3, i rozmieść je nad platformami wzdłuż toru.
  6. Zbuduj metę. Wstaw jeszcze jeden part nad lawą na końcu, na tyle duży, żeby dało się na nim wylądować, pokoloruj go na zielono, zaznacz Anchored, nazwij go dokładnie Finish i przeciągnij bezpośrednio do Course, a nie do jednego z folderów.
  7. Przesuń SpawnLocation nad lawę na początek toru, obok pierwszej platformy, żeby stał nad płytą. Zostaw go bezpośrednio w Workspace, a nie w Course: CourseService szuka go właśnie tam, żeby odsyłać graczy na start.

Nazwy mają znaczenie

CourseService znajduje tor po nazwie: folder o nazwie Course bezpośrednio w Workspace, foldery Lava i Coins w jego środku i part o nazwie Finish w jego środku. Wpisz je dokładnie tak samo, z tymi samymi wielkimi literami. Nazwy partów lawy i monet nie mają znaczenia: każdy part bezpośrednio w Lava to lawa, a każdy part bezpośrednio w Coins to moneta.

Krok 3: dodaj Coins i Wins do listy graczy

W Explorerze najedź myszką na ServerScriptService, kliknij +, wstaw Script i nazwij go PlayerStats. Zastąp całą jego zawartość tym:

Script w ServerScriptService o nazwie PlayerStats
-- Script w ServerScriptService o nazwie PlayerStats.
-- Daje każdemu graczowi statystykę Coins i Wins. Folder o nazwie leaderstats wewnątrz
-- gracza sprawia, że Roblox pokazuje te wartości na liście graczy, w prawym górnym rogu.

local Players = game:GetService("Players")

local function onPlayerAdded(player: Player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats" -- musi być zapisane dokładnie tak

	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 -- ci, którzy dołączyli, zanim ta linia się wykonała
	onPlayerAdded(player)
end

Folder musi nazywać się leaderstats, małymi literami. Roblox odczytuje każdą wartość w środku i pokazuje ją na liście graczy, z nazwą wartości jako nagłówkiem kolumny.

Każdy gracz dostaje Folder o nazwie leaderstats z dwoma obiektami IntValue w środku. IntValue przechowuje liczbę całkowitą, czyli wszystko, czego potrzebuje licznik monet. Pętla na końcu przygotowuje każdego gracza, który dołączył, zanim wykonała się linia z PlayerAdded, żeby nikt nie został pominięty.

Poradnik o tabeli wyników (po angielsku) buduje ten sam folder dokładniej, a potem dodaje zapis i globalne top 10.

Krok 4: niech działają lawa, monety i meta

Wstaw drugi Script do ServerScriptService, nazwij go CourseService i wklej to. To jedyne miejsce, w którym zmieniają się Coins i Wins. Dwa ustawienia na górze to liczby przeznaczone do zmieniania.

Script w ServerScriptService o nazwie CourseService
-- Script w ServerScriptService o nazwie CourseService.
-- Obsługuje tor na serwerze, żeby wszyscy widzieli to samo i nikt nie mógł
-- sam sobie dać monet: party lawy resetują graczy, monety płacą 1 Coin i wracają,
-- a meta daje Win graczom, którzy zebrali w tej rundzie dość monet.

local Players = game:GetService("Players")

local COINS_TO_FINISH = 3 -- monety, które gracz musi zebrać w rundzie, zanim meta się liczy
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

-- Monety zebrane w tej rundzie: od ostatniego pojawienia się gracza albo dotarcia do mety
local runCoins: { [Player]: number } = {}

-- Znajduje gracza, którego postać dotknęła partu, albo nil dla czegokolwiek innego
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

-- Lawa: każdy part w folderze Lava resetuje gracza, który go dotknie
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

-- Monety: pierwszy gracz, który dotknie monety, zabiera ją, a potem moneta chowa się, aż wróci
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 -- to nie gracz albo ktoś już zabrał tę monetę
			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

-- Meta: Win dla graczy, którzy przeszli tor, i powrót na start
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 -- najpierw to, żeby ponowne dotknięcie mety nie liczyło się dwa razy
	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) -- dla skryptu kontroli prędkości, jeśli go dodasz
	end
end)

-- Nowa postać (po resecie albo upadku) zaczyna nową rundę
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 -- ci, którzy dołączyli, gdy ten skrypt czekał na Course
	onPlayerAdded(player)
end

Players.PlayerRemoving:Connect(function(player: Player)
	runCoins[player] = nil
end)

CourseService przegląda foldery Lava i Coins raz, gdy gra startuje. Zbuduj każdy part lawy i każdą monetę w Studio przed kliknięciem Play: part, który inny skrypt doda w trakcie gry, nie zostanie podłączony.

Co robi każda część CourseService
Część skryptuKodCo robi
UstawieniaCOINS_TO_FINISH, COIN_RESPAWN_SECONDSIle monet gracz musi zebrać w rundzie, zanim meta się liczy (3), i jak długo zebrana moneta zostaje ukryta (10 sekund).
Znalezienie toruWaitForChild, FindFirstChildOfClass("SpawnLocation")Czeka na Course, Lava, Coins i Finish po nazwie i znajduje SpawnLocation bezpośrednio w Workspace, na który meta odsyła graczy. Jeśli go nie ma, wypisuje ostrzeżenie w Output.
Kto dotknąłplayerFromHitDotykający part może być stopą, dłonią albo uchwytem czapki. FindFirstAncestorOfClass("Model") idzie w górę do modelu postaci, a GetPlayerFromCharacter zamienia go w gracza albo w nil dla wszystkiego, co nie jest postacią gracza.
Lawahumanoid.Health = 0Resetuje każdą postać, która dotknie partu z folderu Lava.
Monetytaken, Transparency = 1, task.delayPierwszy gracz, który dotknie monety, dostaje 1 Coin. Moneta staje się niewidoczna i ignoruje dotknięcia, dopóki nie wróci po COIN_RESPAWN_SECONDS. Ponieważ chowa ją serwer, znika dla wszystkich graczy.
Ta rundarunCoinsLiczy monety, które każdy gracz zebrał od ostatniego pojawienia się albo dotarcia do mety. Liczba Coins na liście graczy dalej rośnie; ten licznik wraca do 0 przy każdym odrodzeniu i każdym Win.
MetarunCoins[player] < COINS_TO_FINISHIgnoruje gracza z mniej niż 3 monetami w tej rundzie. W przeciwnym razie najpierw ustawia jego licznik na 0, żeby stanie na mecie nie płaciło dwa razy, dodaje 1 Win i przenosi postać 4 studsy nad SpawnLocation.
Nowa rundaCharacterAdded, GetPlayers()Każda nowa postać zaczyna nową rundę. Pętla obejmuje graczy, którzy dołączyli, gdy skrypt jeszcze czekał na Course.
SprzątaniePlayerRemovingZapomina gracza, który wychodzi.

Lawa ustawia Health na 0, tak jak własny poradnik Roblox o lawie. Nowa postać ma domyślnie ForceField przez 10 sekund po pojawieniu się na SpawnLocation, a Humanoid:TakeDamage nic nie robi, gdy ForceField ją chroni. Bezpośrednie ustawienie Health ignoruje ForceFieldy, więc lawa działa nawet zaraz po odrodzeniu.

Meta przenosi postać przez character:PivotTo(...), które dokumentacja Roblox nazywa głównym sposobem przesuwania modelu ze skryptu. Zmiana pozycji root partu postaci natomiast odrywa ten part od reszty ciała.

Linia MovementCheckSkip sama z siebie nic nie robi. Jest dla serwerowej kontroli prędkości z poradnika o sprincie (po angielsku): jeśli dodasz tę kontrolę później, teleport z mety nie zostanie oznaczony jako przekroczenie prędkości.

Dlaczego zasady działają na serwerze

Wszystkie zasady tego toru są w CourseService, Scripcie serwera, i to celowo. Gdyby monetę dodawał LocalScript, nowa wartość Coins istniałaby tylko na urządzeniu tego gracza: serwer i inni gracze nigdy by jej nie zobaczyli. A wszystko na urządzeniu gracza da się zmienić. Poradnik Roblox o bezpieczeństwie mówi, że exploiter ma pełną kontrolę nad swoim stanem lokalnym i ruchem sieciowym, więc to serwer musi podejmować wszystkie ważne decyzje.

Co oszust może próbować na tym torze
Oszust próbujeWynikDlaczego
Zmienić swoje Coins albo Wins na własnym urządzeniuWidzi to tylko onPrawdziwe wartości są na serwerze i zmienia je tylko CourseService.
Teleportować się prosto na metęBez WinMeta wymaga 3 monet zebranych w tej rundzie. Strona Roblox o projektowaniu defensywnym używa dokładnie tego przypadku z obby, exploitera, który teleportuje się na koniec po nagrody, i zaleca checkpointy sprawdzane przez serwer przed nagrodą.
Dotykać monet albo mety z dalekaMożliwePoradnik Roblox o bezpieczeństwie mówi, że exploiterzy mogą odpalać eventy Touched z dowolnej odległości i z dowolną częstotliwością. Każda moneta nadal płaci raz, temu, kto dotknie jej pierwszy, a potem chowa się na 10 sekund dla wszystkich.
Latać albo teleportować się do każdej monety, a potem na metęMożliweUrządzenie każdego gracza kontroluje jego własną postać, a Roblox wymienia teleportowanie i latanie wśród rzeczy, które klient może z nią robić.
Ignorować lawęMożliweTo samo urządzenie decyduje, czy dotknięcia jego postaci w ogóle odpalają. W pierwszej grze to do przyjęcia.

Zasada monet powstrzymuje więc najprostsze oszustwo, czyli skok prosto na koniec, i niewiele więcej. W pierwszej grze to normalne. Kolejne warstwy to sprawdzenie na serwerze, czy postać naprawdę jest blisko monety albo mety, zanim zapłaci, tak jak poradnik Roblox o bezpieczeństwie sprawdza odległość gracza od sklepu; checkpointy, do których trzeba dojść po kolei, jak w poradniku o checkpointach w obby; i kontrola ruchu, taka jak w poradniku o sprincie. Co się replikuje, a co nie dokładniej wyjaśnia podział na klienta i serwer. Te poradniki są po angielsku.

Krok 5: przetestuj

  1. Upewnij się, że w rozwijanej liście trybu testu wybrane jest Test, i kliknij Play (F5). Twoje imię pojawia się na liście graczy z Coins 0 i Wins 0.
  2. Podejdź do monety. Coins zmienia się na 1, a moneta znika. Poczekaj 10 sekund i wraca. Dotknij jej znowu: Coins rośnie do 2.
  3. Dotknij lawy. Twoja postać pada i po 5 sekundach, domyślnym czasie odrodzenia w Roblox, pojawia się znowu na SpawnLocation. Coins na liście graczy się nie zmienia, ale twój licznik z tej rundy wraca do 0.
  4. Dotknij mety z mniej niż 3 monetami w tej rundzie: nic się nie dzieje. Zbierz 3 monety i dotknij jej: Wins zmienia się na 1, a ty wracasz na SpawnLocation.
  5. Kliknij Stop (Shift+F5). Wybierz Server & Clients z rozwijanej listy, ustaw 2 klientów i kliknij Play (albo F7). Zbierz monetę w jednym oknie klienta i spójrz na drugie: moneta zniknęła też tam, bo serwer schował ją dla wszystkich.

Cały czas trzymaj otwarte okno Output. Te dwa skrypty nic nie wypisują, gdy działają, więc każde ostrzeżenie albo czerwony błąd z PlayerStats lub CourseService to prawdziwy problem. Zajrzyj do częstych błędów.

Krok 6: opublikuj grę

  1. Otwórz menu File i wybierz Publish. Otwiera się okno Game details.
  2. Wpisz Name, wybierz Genre (Subgenre jest opcjonalny) i napisz krótki Description tego, co robią gracze. Tutaj możesz też przesłać ikonę i miniaturkę. Najpierw sprawdź ich rozmiary darmowym narzędziem do sprawdzania rozmiaru miniaturek i ikon.
  3. Kliknij Save. Roblox publikuje grę w chmurze i łączy ją z twoim kontem, więc możesz ją otworzyć z dowolnego komputera.
  4. Gra jest już opublikowana, ale prywatna. Grać mogą tylko ty, osoby z dostępem Edit i członkowie grupy z odpowiednimi rolami.
  5. Chcesz opinii przed udostępnieniem? Wybierz File > Invite early testers i wybierz do 10 znajomych w podobnym wieku. Jeśli nie masz jeszcze weryfikacji wieku, Roblox poprosi cię najpierw o jej zrobienie. Testerzy widzą znak wodny, który mówi im, że gra to wersja podglądowa.

Od teraz zapis do Roblox z menu File trzyma wersję twojej gry w chmurze. File > Publish zmienia wersję, którą dostają gracze. Co jakiś czas zagraj w opublikowaną kopię z Roblox, poza Studio, żeby sprawdzić, czy zgadza się z tym, co testowałeś.

Krok 7: udostępnij grę (zrób ją publiczną)

Udostępnienie gry to sposób na zrobienie jej publiczną, żeby mogli w nią grać inni niż ty i twoi współpracownicy. Zanim zaczniesz, sprawdź wymagania: twoje konto musi być w dobrej kondycji i mieć co najmniej 2 dni, a potrzebujesz weryfikacji wieku, zrobionej przez szacowanie wieku z twarzy albo oficjalnym dokumentem tożsamości.

  1. Otwórz menu File i znowu wybierz Publish. Otwiera się okno Publish.
  2. Kliknij Continue. (Przycisk Invite obok zaprasza zamiast tego testerów.)
  3. Odpowiedz na pierwsze pytanie z Maturity & Compliance Questionnaire od Roblox: czy twoja gra zawiera treści z ograniczeniem wiekowym? Odpowiedz zgodnie z tym, co naprawdę jest w twojej grze. Jeśli odpowiesz Yes, wypełniasz cały kwestionariusz.
  4. Kliknij Publish.
Kto może grać po udostępnieniu
Co robiszEtykietaKto może grać
Odpowiadasz NieContent May VaryUżytkownicy ze zweryfikowanym wiekiem 16 lat lub więcej. Później możesz wypełnić cały kwestionariusz w Creator Hub, żeby dotrzeć do szerszej publiczności.
Odpowiadasz Yes i wypełniasz kwestionariuszZależnie od odpowiedziUżytkownicy ze zweryfikowanym wiekiem 16 lat lub więcej albo użytkownicy ze zweryfikowanym wiekiem 18 lat lub więcej, zależnie od tego, co zawiera gra.
Spełniasz wymagania dla wszystkich grup wiekowychMinimal, Mild albo Moderate (9+), z całego kwestionariuszaWszystkie grupy wiekowe. Oprócz powyższych kroków weryfikujesz konto (szacowanie wieku z twarzy, jeśli masz mniej niż 18 lat, oficjalny dokument, jeśli masz 18 lub więcej), włączasz weryfikację dwuetapową, utrzymujesz subskrypcję Roblox Plus albo Premium przez 2 miesiące z rzędu albo płacisz jednorazową zwrotną opłatę, a gra przechodzi ocenę Roblox do udostępnienia dla wszystkich grup wiekowych.

Żeby wpuszczać tylko znajomych, otwórz Creator Dashboard, wybierz grę, przejdź do Publish settings > Manage Audience, kliknij Manage access, włącz Friends w zakładce Public i kliknij Save Changes. Z włączonym Friends grać mogą tylko twoi znajomi i osoby z zakładki Playtest.

Te same wymagania dotyczą każdego działania związanego z udostępnieniem: pierwszego udostępnienia, udostępnienia nowej wersji gry, która już jest dostępna, udostępnienia do innej gry przez Publish As i zmiany tego, kto może grać.

Rób to ze znajomymi

Narzędzia do współpracy w Studio pozwalają tobie i znajomemu edytować tę samą grę jednocześnie. Dla twojej gry:

  1. Z grą otwartą w Studio kliknij Collaborate po prawej stronie górnego paska (mezzanine), tego paska, który po lewej ma przycisk Play.
  2. Wyszukaj znajomego, zaznacz go, wybierz Edit z rozwijanej listy uprawnień i kliknij Save. W twojej własnej grze dostęp Edit mogą mieć tylko znajomi z Roblox.
  3. Znajomy otwiera grę z Creator Dashboard i obaj pracujecie nad tą samą grą jednocześnie.

Żeby współpracować z innymi twórcami, najpierw przechodzisz weryfikację wieku, dokumentem albo szacowaniem wieku z twarzy. Potem Studio domyślnie pozwala ci współpracować tylko z twórcami ze zgodnych grup wiekowych. Team Create możesz używać sam bez weryfikacji wieku. Podczas sesji współpracy Studio zapisuje grę w chmurze co cztery minuty.

Zrób z tego prawdziwą grę

Tor to pełna pętla: graj, zbieraj, dojdź do mety, wygraj. Każdy z tych poradników (po angielsku, poza pierwszym) dodaje na tym kolejny system.

  • Dopiero zaczynasz ze skryptami? Skryptowanie w Roblox dla początkujących omawia zmienne, funkcje, eventy i pętle, czyli elementy, z których zbudowany jest CourseService.
  • Zapisuj Coins i Wins między sesjami dzięki krokowi 3 z poradnika o tabeli wyników. Jego skrypt zapisu zastępuje skrypt Coins i Wins taki jak PlayerStats, więc usuń PlayerStats, gdy go dodasz. Poradnik o DataStore dokładnie wyjaśnia zapisywanie.
  • Checkpointy po kolei, ze statystyką Stage i odrodzeniem na ostatnim checkpoincie: poradnik o checkpointach w obby. Jego skrypt tworzy własny folder leaderstats, więc skopiuj linie Coins i Wins z PlayerStats do tego folderu i usuń PlayerStats. Dwa skrypty, z których każdy tworzy leaderstats, dają każdemu graczowi dwa foldery, a Coins i Wins mogą przestać się zmieniać.
  • Wydawaj Coins w sklepie z GUI. Używa wartości Coins z leaderstats, więc pomiń jego skrypt Leaderstats: PlayerStats już tworzy Coins.
  • Sprzedaj bonus za Robux przez game pass. Zanim ustalisz cenę, darmowy kalkulator podatku od Robux pokaże, ile płaci ci każda sprzedaż po potrąceniu części Roblox, a kalkulator DevEx, ile te Robux są warte w dolarach amerykańskich.
  • Ekran tytułowy z przyciskiem Play: poradnik o menu głównym.
  • Rundy z przerwą, losowymi mapami i licznikiem czasu: poradnik o systemie rund, który dodaje do tej samej wartości Wins. Pomiń jego skrypt leaderstats, bo PlayerStats już tworzy Wins.
  • Przerywnik na początek z ujęciami kamery, napisami i przyciskiem Skip: poradnik o przerywnikach.
  • Drzwi do sekretnej strefy, które otwierają się klawiszem E, z opcjonalnym zamkiem na klucz: poradnik o drzwiach.
  • Platformy teleportacyjne między strefami mapy albo menu teleportacji: poradnik o teleporterach.
  • Sprint pod Shift na klawiaturze, telefonie i padzie, z serwerową kontrolą ruchu: poradnik o sprincie. Jego kontrola ruchu odczytuje atrybut MovementCheckSkip, który ustawia meta.
  • Walka albo inna pętla: daj graczom miecz albo broń z raycastem, albo zacznij nową grę, w której gracze klikają, żeby zdobywać monety, kupują ulepszenia i robią rebirth, z poradnikiem o grze typu symulator.

Częste błędy i rozwiązania

Otwórz okno Output (menu Window albo zakładka Script), zanim klikniesz Play. Większość problemów z tym torem wypisuje tam ostrzeżenie albo błąd albo wynika z niezgodnej nazwy.

Infinite yield possible on 'Workspace:WaitForChild("Course")'

CourseService czekał 5 sekund na folder o nazwie Course bezpośrednio w Workspace i go nie znalazł. Sprawdź pisownię i wielkie C. To samo ostrzeżenie z Lava, Coins albo Finish oznacza, że tego obiektu brakuje w Course albo ma inną nazwę. Dopóki się nie pojawi, nic po tej linii się nie wykonuje, więc lawa, monety i meta nic nie robią.

Coins i Wins nie pojawiają się na liście graczy

Sprawdź, czy nazwa folderu w PlayerStats to leaderstats, małymi literami, i czy PlayerStats to Script, a nie LocalScript, bezpośrednio w ServerScriptService. Jeśli obie rzeczy się zgadzają, poszukaj w Output czerwonego błędu z PlayerStats.

Czerwony błąd z CourseService zaraz po kliknięciu Play

Sprawdź CanTouch w Properties na każdym parcie lawy, każdej monecie i mecie. Jeśli jest wyłączone na którymś z nich, gdy klikasz Play, Roblox rzuca błąd, gdy CourseService podłącza Touched do tego partu, i skrypt zatrzymuje się w tym miejscu: nic dalej nie działa, więc kolejne monety, meta albo resety rund mogą nigdy nie zostać podłączone. Zaznacz CanTouch na wszystkich i kliknij Play ponownie.

Dotknięcie monety nic nie robi

Moneta musi być partem bezpośrednio w folderze Coins, a nie w innym folderze lub modelu w jego środku, bo CourseService patrzy tylko na bezpośrednie dzieci folderu. Musi też być tam przed kliknięciem Play, z zaznaczonym CanTouch (zobacz punkt wyżej).

Dotykam mety i nic się nie dzieje

Potrzebujesz 3 monet zebranych w tej rundzie, od ostatniego pojawienia się albo dotarcia do mety. Dotknięcie lawy resetuje ten licznik, Win też, nawet jeśli liczba Coins na liście graczy zostaje. Sprawdź też, czy part nazywa się dokładnie Finish i jest bezpośrednio w Course.

Meta daje Win, ale nie odsyła mnie na start

CourseService szuka SpawnLocation bezpośrednio w Workspace i wypisuje ostrzeżenie w Output, gdy go tam nie znajdzie. Jeśli przeciągnąłeś SpawnLocation do Course albo do jednego z jego folderów, przeciągnij go z powrotem do Workspace w Explorerze i kliknij Play ponownie.

Lawa mnie nie resetuje

Part lawy musi być bezpośrednio w folderze Lava przed kliknięciem Play, z zaznaczonym CanTouch. Part lawy, który postawisz gdzie indziej w Course, to tylko czerwona platforma.

Moje platformy albo monety spadają po kliknięciu Play

Nie są zakotwiczone. Zaznacz je, zaznacz Anchored w Properties i kliknij Play ponownie.

Z RoCode

Jeśli wolisz opisać grę, zamiast budować każdy element ręcznie, RoCode może zbudować ją w grze, którą masz otwartą. RoCode to niezależny agent AI do Roblox Studio, nie robi go Roblox: opisujesz funkcję na jego czacie w przeglądarce, a jego plugin do Studio tworzy party i skrypty w twoim Explorerze, więc nie kopiujesz kodu z okna czatu.

Ty piszesz

Zrób tor z monetami: folder Course z folderami Lava i Coins i partem Finish, leaderstats z Coins i Wins, lawę, która resetuje graczy, monety warte 1, które wracają po 10 sekundach, i metę, która daje Win dopiero po 3 monetach w tej rundzie.

RoCode robi
  • Może najpierw poszukać w twojej grze istniejącego kodu leaderstats albo DataStore, żeby rozbudować to, co masz, zamiast dodawać drugą tabelę wyników
  • Tworzy folder i party w Workspace oraz Scripty w ServerScriptService
  • Sprawdza w Studio przez Check Script, czy każdy napisany skrypt się kompiluje. To sprawdzenie kompilacji, a nie typów ani test gry
  • Ustawia punkt cofania przed i po każdej grupie zmian, więc Ctrl+Z cofa grupa po grupie

Zbuduj to w Studio

Z pluginem 3.9 lub nowszym RoCode może zrobić krótki test i przeczytać błędy, a z pluginem 3.9.11 lub nowszym sterować postacią testową, żeby sprawdzić, czy gra działa, ale sprawdza tylko to, co postanowił przetestować, więc grasz ty. Budowanie całej gry z RoCode działa tak samo, jeden system na prompt. Jak RoCode łączy się ze Studio.

Najczęstsze pytania

Czy mogę zrobić grę Roblox za darmo?

Tak. Studio jest darmowe, a budowanie i publikowanie wymagają tylko konta Roblox. Udostępnienie gry graczom wymaga też konta w dobrej kondycji, założonego co najmniej 2 dni temu, i weryfikacji wieku. Niektóre dodatki kosztują Robux, na przykład zwrotna opłata, która jest jednym ze sposobów na dotarcie do wszystkich grup wiekowych.

Czy mogę zrobić grę Roblox na telefonie, iPadzie albo Chromebooku?

Strona konfiguracji Roblox wymienia tylko Studio na Windowsa i Maca, więc do budowania gry potrzebujesz jednego z tych komputerów.

Jak zrobić moją grę Roblox publiczną?

Udostępnij ją. W Studio wybierz File > Publish, kliknij Continue, odpowiedz na pytanie o treści z ograniczeniem wiekowym i kliknij Publish. Potrzebujesz konta w dobrej kondycji, założonego co najmniej 2 dni temu, i weryfikacji wieku. Jeśli odpowiesz Nie, Roblox udostępni grę użytkownikom ze zweryfikowanym wiekiem 16 lat lub więcej. Dotarcie do wszystkich grup wiekowych ma dodatkowe wymagania, opisane w kroku 7.

Dlaczego moi znajomi nie mogą grać w moją grę?

Nowe gry są prywatne: wejść mogą tylko ty, osoby z dostępem Edit i członkowie grupy z odpowiednimi rolami. Udostępnij ją przez File > Publish, co wymaga weryfikacji wieku i odpowiedzi na pytanie o treści z ograniczeniem wiekowym, albo zaproś do 10 znajomych w podobnym wieku jako testerów przez File > Invite early testers.

Dlaczego moja gra jest tylko dla 16+?

Zwykle dlatego, że przy udostępnianiu odpowiedziałeś Nie na pytanie o treści z ograniczeniem wiekowym. Roblox daje jej wtedy etykietę Content May Vary i udostępnia ją użytkownikom ze zweryfikowanym wiekiem 16 lat lub więcej. Odpowiedź Yes z całym kwestionariuszem też daje 16+ albo 18+, zależnie od tego, co zawiera gra. Dotarcie do wszystkich grup wiekowych wymaga weryfikacji konta, weryfikacji dwuetapowej, subskrypcji Roblox Plus albo Premium przez 2 miesiące z rzędu albo jednorazowej zwrotnej opłaty, oceny gry i całego kwestionariusza.

Jak zrobić grę ze znajomymi?

Kliknij Collaborate w Studio i daj znajomemu dostęp Edit. Żeby współpracować z innymi twórcami, najpierw przechodzisz weryfikację wieku, a potem Studio domyślnie pozwala ci współpracować tylko z twórcami ze zgodnych grup wiekowych. Potem obaj możecie pracować nad tą samą grą jednocześnie.

Czy muszę umieć programować?

W tym poradniku nie: wklejasz dwa skrypty, a tabele wyjaśniają, co robi każda część. Żeby pewnie je zmieniać, zacznij od skryptowania w Roblox dla początkujących.

Źródła i dalsza lektura

Jak sprawdziliśmy kod: każdy skrypt na tej stronie przechodzi ścisłe sprawdzanie typów Luau z definicjami API Robloxa (luau-lsp, 26 października 2026). Sprawdzanie typów wyłapuje źle wpisane API i błędne typy, ale nie logikę gry, więc przetestuj go w Studio przed publikacją.

Wypróbuj RoCode we własnej grze.

Darmowe kredyty codziennie, bez karty. Zainstaluj plugin, opisz funkcję i sprawdź, co pojawi się w Studio.