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

最初の「うばって守る」ゲームを作ろう

プレイヤー全員に基地があります。まん中から gem をつかんで、家まで走って点を取ります。gem を持っている人には、タッチして取りもどします。

無料70分 · 初心者、最後のガイド · Roblox Studio
1
ステップ 1 / 8

プレイスを準備する

  1. Roblox Studio を開いて、New Experience をクリックし、Baseplate のテンプレートを選びます。
  2. gem は、マップのまん中に置きます。そのまわりに、4つの基地を、まん中から約60 studs はなして置きます。
  3. このゲームには、2人以上のプレイヤーが必要です。だから、最後に、2人のテストプレイヤーでテストします。

くわしく見る

  • Baseplate のテンプレートは、スタート画面のテンプレート一覧にあります。
  • Properties の Position の欄は、パーツがどこにあるかを表します。Position が 60, 0.5, 0 なら、マップのまん中から60 studs はなれています。
  • SpawnLocation(プレイヤーが出てくる足場)を、まん中の近くに動かそう。そうすると、どのプレイヤーも、gem から同じきょりでスタートできます。
  • Mac では、このガイドに Ctrl と書いてあるところで、いつも Cmd キーを使ってね。
このステップがうまくいかない

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

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

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

2
ステップ 2 / 8

基地を作る

  1. Explorer で Workspace の上にマウスを置いて、+ をクリックし、Folder を足します。名前は Bases にします。
  2. Part を足します。Size を 16, 1, 16 にして、Anchored をオンにして、灰色にします。Bases にドラッグして、名前を Base1 にします。
  3. Ctrl+D で3回コピーします。コピーの名前を Base2、Base3、Base4 にして、マップの四方に1つずつ動かします。

くわしく見る

  • パーツをフォルダに入れるには、Explorer でパーツの名前をドラッグして、Bases という名前の上に重ねよう。
  • Ctrl+D で作ったコピーは、はじめから Bases フォルダの中にあります。ひとつずつ、F2 で名前を変えよう。
  • 名前は、かならず Base1、Base2、Base3、Base4 にしよう。数字の前にスペースは入れません。
  • 5人以上いるサーバーでは、基地よりプレイヤーのほうが多くなります。あとで、Creator Hub のゲーム設定で、サーバーの人数を4にできます。
ヒント. 4つの基地は、まん中から同じ きょりに置きましょう。そうすると、ゲームが みんなに公平になります。
このステップがうまくいかない

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

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

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

3
ステップ 3 / 8

gem を作る

  1. マップのまん中の、床から約4 studs 上に、Part を足します。Size を 2, 2, 2 にして、明るい色にして、Material を Neon にします。名前は Gem にします。
  2. Anchored と Massless をオンにして、CanCollide をオフにします。
  3. Gem の上にマウスを置いて、+ をクリックし、ProximityPrompt を足します。ActionText を Take に、HoldDuration を 1 にします。

それぞれの部分の はたらき

  • ProximityPrompt は、プレイヤーが近くに立つと、ボタンを出します。1秒 おし続けると、動きます。
  • Massless がオン、CanCollide がオフだと、gem を持つプレイヤーが、おそくなったり、おされたりしません。

くわしく見る

  • Anchored、Massless、CanCollide は、Properties にあるチェックボックスです。
  • + をクリックしたら、ProximityPrompt と入力するとすぐに見つかります。それをクリックして、Properties で ActionText と HoldDuration を変えよう。
  • ゲームの中で、gem の近くに立つと、文字 E と Take ということばがついた小さなボタンが出ます。
  • スマートフォンでは、そのボタンを指で長くおします。
このステップがうまくいかない

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

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

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

4
ステップ 4 / 8

プレイヤー全員に基地と点をあげる

  1. ServerScriptService の上にマウスを置いて、+ をクリックし、Script を足します。名前は Game にします。
  2. もとから入っている行を消して、このコードをはり付けます。これは、3つの部分の1つ目です。
  3. Play を押します。基地が1つ、緑になります。それが、あなたの基地です。
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 で、ぜんぶ置きかえよう。
  • どの基地が緑になるかは、フォルダの中の基地の順番で決まります。歩きまわって、自分の基地を見つけよう。
  • 右上のプレイヤー一覧に、Score 0 と出ます。
  • gem のところまで歩いて E を長くおしても、まだ何も起きません。それは次のステップでやります。
このステップがうまくいかない

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

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

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

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 をプレイヤーにくっつけます。だから、gem はプレイヤーといっしょに動きます。
  • resetGem は、くっつけたものを外して、gem をまん中にもどします。

くわしく見る

  • もう一度スクリプトを開くには、Explorer で Game をダブルクリックします。
  • コードの一番さいごの文字のうしろをクリックして、Enter を2回押します。そのあと Ctrl+V を押そう。今回は Ctrl+A を押さないでね。押すと、最初の部分が置きかわってしまいます。
  • gem を持っているあいだ、gem はあなたの頭の4 studs 上にういています。
  • テストするには、gem をとって、持っているあいだ Take ボタンが消えているか見よう。
このステップがうまくいかない

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

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

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

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

それぞれの部分の はたらき

  • それぞれの基地は、3つのことをたしかめます。プレイヤーがさわったこと、そのプレイヤーが gem を持っていること、その基地がそのプレイヤーのものであることです。
  • いちばん下のループは、1秒に5回 動きます。ほかのプレイヤーが、gem を持つ人に5 studs より近づくと、gem はもどります。
  • gem を持っている人がゲームから抜けたときや、マップから落ちたときも、ループは gem をもどします。

くわしく見る

  • もう一度、スクリプトの一番さいごの文字のうしろをクリックして、Enter を2回押し、はりつけます。
  • できあがったスクリプトは、3つの部分が、この順番で並んでいます。基地と得点、gem をとること、得点とタグづけです。
  • だれのものでもない灰色の基地は、点にならないよ。点になるのは、自分の緑の基地だけです。
  • ひとりでは、タグづけをテストできません。それは、次のステップで2人でやります。
よくある まちがい. この部分を、スクリプトの途中にはり付けること。while のループは終わらないので、その下にあるコードは、ぜったいに動きません。
このステップがうまくいかない

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

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

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

7
ステップ 7 / 8

2人でテストする

  1. Play ボタンのとなりの小さいメニューを開いて、Server & Clients を選びます。プレイヤーの数を 2 にして、Play を押します。
  2. Studio が、ゲームのウィンドウを2つ開きます。それぞれ、ちがう基地を持つ、ちがうプレイヤーです。
  3. 1つのウィンドウで gem を取ります。もう1つのウィンドウで、そのプレイヤーにぶつかります。gem がまん中にもどります。
  4. メインの Studio ウィンドウの赤い Stop ボタンで、テストを止めて、メニューを Test にもどします。

くわしく見る

  • 小さなメニューは、Studio の上にある Play ボタンのすぐ右の矢印です。
  • 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歳未満の人は、このステップを保護者の人といっしょにやってね。
ヒント. このゲームは、ほかのプレイヤーがいないと楽しくありません。最初の試合には、友だちを2、3人、同じサーバーにさそいましょう。
このステップがうまくいかない

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

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

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

自分で変えてみよう

  • プレイヤーが 5 点になったらラウンドを終わりにして、全員の Score を 0 にもどしてみよう。
  • ちがう色の、2つ目の gem を足してみよう。
  • gem を持っている人を、おそくしてみよう。ヒント: gem を取ったときに Humanoid.WalkSpeed を 12 にして、resetGem で 16 にもどします。