→ כל המדריכים
מדריך 5

בונים את משחק הגניבה וההגנה הראשון שלכם

כל שחקן מקבל Base. תופסים את Gem מהאמצע, רצים איתו הביתה כדי לקבל נקודה, ומסמנים כל מי שנושא אותו.

חינם70 דקות · מתחילים, המדריך האחרון · Roblox Studio
1
צעד 1 / 8

מכינים את המקום

  1. פותחים את Roblox Studio, לוחצים על New Experience ובוחרים בתבנית Baseplate.
  2. ה-Gem יעמוד באמצע המפה. ארבעה בסיסים יעמדו סביבו, כל אחד בערך 60 studs מהאמצע.
  3. המשחק הזה צריך לפחות שני שחקנים, ולכן בסוף תבדקו אותו עם שני שחקני בדיקה.

פרטים נוספים

  • התבנית Baseplate נמצאת ברשימת התבניות במסך הפתיחה.
  • השדה Position ב-Properties מראה איפה נמצא Part. Position 60, 0.5, 0 נמצא 60 studs מאמצע המפה.
  • הזיזו את ה-SpawnLocation, המשטח שבו השחקנים מופיעים, קרוב לאמצע, כך שכל שחקן יתחיל באותו מרחק מאבן החן.
  • ב-Mac משתמשים במקש Cmd בכל מקום שבו המדריך אומר Ctrl.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

2
צעד 2 / 8

בונים את הבסיסים

  1. ב-Explorer מעבירים את העכבר מעל Workspace, לוחצים על + ומוסיפים Folder. קוראים לו Bases.
  2. מוסיפים Part. מגדירים Size ל-16, 1, 16, מפעילים Anchored וצובעים אותו באפור. גוררים אותו לתוך Bases וקוראים לו Base1.
  3. משכפלים אותו שלוש פעמים עם Ctrl+D. קוראים לעותקים Base2, Base3 ו-Base4 ומזיזים אחד לכל צד של המפה.

פרטים נוספים

  • כדי לשים את ה-Part בתוך ה-Folder, גוררים את השם שלו ב-Explorer על השם Bases.
  • עותקים שנעשו עם Ctrl+D כבר נמצאים בתוך ה-Folder Bases. משנים שם לכל אחד עם F2.
  • השמות חייבים להיות בדיוק Base1, Base2, Base3 ו-Base4, בלי רווח לפני המספר.
  • בשרת עם יותר מארבעה שחקנים יש יותר שחקנים מבסיסים. בהמשך אפשר להגדיר את גודל השרת ל-4 בהגדרות המשחק ב-Creator Hub.
טיפ. שומרים על אותו מרחק מהאמצע לכל ארבעת הבסיסים. אז המשחק הוגן לכולם.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

3
צעד 3 / 8

יוצרים את ה-Gem

  1. מוסיפים Part באמצע המפה, בערך 4 studs מעל הרצפה. מגדירים Size ל-2, 2, 2, בוחרים צבע בהיר ומגדירים Material ל-Neon. קוראים לו Gem.
  2. מפעילים Anchored ו-Massless, ומכבים CanCollide.
  3. מעבירים את העכבר מעל Gem, לוחצים על + ומוסיפים ProximityPrompt. מגדירים ActionText ל-Take ו-HoldDuration ל-1.

מה עושה כל חלק

  • ProximityPrompt מראה כפתור כששחקן עומד קרוב. החזקה שלו לשנייה אחת מפעילה אותו.
  • Massless מופעל ו-CanCollide כבוי מונעים מה-Gem להאט את השחקן שנושא אותו או לדחוף אותו.

פרטים נוספים

  • Anchored, Massless ו-CanCollide הן תיבות סימון ב-Properties.
  • כשלוחצים על +, כותבים ProximityPrompt כדי למצוא אותו. לוחצים עליו, ואז משנים ב-Properties את ActionText ואת HoldDuration.
  • במשחק, כפתור קטן עם האות E והמילה Take מופיע כשעומדים ליד אבן החן.
  • בטלפון, שחקנים מחזיקים את האצבע על הכפתור הזה.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

4
צעד 4 / 8

נותנים לכל שחקן Base וניקוד

  1. מעבירים את העכבר מעל ServerScriptService, לוחצים על + ומוסיפים Script. קוראים לו Game.
  2. מוחקים את השורה שכבר כתובה שם ומדביקים את הקוד הזה. זה החלק הראשון מתוך שלושה.
  3. לוחצים על Play. Base אחד נהיה ירוק. זה הבסיס שלכם.
ServerScriptService > Game (1 / 3)
local Players = game:GetService("Players")

local bases = workspace:WaitForChild("Bases")
local gem = workspace:WaitForChild("Gem")
local home = gem.CFrame
local carrier = nil

