← すべてのガイド
ガイド 4

最初の Tower Defense を作ろう

敵が基地に向かって道を歩いてきて、タワーがいちばん近い敵をうちます。

無料60分 · 初心者 · Roblox Studio
1
ステップ 1 / 8

プレイスを準備する

  1. Roblox Studio を開いて、New Experience をクリックし、Baseplate のテンプレートを選びます。
  2. Explorer で Workspace の上にマウスを置いて、+ をクリックし、Folder を足します。名前は Path にします。
  3. Workspace に、もう1つ Folder を足して、名前を Enemies にします。中は空のままにします。ゲームの間に、敵がこの中に出てきます。

くわしく見る

  • Baseplate のテンプレートは、スタート画面のテンプレート一覧にあります。
  • + をクリックしたら、Folder と入力するとすぐに見つかります。フォルダの名前は F2 で変えられます。
  • 名前は、かならず Path と Enemies にしよう。最初の文字は大文字です。スクリプトは、この名前をさがします。
  • Mac では、このガイドに Ctrl と書いてあるところで、いつも Cmd キーを使ってね。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

2
ステップ 2 / 8

道を作る

  1. Part を足します。Size を 6, 1, 6 にして、Anchored をオンにして、Path の Folder にドラッグします。名前は 1 にします。
  2. Ctrl+D でコピーして、コピーを約30 studs 動かします。名前は 2 にします。
  3. 1、2、3、4、5 という名前の Part が5つになるまで、くりかえします。道に曲がり角がいくつかあるように置きます。
  4. 敵は、1 から 2、3、と順番に、となり同士をまっすぐ進みます。

くわしく見る

  • パーツをフォルダに入れるには、Explorer でパーツの名前をドラッグして、Path という名前の上に重ねよう。
  • Ctrl+D で作ったコピーは、はじめから Path フォルダの中にあります。動かして、名前を変えるだけです。
  • 名前は、数字だけです。1、2、3、4、5。文字もスペースも入れません。
  • パーツは、ゆかの上に置いたままにしておこう。てきは、その2 studs 上をういて進みます。
よくある まちがい. 数字をとばすこと。3 の Part がないと、敵は 2 で止まって、スクリプトにエラーが出ます。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

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 にあるチェックボックスです。チェックがないと、プレイヤーやほかのパーツが、敵をすり抜けます。
  • + をクリックしたら、IntValue と入力するとすぐに見つかります。できた IntValue をクリックして、Properties で Name を Health に、Value を 3 に変えよう。
  • Enemy を ServerStorage にドラッグすると、Viewport から消えます。それで正しいです。
ヒント. 敵が Anchored なのは、スクリプトが動かすからです。Anchored の Part は、重力にも、おされることにも、ひきずられません。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

4
ステップ 4 / 8

基地を作る

  1. 道の終わりの、5 の Part のとなりに、大きな Part を足します。Anchored をオンにして、名前を Base にします。
  2. Base の上にマウスを置いて、+ をクリックし、IntValue を足します。名前は Health にして、Value を 10 にします。
  3. Base に BillboardGui を足して、Size を {0, 200}, {0, 50}、StudsOffset を 0, 8, 0 にします。その中に TextLabel を足して、Size を {1, 0}, {1, 0} にして、TextScaled をオンにします。
  4. Base に Script を足して、このコードをはり付けます。
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 スクリプトは敵を送るのをやめます。

くわしく見る

  • Size は 10, 10, 10 がちょうどいいです。色は何でもだいじょうぶです。
  • 基地の Health と、敵の Health は、ちがうオブジェクトです。それぞれ、自分のパーツの中に入っています。
  • Size と StudsOffset は、数を見本のとおりに入力します。かっこもコンマもそのままです。そして Enter を押そう。
  • テストするには、F5 を押します。基地の上のラベルに、Base: 10 と出ます。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

5
ステップ 5 / 8

ウェーブを送る

  1. ServerScriptService の上にマウスを置いて、+ をクリックし、Script を足します。名前は Waves にします。
  2. もとから入っている行を消して、このコードをはり付けます。
  3. Play を押します。3秒ごとに、赤い玉が 1 の Part に出てきて、道を進みます。終わりまで着くと、基地の health が 1 へります。
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 は、ServerStorage にある Enemy のひな形のコピーを作ります。
  • walk 関数は、敵を、道の Part へ順番に動かします。distance / SPEED のおかげで、長い道でも短い道でも、同じ速さになります。
  • task.spawn のおかげで、敵が1体ずつ自分で歩きます。だから、ループは、次の敵を送り続けられます。

