ボールゴルフゲームを作ろう!

ボールが主人公のゲームを作ってみよう

まずはあそんでみよう!

ためしてみよう!

クリックでねらいをつけて、はなすとボールが飛ぶよ!

⛳ ホール 1/3
🏌️ ショット: 0
パワー

すごい!クリア!

このゲームを Roblox Studio で 3D で作ってみよう!

1

このゲームのすごいところ

オビー: キャラクターがジャンプ! VS ゴルフ: ボールが転がる! Roblox では なんでも 主人公にできるよ!

このチュートリアルで作るもの

  • ゴルフコース
  • 🏐 ボール(主人公!)
  • 🎯 ホール(ゴール)
  • 💥 障害物
  • 📊 スコアカウンター
💡 ポイント

ふつうの Roblox ゲームではキャラクターを動かすけど、このゲームではボールを転がすよ。プレイヤーの「主人公」がボールになるんだ!

2

準備しよう

Roblox Studio をひらいて、Baseplate テンプレートをえらぼう

テンプレートをえらぶ Baseplate Flat Terrain Village これをえらぶ!
💡 ポイント

きほんツールの使い方はオビーのテキストで学んだね!わからなくなったら見なおしてみよう

選択
移動
回転
サイズ
3

ゴルフコースを作ろう

1

コースを作る

大きなみどりのパーツを置いて、ゴルフコースを作ろう

設定
Size200, 1, 80
ColorForestGreen(みどり)
MaterialGrass(しば)
Anchored✓ ON
200 80 スタート ゴール プレイヤー
コースの上から見た図
2

壁(かべ)をつける

コースのまわりに壁をつけて、ボールが落ちないようにしよう

設定
Size200, 4, 2
ColorSaddleBrown(茶色)
MaterialWood(木)
Anchored✓ ON
上の壁 下の壁 左の壁 右の壁 4つの壁を置こう!
💡 ポイント

壁は Ctrl+D でコピーできるよ!1つ作ったらコピーして4つ並べよう

3

障害物を置く

コースの途中に障害物を置いて、かんたんにゴールできないようにしよう!

四角いパーツを置くだけ!

ウェッジパーツを使おう!

パーツを組み合わせて通路を作ろう!

⚠️ 注意

障害物は Anchored を ON にしよう!OFF だとボールがぶつかった時に障害物が飛んでいっちゃうよ

4

ホール(穴)を作る

ゴールの穴と旗を作ろう!

設定
NameHole
ShapeCylinder(つつ)
Size0.5, 6, 6
ColorBlack(くろ)
Orientation0, 0, 90
Anchored✓ ON
Size: 6 ゴルフボール ホール
ホールのアップ図
ボールがホールに入ったら判定するスクリプト
Hole パーツの中に Script を追加して、下のコードを書こう
local hole = script.Parent → このスクリプトがくっついているパーツを「hole」と名づける
hole.Touched:Connect(function(hit) → 何かが hole にさわったら、このコードを動かす
if hit.Name == "GolfBall" then → さわったものの名前が「GolfBall」だったら...
print("ナイスショット!") → 画面に「ナイスショット!」と表示する
local particles = Instance.new("ParticleEmitter") → お祝いのキラキラエフェクトを作る
particles.Color = ColorSequence.new(Color3.fromRGB(255, 215, 0)) → キラキラの色を金色にする
particles.Rate = 100 → 1秒に100個のキラキラを出す
particles.Lifetime = NumberRange.new(1, 2) → キラキラは1〜2秒で消える
particles.Speed = NumberRange.new(10, 20) → キラキラが飛ぶ速さ
particles.Parent = hole → キラキラをホールから出す
wait(2) → 2秒待つ
particles:Destroy() → キラキラを消す
hit:Destroy() → ボールを消す(ゴールしたから)
end
end) → コードのおわり
4

ボール(主人公)を作ろう

ここが一番大事!
Roblox のキャラクターのかわりに、ボールを主人公にするよ!
5

ゴルフボールを作る

Insert → Part → Ball でボールを作ろう

