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

בונים את ה-Tower Defense הראשון שלכם

אויבים הולכים לאורך Path לכיוון הבסיס שלכם, ומגדל יורה באויב הקרוב ביותר.

חינם60 דקות · מתחילים · Roblox Studio
1
צעד 1 / 8

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

  1. פותחים את Roblox Studio, לוחצים על New Experience ובוחרים בתבנית Baseplate.
  2. ב-Explorer מעבירים את העכבר מעל Workspace, לוחצים על + ומוסיפים Folder. קוראים לו Path.
  3. מוסיפים Folder שני ל-Workspace וקוראים לו Enemies. משאירים אותו ריק. האויבים יופיעו בו במהלך המשחק.

פרטים נוספים

  • התבנית Baseplate נמצאת ברשימת התבניות במסך הפתיחה.
  • כשלוחצים על +, כותבים את המילה Folder כדי למצוא אותו מהר. משנים שם ל-Folder עם F2.
  • השמות חייבים להיות בדיוק Path ו-Enemies, עם אות ראשונה גדולה. הסקריפטים מחפשים את השמות האלה.
  • ב-Mac משתמשים במקש Cmd בכל מקום שבו המדריך אומר Ctrl.
השלב הזה לא עובד לי

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

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

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

2
צעד 2 / 8

בונים את ה-Path

  1. מוסיפים Part. מגדירים Size ל-6, 1, 6, מפעילים Anchored וגוררים אותו לתוך ה-Folder Path. קוראים לו 1.
  2. משכפלים אותו עם Ctrl+D ומזיזים את העותק בערך 30 studs הצידה. קוראים לו 2.
  3. חוזרים על זה עד שיש 5 Parts בשמות 1, 2, 3, 4 ו-5. מניחים אותם כך שבמסלול יהיו כמה פניות.
  4. האויבים ילכו מ-1 ל-2 ל-3 וכן הלאה, בקו ישר בין כל זוג.

פרטים נוספים

  • כדי לשים Part בתוך ה-Folder, גוררים את השם שלו ב-Explorer על השם Path.
  • עותק שנעשה עם Ctrl+D כבר נמצא בתוך ה-Folder Path. צריך רק להזיז אותו ולשנות לו שם.
  • השמות הם פשוט המספרים: 1, 2, 3, 4, 5. בלי אותיות ובלי רווחים.
  • השאירו את החלקים מונחים על הרצפה. האויבים מרחפים 2 studs מעליהם.
טעות נפוצה. מדלגים על מספר. אם Part 3 חסר, האויבים נעצרים ב-Part 2 והסקריפט מראה שגיאה.
השלב הזה לא עובד לי

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

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

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

3
צעד 3 / 8

יוצרים את האויב

  1. מוסיפים Part. מגדירים Shape ל-Ball ו-Size ל-3, 3, 3, וצובעים אותו באדום. מפעילים Anchored, מכבים CanCollide וקוראים לו Enemy.
  2. מעבירים את העכבר מעל Enemy, לוחצים על + ומוסיפים IntValue. קוראים לו Health ומגדירים את ה-Value שלו ל-3.
  3. גוררים את Enemy אל ServerStorage. עכשיו הוא תבנית. המשחק יעשה ממנו עותקים.

פרטים נוספים

  • Shape היא רשימה ב-Properties. לוחצים עליה ובוחרים Ball.
  • CanCollide היא תיבת סימון ב-Properties. בלי הוי, שחקנים ו-Parts אחרים עוברים דרך האויב.
  • כשלוחצים על +, כותבים IntValue כדי למצוא אותו. לוחצים על ה-IntValue החדש, ואז משנים ב-Properties את Name ל-Health ואת Value ל-3.
  • אחרי שגוררים את Enemy ל-ServerStorage, הוא נעלם מה-Viewport. זה תקין.
טיפ. האויב עם Anchored כי סקריפט מזיז אותו. Parts עם Anchored מתעלמים מכוח המשיכה ומדחיפות.
השלב הזה לא עובד לי

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

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

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

4
צעד 4 / 8