Players.PlayerAdded:Connect(function(player)
	local stats = Instance.new("Folder")
	stats.Name = "leaderstats"
	stats.Parent = player

	local score = Instance.new("IntValue")
	score.Name = "Score"
	score.Parent = stats

	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == nil then
			base:SetAttribute("Owner", player.UserId)
			base.Color = Color3.fromRGB(60, 220, 120)
			break
		end
	end
end)

Players.PlayerRemoving:Connect(function(player)
	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == player.UserId then
			base:SetAttribute("Owner", nil)
			base.Color = Color3.fromRGB(160, 160, 160)
		end
	end
end)

מה עושה כל חלק

  • השורות הראשונות מוצאות את הבסיסים ואת ה-Gem וזוכרות איפה ה-Gem התחיל.
  • SetAttribute כותב את ה-UserId של הבעלים על הבסיס הפנוי הראשון.
  • PlayerRemoving משחרר את הבסיס שוב כשהבעלים שלו יוצא.

פרטים נוספים

  • הסקריפט נפתח בלשונית חדשה. לוחצים בתוך הקוד, לוחצים על Ctrl+A ואז על Ctrl+V כדי להחליף הכול.
  • איזה בסיס הופך לירוק תלוי בסדר הבסיסים ב-Folder. מסתובבים כדי למצוא את הבסיס שלכם.
  • רשימת השחקנים בפינה הימנית העליונה מראה Score 0.
  • עדיין לא קורה כלום כשהולכים אל אבן החן ומחזיקים E. זה יבוא בצעד הבא.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

5
צעד 5 / 8

נותנים לשחקנים לקחת את ה-Gem

  1. פותחים שוב את הסקריפט Game.
  2. מדביקים את הקוד הזה מתחת לקוד מהצעד הקודם.
  3. לוחצים על Play, הולכים אל ה-Gem ומחזיקים E. ה-Gem קופץ מעל הראש שלכם והולך אחריכם.
ServerScriptService > Game (2 / 3)
local function resetGem()
	carrier = nil

	local weld = gem:FindFirstChild("CarryWeld")
	if weld then
		weld:Destroy()
	end

	gem.Anchored = true
	gem.CFrame = home
	gem.ProximityPrompt.Enabled = true
end

gem.ProximityPrompt.Triggered:Connect(function(player)
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if carrier or not root then return end

	carrier = player
	gem.ProximityPrompt.Enabled = false
	gem.Anchored = false
	gem.CFrame = root.CFrame * CFrame.new(0, 4, 0)

	local weld = Instance.new("WeldConstraint")
	weld.Name = "CarryWeld"
	weld.Part0 = root
	weld.Part1 = gem
	weld.Parent = gem
end)

מה עושה כל חלק

  • carrier זוכר מי מחזיק את ה-Gem. אף אחד אחר לא יכול לקחת אותו בזמן שהוא נישא.
  • WeldConstraint מדביק את ה-Gem לשחקן, כך שהוא זז איתו.
  • resetGem מסיר את ה-weld ומחזיר את ה-Gem לאמצע.

פרטים נוספים

  • כדי לפתוח שוב את הסקריפט, לוחצים לחיצה כפולה על Game ב-Explorer.
  • לוחצים אחרי התו האחרון בקוד ולוחצים פעמיים על Enter. אחר כך לוחצים על Ctrl+V. הפעם לא לוחצים על Ctrl+A, אחרת תחליפו את החלק הראשון.
  • אבן החן מרחפת 4 studs מעל הראש שלכם בזמן שאתם נושאים אותה.
  • לבדיקה: לוקחים את אבן החן ובודקים שהכפתור Take נעלם כל עוד אתם נושאים אותה.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

6
צעד 6 / 8

מוסיפים ניקוד וסימון

  1. מדביקים את החלק האחרון הזה בסוף הסקריפט Game ממש.
  2. לוחצים על Play, לוקחים את ה-Gem ורצים אל הבסיס הירוק שלכם. ה-Score עולה ב-1 וה-Gem חוזר לאמצע.
ServerScriptService > Game (3 / 3)
for _, base in ipairs(bases:GetChildren()) do
	base.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player and player == carrier and base:GetAttribute("Owner") == player.UserId then
			player.leaderstats.Score.Value += 1
			resetGem()
		end
	end)
end

while true do
	task.wait(0.2)

	if carrier then
		local weld = gem:FindFirstChild("CarryWeld")
		local root = weld and weld.Part0
		local character = root and root.Parent
		local humanoid = character and character:FindFirstChildOfClass("Humanoid")

		if not humanoid or humanoid.Health <= 0 or root.Position.Y < -20 then
			resetGem()
		else
			for _, other in ipairs(Players:GetPlayers()) do
				local otherRoot = other ~= carrier and other.Character and other.Character:FindFirstChild("HumanoidRootPart")
				if otherRoot and (otherRoot.Position - root.Position).Magnitude < 5 then
					resetGem()
					break
				end
			end
		end
	end