くわしく見る

  • スクリプトは、新しいタブで開きます。コードの中をクリックして、Ctrl+A を押し、そのあと Ctrl+V で、ぜんぶ置きかえよう。
  • ゲームが動いているあいだ、敵は Enemies フォルダの中に出てきます。Explorer で見ることができます。
  • タワーがまだないと、敵はぜんぶ基地にとどきます。10体めのあとに、ラベルが Game over になって、もう敵は来ません。
  • Output に、名前が見つからないという赤い文字が出たときは、道のパーツかフォルダの名前がまちがっています。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

6
ステップ 6 / 8

タワーを作る

  1. 道の曲がり角の近くに、Part を足します。Size を 4, 8, 4 にして、Anchored をオンにして、名前を Tower にします。
  2. Tower に Script を足して、このコードをはり付けます。
  3. Play を押します。1秒に1回、タワーは、とどく範囲でいちばん近い敵をうちます。敵は白くひかって、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 は、1回うつと へる health の量です。
  • Health が 0 になると、Destroy が敵を消します。

くわしく見る

  • タワーは、道から8から12 studs のところに置こう。射程は、どの方向にも25 studs です。
  • タワー1つが敵1体にかかる時間は3秒で、新しい敵は3秒ごとに来ます。だから、敵が射程の中に十分長くいるときだけ、タワー1つで道を守れます。
  • 白い光は、10分の1秒だけ光ります。よく見ないと分かりません。
  • 2つ目のタワーを作るには、Tower を選んで Ctrl+D を押し、コピーを動かします。スクリプトもいっしょについてきます。
ヒント. タワーは、曲がり角のとなりがいちばん強いです。そこでは、敵が範囲の中に長くいるからです。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

7
ステップ 7 / 8

テストして、バランスを取る

  1. F5 を押して、ウェーブをいくつか見ましょう。
  2. 基地に着く敵が1体もいなければ、ゲームは かんたんすぎます。基地の health がすぐなくなるなら、むずかしすぎます。
  3. 3つの数字で、バランスを取ります。Waves の待ち時間、敵の Health の値、タワーの DAMAGE です。
  4. Shift+F5 を押して、止めます。うまくいかないときは、Window メニューから Output ウィンドウを開いて、赤い文字を読みましょう。

くわしく見る

  • いちどに変えるのは、数をひとつだけにしよう。そして、もう一度あそぶんだよ。そうしないと、どの変更がよかったのか分からなくなります。
  • 待つ時間は、Waves スクリプトの終わりの近くにある task.wait(3) の数です。数を小さくすると、敵が早く来ます。
  • 敵の Health は、ServerStorage の中の Enemy にあります。タワーの DAMAGE は、Tower スクリプトの一番上にあります。
  • はじめの目標は、タワー2つで、基地が2分間もちこたえることです。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

8
ステップ 8 / 8

公開する

  1. File → Publish to Roblox を選びます。ゲームの名前と、短い説明を入れます。
  2. Creator Hub のウェブサイトで、自分のゲームを開いて、Maturity のアンケートに答えます。
  3. ゲームを Public にして、リンクを友だちに送ります。

くわしく見る

  • はじめて公開するときは、Studio が名前と説明を聞いてきます。Create をクリックしよう。
  • Creator Hub は、create.roblox.com というウェブサイトです。同じアカウントでログインして、一覧からあなたのゲームをクリックします。
  • ゲームを公開する前に、Roblox からほかのことを求められる場合があります。たとえば、アカウントの年齢確認です。足りないものは、ページに出ます。
  • 18歳未満の人は、このステップを保護者の人といっしょにやってね。
ヒント. 友だちにゲームを見せて、1つだけ聞いてみましょう。かんたんすぎた? むずかしすぎた? それから、数字を1つ変えて、またテストします。
このステップがうまくいかない

まず、この3つを見てみよう

  • パーツやスクリプトの名前が、ガイドとまったく同じか見てみよう。大文字と小文字も同じにします。
  • スクリプトが正しいオブジェクトの中にあるか見てみよう。コードの箱の上にあるラベルを見てください。
  • Window メニューから Output を開こう。赤い文字が出ていたら、どのスクリプトの何行目に問題があるかが分かります。

まだ困っていますか? メールで教えてください →

自分で変えてみよう

  • 範囲がせまくて DAMAGE が 2 の、2つ目のタワーを足してみよう。
  • ウェーブが、だんだん速くなるようにしてみよう。ヒント: 待ち時間を変数に入れて、敵を1体送るたびに、少しずつ小さくします。
  • 基地の health を 20 にして、敵1体で 2 へるようにしてみよう。