בונים את ה-Base

  1. מוסיפים Part גדול בסוף ה-Path, ליד Part 5. מפעילים Anchored וקוראים לו Base.
  2. מעבירים את העכבר מעל Base, לוחצים על + ומוסיפים IntValue. קוראים לו Health ומגדירים את ה-Value שלו ל-10.
  3. מוסיפים BillboardGui ל-Base עם Size {0, 200}, {0, 50} ו-StudsOffset 0, 8, 0. מוסיפים לתוכו TextLabel עם Size {1, 0}, {1, 0} ו-TextScaled מופעל.
  4. מוסיפים Script ל-Base ומדביקים את הקוד הזה.
Base > Script
local base = script.Parent
local health = base.Health
local label = base.BillboardGui.TextLabel

local function update()
	if health.Value > 0 then
		label.Text = "Base: " .. health.Value
	else
		label.Text = "Game over"
	end
end

health.Changed:Connect(update)
update()

מה עושה כל חלק

  • Changed רץ בכל פעם שהערך של Health משתנה.
  • הפונקציה update כותבת את המספר החדש על הכיתוב שמעל הבסיס.
  • כש־Health מגיע ל־0, הכיתוב מציג Game over והסקריפט Waves מפסיק לשלוח אויבים.

פרטים נוספים

  • גודל של 10, 10, 10 הוא בסיס טוב. כל צבע מתאים.
  • ה-Health של הבסיס הוא עצם אחר מה-Health של האויב. כל אחד נמצא בתוך ה-Part שלו.
  • בשדות Size ו-StudsOffset כותבים את המספרים בדיוק כפי שהם מופיעים, עם הסוגריים והפסיקים, ולוחצים על Enter.
  • לבדיקה: לוחצים על F5. התווית שמעל הבסיס מראה Base: 10.
השלב הזה לא עובד לי

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

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

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

5
צעד 5 / 8

שולחים את הגלים

  1. מעבירים את העכבר מעל ServerScriptService, לוחצים על + ומוסיפים Script. קוראים לו Waves.
  2. מוחקים את השורה שכבר כתובה שם ומדביקים את הקוד הזה.
  3. לוחצים על Play. כל 3 שניות מופיע כדור אדום ב-Part 1 והולך לאורך ה-Path. כשהוא מגיע לסוף, ל-Base יורד 1 Health.
ServerScriptService > Waves
local TweenService = game:GetService("TweenService")
local ServerStorage = game:GetService("ServerStorage")

local path = workspace:WaitForChild("Path")
local enemies = workspace:WaitForChild("Enemies")
local base = workspace:WaitForChild("Base")
local SPEED = 8

local function walk(enemy)
	for i = 2, #path:GetChildren() do
		local target = path[tostring(i)].Position + Vector3.new(0, 2, 0)
		local distance = (target - enemy.Position).Magnitude
		local info = TweenInfo.new(distance / SPEED, Enum.EasingStyle.Linear)
		local tween = TweenService:Create(enemy, info, {Position = target})
		tween:Play()
		tween.Completed:Wait()
		if not enemy.Parent then return end
	end

	base.Health.Value = math.max(0, base.Health.Value - 1)
	enemy:Destroy()
end

while base.Health.Value > 0 do
	task.wait(3)

	local enemy = ServerStorage.Enemy:Clone()
	enemy.Position = path["1"].Position + Vector3.new(0, 2, 0)
	enemy.Parent = enemies
	task.spawn(walk, enemy)
end

מה עושה כל חלק

  • Clone עושה עותק של התבנית Enemy מ-ServerStorage.
  • הפונקציה walk מזיזה את האויב לכל Part של ה-Path לפי הסדר. distance / SPEED שומר על אותה מהירות במקטעים ארוכים וקצרים.
  • task.spawn נותן לכל אויב ללכת בעצמו, כך שהלולאה יכולה להמשיך לשלוח חדשים.

פרטים נוספים

  • הסקריפט נפתח בלשונית חדשה. לוחצים בתוך הקוד, לוחצים על Ctrl+A ואז על Ctrl+V כדי להחליף הכול.
  • אויבים מופיעים בתוך ה-Folder Enemies בזמן שהמשחק רץ. אפשר לראות אותם ב-Explorer.
  • בלי מגדל, כל אויב מגיע לבסיס. אחרי 10 אויבים התווית מראה Game over ולא באים עוד אויבים.
  • טקסט אדום ב-Output על שם חסר אומר שלאחד ה-Parts של המסלול או ל-Folder יש שם לא נכון.