設定
NameGolfBall
Size3, 3, 3
ColorWhite(しろ)
MaterialSmoothPlastic
Anchored✗ OFF(動くから!)
Name: GolfBall Anchored: OFF ! Size: 3, 3, 3 SmoothPlastic
💡 ポイント

Anchored は OFF にしよう!ON だとボールが動かないよ

6

カメラをボールに合わせる

カメラがボールを追いかけるようにしよう!

StarterPlayer → StarterPlayerScripts の中に LocalScript を追加しよう

StarterPlayer StarterPlayerScripts S CameraScript ここに作る!
local ball = workspace:WaitForChild("GolfBall") → GolfBall が出てくるまで待って、「ball」と名づける
local camera = workspace.CurrentCamera → いま使っているカメラを「camera」と名づける
local RunService = game:GetService("RunService") → RunService(毎フレーム動かすサービス)を使う準備
local player = game.Players.LocalPlayer → このゲームをプレイしている人
player.CharacterAdded:Connect(function(character) → プレイヤーのキャラクターが出てきたら...
for _, part in pairs(character:GetDescendants()) do → キャラクターのすべてのパーツについて...
if part:IsA("BasePart") then → それが見えるパーツなら...
part.Transparency = 1 → 透明にする(見えなくする!)
end
end
end) → コードのおわり
RunService.RenderStepped:Connect(function() → 毎フレーム(1秒に60回!)実行する
if ball and ball.Parent then → ボールが存在していたら...
camera.CameraType = Enum.CameraType.Custom → カメラを自由な追従モードにする
camera.CameraSubject = ball → カメラがボールを追いかける!
end
end) → コードのおわり
カメラがボールを追いかける! キャラクターは透明に
7

ボールを打つスクリプト

クリックした方向にボールが飛ぶようにしよう!

マウスクリック この方向に飛ぶ! ねらい
local ball = workspace:WaitForChild("GolfBall") → ボールを見つけて「ball」と名づける
local player = game.Players.LocalPlayer → プレイしている人
local mouse = player:GetMouse() → マウスの情報を取得
local power = 50 → ボールを打つ力(大きいほど強く飛ぶ)
local canShoot = true → いま打てるかどうか(連打防止)
mouse.Button1Down:Connect(function() → マウスの左ボタンをクリックしたら...
if canShoot and ball and ball.Parent then → 打てる状態でボールがあれば...
canShoot = false → 連打できないようにする
local direction = (mouse.Hit.Position - ball.Position).Unit → クリックした場所への方向を計算
direction = Vector3.new(direction.X, 0, direction.Z) → 水平方向だけにする(上下には飛ばない)
ball:ApplyImpulse(direction * power) → ボールにその方向の力を加える!
task.wait(1) → 1秒待つ
canShoot = true → また打てるようにする
end
end) → コードのおわり
8

ショットカウンター

何回打ったか数えて画面に表示しよう!

⛳ ショット: 3 ここに 表示される!
local strokes = 0 → 打った回数。最初は0
local player = game.Players.LocalPlayer → プレイしている人
local screenGui = Instance.new("ScreenGui") → 画面に表示するためのGUIを作る
screenGui.Parent = player:WaitForChild("PlayerGui") → GUIをプレイヤーの画面に追加
local frame = Instance.new("Frame") → 背景の四角を作る
frame.Size = UDim2.new(0, 180, 0, 50) → 大きさ: 横180, 縦50
frame.Position = UDim2.new(0.5, -90, 0, 20) → 画面の上の真ん中に置く
frame.BackgroundColor3 = Color3.fromRGB(0, 0, 0) → 背景色は黒
frame.BackgroundTransparency = 0.4 → 少し透明にする
frame.Parent = screenGui → GUIの中に入れる
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 12)
corner.Parent = frame → 角を丸くする
local label = Instance.new("TextLabel") → 文字を表示するラベルを作る
label.Size = UDim2.new(1, 0, 1, 0) → フレームいっぱいのサイズ
label.BackgroundTransparency = 1 → ラベルの背景は透明
label.TextColor3 = Color3.fromRGB(255, 255, 255) → 文字の色は白
label.TextSize = 24 → 文字の大きさ
label.Font = Enum.Font.GothamBold → 太い文字フォント
label.Text = "⛳ ショット: 0" → 最初の表示テキスト
label.Parent = frame → フレームの中に入れる
5