end

מה עושה כל חלק

  • כל בסיס בודק שלושה דברים: שחקן נגע בו, השחקן הזה נושא את ה-Gem, והבסיס שייך לו.
  • הלולאה שבתחתית רצה 5 פעמים בשנייה. אם שחקן אחר מתקרב לנושא למרחק של פחות מ-5 studs, ה-Gem חוזר לאמצע.
  • הלולאה גם מאפסת את ה-Gem אם הנושא יוצא מהמשחק או נופל מהמפה.

פרטים נוספים

  • שוב לוחצים אחרי התו האחרון ממש בסקריפט, לוחצים פעמיים על Enter ומדביקים.
  • הסקריפט המוכן כולל שלושה חלקים בסדר הזה: בסיסים וניקוד, לקיחת אבן החן, וצבירת נקודות ותיוג.
  • בסיס אפור שלא שייך לאף אחד לא נותן נקודות. רק הבסיס הירוק שלכם נחשב.
  • לבד אי אפשר לבדוק תיוג. עושים את זה עם שני שחקנים בצעד הבא.
טעות נפוצה. מדביקים את החלק הזה באמצע הסקריפט. לולאת while אף פעם לא נגמרת, ולכן קוד שנמצא מתחתיה אף פעם לא רץ.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

7
צעד 7 / 8

בודקים עם שני שחקנים

  1. ליד הכפתור Play פותחים את התפריט הקטן ובוחרים Server & Clients. מגדירים את מספר השחקנים ל-2 ולוחצים על Play.
  2. Studio פותח שני חלונות משחק. כל אחד הוא שחקן אחר עם Base אחר.
  3. לוקחים את ה-Gem באחד החלונות. בחלון השני רצים אל השחקן הזה. ה-Gem חוזר לאמצע.
  4. עוצרים את הבדיקה עם כפתור Stop האדום בחלון הראשי של Studio, ואז מחזירים את התפריט ל-Test.

פרטים נוספים

  • התפריט הקטן הוא החץ שנמצא ממש ליד הכפתור Play בחלק העליון של Studio.
  • שני חלונות המשחק נפתחים אחד על השני. גוררים אחד הצידה כדי לראות את שניהם.
  • לוחצים בתוך חלון לפני שמשתמשים במקלדת. המקשים הולכים לחלון שלחצתם בו אחרון.
  • בדיקה עם שני חלונות דורשת מחשב עם מספיק זיכרון. אם זה איטי מאוד, סוגרים קודם תוכנות אחרות.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

8
צעד 8 / 8

מפרסמים אותו

  1. בוחרים File → Publish to Roblox. נותנים למשחק שם ותיאור קצר.
  2. באתר Creator Hub פותחים את המשחק שלכם וממלאים את השאלון Maturity.
  3. מגדירים את המשחק ל-Public ושולחים את הקישור לחבר.

פרטים נוספים

  • בפעם הראשונה שמפרסמים, Studio שואל על שם ותיאור. לוחצים על Create.
  • Creator Hub הוא האתר create.roblox.com. נכנסים עם אותו חשבון ולוחצים על המשחק שלכם ברשימה.
  • ייתכן ש-Roblox תבקש עוד דברים לפני שמשחק יכול להיות ציבורי, למשל בדיקת גיל בחשבון. הדף אומר לכם מה חסר.
  • אם אתם מתחת לגיל 18, עושים את הצעד הזה יחד עם הורה.
טיפ. המשחק הזה כיף רק עם שחקנים אחרים. מזמינים שניים או שלושה חברים לאותו שרת למשחק הראשון.
השלב הזה לא עובד לי

בדקו קודם את שלושת הדברים האלה

  • השם של כל Part וכל סקריפט זהה בדיוק למדריך, עם אותן אותיות גדולות.
  • הסקריפט נמצא בתוך העצם הנכון. הסתכלו על התווית שמעל תיבת הקוד.
  • פתחו את החלון Output מהתפריט Window. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

עדיין תקועים? כתבו לנו ←

עכשיו משנים בעצמכם

  • מסיימים את הסיבוב כששחקן מגיע ל-5 נקודות ומחזירים כל Score ל-0.
  • מוסיפים Gem שני בצבע אחר.
  • עושים שהנושא יהיה איטי יותר. רמז: מגדירים Humanoid.WalkSpeed ל-12 כשה-Gem נלקח ובחזרה ל-16 ב-resetGem.