השלב הזה לא עובד לי

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

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

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

6
צעד 6 / 8

בונים את ה-Tower

  1. מוסיפים Part ליד פנייה ב-Path. מגדירים Size ל-4, 8, 4, מפעילים Anchored וקוראים לו Tower.
  2. מוסיפים Script ל-Tower ומדביקים את הקוד הזה.
  3. לוחצים על Play. פעם בשנייה המגדל פוגע באויב הקרוב ביותר שנמצא בטווח. האויב מהבהב בלבן, ואחרי 3 פגיעות הוא נעלם.
Tower > Script
local tower = script.Parent
local enemies = workspace:WaitForChild("Enemies")
local RANGE = 25
local DAMAGE = 1

while true do
	task.wait(1)

	local target = nil
	local closest = RANGE
	for _, enemy in ipairs(enemies:GetChildren()) do
		local distance = (enemy.Position - tower.Position).Magnitude
		if distance < closest then
			target = enemy
			closest = distance
		end
	end

	if target then
		target.Health.Value -= DAMAGE
		if target.Health.Value <= 0 then
			target:Destroy()
		else
			target.Color = Color3.new(1, 1, 1)
			task.wait(0.1)
			target.Color = Color3.fromRGB(255, 60, 60)
		end
	end
end

מה עושה כל חלק

  • הלולאה מודדת את המרחק מהמגדל לכל אויב וזוכרת את הקרוב ביותר.
  • RANGE הוא כמה רחוק המגדל מגיע. DAMAGE הוא כמה Health מורידה פגיעה אחת.
  • כש-Health מגיע ל-0, Destroy מסיר את האויב.

פרטים נוספים

  • מניחים את המגדל 8 עד 12 studs מהמסלול. הטווח הוא 25 studs לכל כיוון.
  • מגדל אחד צריך 3 שניות לאויב אחד, ואויב חדש מגיע כל 3 שניות. לכן מגדל אחד יכול לעצור את האויבים רק אם הם נשארים בטווח מספיק זמן.
  • הבזק הלבן נמשך עשירית שנייה. צריך להסתכל היטב כדי לראות אותו.
  • למגדל שני, בוחרים Tower ולוחצים על Ctrl+D, ואז מזיזים את העותק. הסקריפט בא איתו.
טיפ. מגדל עובד הכי טוב ליד פנייה, כי שם האויבים נשארים בטווח יותר זמן.
השלב הזה לא עובד לי

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

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

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

7
צעד 7 / 8

בודקים ומאזנים

  1. לוחצים על F5 וצופים בכמה גלים.
  2. אם אף אויב לא מגיע לבסיס, המשחק קל מדי. אם הבסיס מאבד את כל ה-Health שלו מהר, המשחק קשה מדי.
  3. מאזנים עם שלושה מספרים: זמן ההמתנה ב-Waves, ערך ה-Health של האויב וה-DAMAGE של המגדל.
  4. לוחצים על Shift+F5 כדי לעצור. אם משהו לא עובד, פותחים את החלון Output מהתפריט Window וקוראים את הטקסט האדום.

פרטים נוספים

  • משנים רק מספר אחד בכל פעם, ואז משחקים שוב. אחרת לא יודעים איזה שינוי עזר.
  • זמן ההמתנה הוא המספר ב-task.wait(3) ליד סוף הסקריפט Waves. מספר קטן יותר שולח אויבים מהר יותר.
  • ה-Health של האויב נמצא ב-ServerStorage, בתוך Enemy. ה-DAMAGE של המגדל נמצא בראש הסקריפט Tower.
  • מטרה ראשונה טובה: הבסיס צריך לשרוד שתי דקות עם שני מגדלים.
השלב הזה לא עובד לי

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

  • השם של כל 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. טקסט אדום מראה את הסקריפט ואת השורה שבה יש בעיה.

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

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

  • מוסיפים מגדל שני עם טווח קצר ו-DAMAGE 2.
  • עושים שהגלים יהפכו למהירים יותר עם הזמן. רמז: שומרים את זמן ההמתנה במשתנה ומקטינים אותו קצת אחרי כל אויב.
  • נותנים ל-Base 20 Health ועושים שכל אויב מוריד 2.