コースを増やそう

9

2ホール目を作る

最初のコースをコピーして、むずかしいコースを作ろう!

💡 ヒント

Ctrl+A で全部えらんで、Ctrl+D でコピーできるよ!コピーしたら横に移動させよう

ホール2: L字コース スタート まがりかど ゴール 障害物 障害物
10

ホール間のワープ

ホール1をクリアしたら、ホール2のスタートにワープさせよう!

ホール1 クリア! ワープ! ホール2 スタート!
local hole1 = workspace:WaitForChild("Hole1") → ホール1のゴール穴を見つける
local startPos2 = Vector3.new(0, 5, -100) → ホール2のスタート位置(座標)
hole1.Touched:Connect(function(hit) → ホール1に何かがさわったら...
if hit.Name == "GolfBall" then → さわったのがボールなら...
print("ホール1 クリア!") → 「クリア!」と表示
wait(1) → 1秒待つ
hit.Position = startPos2 → ボールをホール2のスタートに移動!
hit.Velocity = Vector3.new(0, 0, 0) → ボールの速さを0にリセット
hit.RotVelocity = Vector3.new(0, 0, 0) → ボールの回転も0にリセット
end
end) → コードのおわり
11

スコアボード

全ホールのスコアをまとめて表示しよう!

⛳ スコアボード ホール 1 3 打 ホール 2 5 打 ホール 3 4 打 合計 12 打

打数を配列(テーブル)に保存して、合計を計算するよ。くわしいコードはチャレンジで作ってみよう!

6

もっと楽しくしよう!

ウォーターハザード(水)
ボールが水に落ちたらスタートにもどる!
water.Touched:Connect(function(hit)
if hit.Name == "GolfBall" then
hit.Position = Vector3.new(0, 5, 0) -- スタートにもどす
hit.Velocity = Vector3.new(0, 0, 0)
end
end)
砂バンカー
ボールが砂地に入るとゆっくりになる!
もたもた...
sand.Touched:Connect(function(hit)
if hit.Name == "GolfBall" then
hit.Velocity = hit.Velocity * 0.3 -- ゆっくりにする
end
end)
スピードパッド
踏むとボールがびゅーんと加速!
びゅーん!
speedPad.Touched:Connect(function(hit)
if hit.Name == "GolfBall" then
local boost = speedPad.CFrame.LookVector * 80
hit:ApplyImpulse(boost) -- 加速!
end
end)
回転する風車
風車がくるくる回って、ボールをじゃまする!
くるくる
RunService.Heartbeat:Connect(function(dt)
windmill.CFrame = windmill.CFrame
* CFrame.Angles(0, math.rad(60) * dt, 0) -- 回転!
end)
7

完成!

12

テストプレイ

作ったゲームを実際にあそんでみよう!

チェックリスト

ボールがちゃんと動く?
壁にぶつかって跳ね返る?
ホールに入ったらゴール判定が動く?
ショットカウンターが増える?
障害物はAnchored = ON?
カメラがボールを追いかける?
上のツールバーの ▶ ボタンを押してテストプレイ!
13

みんなに遊んでもらおう

ゲームを公開して、ともだちに遊んでもらおう!

  1. File メニューをクリック
  2. 「Publish to Roblox」をえらぶ
  3. ゲームの名前を入力
  4. 「Create」をクリック!
8

チャレンジ!

おめでとう!ボールゴルフゲームの完成!

ここからは自分のアイデアで、もっとすごいゲームにしよう!

🏆

9ホールのフルコースを作ろう!

プロのゴルフコースは18ホール。まずは9ホールをめざそう!

👫

ともだちとスコアを競争しよう!

できたゲームをともだちにURLを教えて遊んでもらおう!

💡

オリジナル障害物を発明しよう!

バネ、テレポーター、磁石...キミだけのアイデアで作ってみよう!