フライトシミュレーターを作ろう!

飛行機が主人公!大空を自由に飛び回るゲームを作ってみよう

まずはあそんでみよう!

ためしてみよう!

矢印キーで飛行機を操作!リングをくぐってゴールをめざそう!

レベル 1/3
🔵 リング: 0/5
⭐ スコア: 0

パイロット認定!

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

1

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

オビー キャラがジャンプ ゴルフ ボールが転がる フライト 飛行機が飛ぶ!
Roblox では なんでも 主人公にできる!

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

  • ✈️ 飛行機(主人公!)
  • 🌤️ 空のステージ
  • 🔵 くぐるリング
  • 💨 飛行スクリプト
  • ⏱️ タイマー&スコア
  • 🏆 ゴール

キャラクターの代わりに飛行機を操作!

Roblox はオビーだけじゃない。プレイヤーの見た目も動きも、自由に変えられるんだ。
今回は「歩く」じゃなくて「飛ぶ」ゲームに挑戦しよう!

2

準備しよう

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

Baseplate Flat Terrain ↑ これをえらぶ! Village テンプレート選択画面
💡 ヒント

Baseplate でもOK!でも Flat Terrain だと広い空があるよ

🔧

よく使うツールを確認しよう

この4つのツールをたくさん使うよ!

選択
移動
回転
サイズ

空をきれいにしよう!

飛行機が飛ぶステージだから、空をきれいにしておこう!

Lighting の設定

Explorer で Lighting をクリックして、Properties を変えよう:

設定 意味
ClockTime 14 午後の太陽(明るい!)
Brightness 2 太陽の明るさアップ

Terrain の設定

Terrain タブで地面をたいらにして、Water を消そう!

ClockTime = 14 で午後の空 きれいな青空に飛行機が映える!
💡 ヒント

Terrain メニューの「Clear」を使うと水や山をぜんぶ消せるよ。Flat Terrain テンプレートを使った場合は、最初から平らだから安心!

3

飛行機を作ろう

1

機体(きたい)を作る

パーツを組み合わせて飛行機の形を作ろう!

飛行機のパーツ(ぶんかい図) コックピット Block(透明) Body 胴体(どうたい): Block Size: 2, 2, 10 左つばさ Block × 1 右つばさ Block × 1 尾翼(たて) TailFin 尾翼(よこ) TailWing 全部くっつけて飛行機にする!
パーツを1つずつ作って、移動ツールで組み合わせよう
パーツ Name Size Color
胴体 Body 2, 2, 10 White
左つばさ LeftWing 8, 0.3, 3 LightGray
右つばさ RightWing 8, 0.3, 3 LightGray
尾翼(たて) TailFin 0.3, 3, 2 Red
尾翼(よこ) TailWing 4, 0.3, 1.5 LightGray
コックピット Cockpit 1.5, 1.5, 2 CornflowerBlue(Transparency = 0.5)
💡 ヒント

パーツは1つずつ作って、移動ツールで位置を合わせよう!Part メニューから Block を追加して、Properties で Size と Name を変えてね。

2

パーツをくっつける

全部のパーツを1つの飛行機にまとめよう!

  1. 全パーツを選択(Ctrl+A で全部、または Shift+クリック)
  2. Model タブ → Group をクリック
  3. グループの名前を "Airplane" に変更
Explorer ウィンドウ Workspace Airplane (Model) Body LeftWing RightWing TailFin TailWing Cockpit パーツが全部 Airplane の中に入ればOK!
⚠️ 注意

Group じゃなくて Union は使わないでね!Union だとスクリプトで動かしにくくなるよ。

3

VehicleSeat を追加

飛行機に乗れるようにしよう!

  1. Explorer で Airplane モデルを選択
  2. InsertVehicleSeat を追加
  3. 移動ツールで Body の上に置く
  4. Properties で設定を変えよう
Seat ここに VehicleSeat を置く! Body 飛行機の横から見た図
設定 意味
MaxSpeed 100 最高速度
Torque 10000 エンジンの力
TurnSpeed 1 曲がるスピード
💡 ヒント

VehicleSeat に座ると、WASDキーで動かせるようになるよ!あとでスクリプトでもっと自由に飛べるようにするよ。

4

飛行機を浮かせる

BodyVelocity を使って飛行機を空中に浮かせよう!

Airplane モデルの中に Script を追加して、下のコードを書こう

Explorer で Airplane を右クリック → Insert Object → Script

local airplane = script.Parent → このスクリプトがくっついている飛行機モデル
local body = airplane:WaitForChild("Body") → 飛行機の胴体パーツを見つける
local seat = airplane:FindFirstChildWhichIsA("VehicleSeat") → 飛行機の座席を見つける
local bodyVelocity = Instance.new("BodyVelocity") → 空中に浮かせるための力を作る
bodyVelocity.MaxForce = Vector3.new(50000, 50000, 50000) → すべての方向に力を加えられるようにする
bodyVelocity.Velocity = Vector3.new(0, 0, 0) → 最初は止まっている
bodyVelocity.Parent = body → 胴体に力をくっつける
local bodyGyro = Instance.new("BodyGyro") → 飛行機が傾きすぎないようにする装置
bodyGyro.MaxTorque = Vector3.new(40000, 40000, 40000) → 姿勢を保つ力の強さ
bodyGyro.P = 5000 → 姿勢を戻す速さ
bodyGyro.Parent = body → 胴体にくっつける
local speed = 0
local maxSpeed = 150 → 今のスピードと最高スピード
seat:GetPropertyChangedSignal("Throttle"):Connect(function() → 座席のアクセル(W/Sキー)が変わったら...
speed = speed + seat.Throttle * 10 → スピードを変える(Wで加速、Sで減速)
speed = math.clamp(speed, 0, maxSpeed) → 0〜最高速度の範囲に収める
end) → コードのおわり
game:GetService("RunService").Heartbeat:Connect(function() → 毎フレーム実行する
local direction = body.CFrame.LookVector → 飛行機が向いている方向
bodyVelocity.Velocity = direction * speed → 向いている方向にスピード分だけ進む!
local steer = seat.Steer → ハンドル操作(A/Dキー)の値
bodyGyro.CFrame = bodyGyro.CFrame * CFrame.Angles(
math.rad(seat.Throttle * -2),
math.rad(steer * -2),
0
) → キー入力で飛行機の向きを変える
end) → コードのおわり
操作方法(そうさほうほう) W A S D W: 加速(上昇) D: 右旋回 A: 左旋回 S: 減速(下降) 前進 WASDキーで飛行機を自由に操作!
💡 ヒント

テストプレイで飛行機に近づくと、座席に座るプロンプトが出るよ。座ったらWキーで加速して飛んでみよう!

4

カメラを設定しよう

5

追従カメラ

カメラが飛行機の後ろから追いかけるようにしよう!

LocalScript を StarterPlayerScripts の中に追加して、名前を FlightCamera にしよう。

Explorer StarterPlayer StarterPlayerScripts FlightCamera (LocalScript) ここに LocalScript を追加!
local airplane = workspace:WaitForChild("Airplane") → 飛行機モデルを見つける
local body = airplane:WaitForChild("Body") → 飛行機の胴体を見つける
local camera = workspace.CurrentCamera → カメラを取得
local RunService = game:GetService("RunService") → 毎フレーム動かすサービス
local player = game.Players.LocalPlayer → プレイヤー
player.CharacterAdded:Connect(function(char) → キャラクターが出てきたら...
for _, part in pairs(char:GetDescendants()) do
if part:IsA("BasePart") then
part.Transparency = 1
end
end → キャラクターを透明にする(飛行機だけ見えるように!)
end)
local offset = Vector3.new(0, 10, 30) → カメラの位置(飛行機の上10、後ろ30)
RunService.RenderStepped:Connect(function() → 毎フレーム実行
if body and body.Parent then → 飛行機があれば...
local targetPos = body.CFrame:PointToWorldSpace(offset) → 飛行機の後ろ上にカメラ位置を計算
camera.CFrame = CFrame.lookAt(targetPos, body.Position) → カメラをその位置に置いて、飛行機を見る!
end
end) → コードのおわり
カメラの位置(横から見た図) 飛行機 カメラ 上に 10 後ろに 30 カメラが飛行機の後ろからついてくる!
💡 ヒント

offset の数字を変えると、カメラの位置が変わるよ!
Vector3.new(0, 10, 30) の「10」を大きくするとカメラが高く、「30」を大きくするとカメラが遠くなるよ。いろいろ試してみよう!

5

コースを作ろう

6

リングを作る

飛行機がくぐるリングを作ろう!4つの細いパーツを組み合わせて、四角いゲートの形にするよ。

4つのパーツでリングの形を作る! 上 (Top) 下 (Bottom) 左 (Left) 右 (Right) トリガーゾーン(透明) 飛行機がリングの中をくぐり抜ける!
パーツ Size Color Material Anchored
Top(上) 12, 1, 1 Yellow Neon ON
Bottom(下) 12, 1, 1 Yellow Neon ON
Left(左) 1, 12, 1 Yellow Neon ON
Right(右) 1, 12, 1 Yellow Neon ON

4つのパーツを並べたら、全部えらんで右クリック → Group → 名前を "Ring1" にしよう!

次に、リングの真ん中に透明なトリガーパーツを追加するよ。飛行機が通過したことを検知するためのパーツだよ!

プロパティ あたい
Name RingTrigger
Size 10, 10, 2
Transparency 1(完全に透明)
CanCollide false
Anchored ON

このトリガーパーツも Ring1 モデルの中に入れよう。そして RingTrigger の中に Script を追加して、下のコードを書こう!

local trigger = script.Parent → 透明なトリガーパーツ
local passed = false → もう通過したかどうか
trigger.Touched:Connect(function(hit) → 何かがトリガーにさわったら...
if passed then return end → もう通過済みなら何もしない
if hit.Name == "Body" then → さわったのが飛行機の胴体なら...
passed = true → 通過済みにする
print("リング通過!") → 通過メッセージ
local ring = script.Parent.Parent → リングの親モデル
for _, part in pairs(ring:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "RingTrigger" then
part.Color = Color3.fromRGB(89, 192, 89)
end
end → リングの色を緑(通過済み)に変える!
end
end) → コードのおわり
💡 ヒント

リングをコピーして、コースに沿って並べよう!5〜10個がちょうどいいよ。
コピーするときは Ring1 モデルを選んで Ctrl+D でかんたんにコピーできるよ!

7

リングを空に配置

リングを空中に並べてコースを作ろう!高さや位置を変えて、いろんなルートを飛べるようにしよう。

コースの配置(横から見た図) スタート Ring1 高さ: 50 Ring2 高さ: 80 Ring3 高さ: 60 Ring4 高さ: 40 ゴール リングの高さを変えて、上下の操作も必要にしよう!
💡 ポイント

リングの高さを変えると、プレイヤーが上昇・下降の操作をしないといけなくなるよ!
まっすぐ飛ぶだけじゃなくて、上下にも動くコースが楽しいよ。

8

スタート&ゴール

スタート地点とゴールを作ろう!スタートは SpawnLocation の上にプラットフォームを作って、ゴールは大きな緑色のゲートにしよう。

ゴール用のゲートも Ring と同じ作り方で、色を緑(Green)にして大きめに作ろう。ゴールゲートの中に透明なトリガーパーツを入れて、下のスクリプトを追加しよう!

local goal = script.Parent → ゴールのトリガーパーツ
goal.Touched:Connect(function(hit) → ゴールにさわったら...
if hit.Name == "Body" then → 飛行機の胴体なら...
print("ゴール!おめでとう!") → クリアメッセージ
local message = Instance.new("Message") → 画面いっぱいのメッセージを作る
message.Text = "クリア!おめでとう!" → メッセージの内容
message.Parent = workspace → ゲーム世界に表示
wait(3) → 3秒表示
message:Destroy() → メッセージを消す
end
end) → コードのおわり
9

タイマーを作る

何秒でゴールできるか計ろう!画面にタイマーを表示して、プレイヤーがタイムアタックできるようにするよ。

⏱ タイム: 00:15.3 🔵 リング: 3/5 タイマー表示 リングカウント

StarterPlayerScripts の中に LocalScript を追加して、下のコードを書こう。
(Explorer で StarterPlayerScripts を右クリック → Insert Object → LocalScript)

local player = game.Players.LocalPlayer
local startTime = tick() → ゲーム開始時刻を記録
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = player:WaitForChild("PlayerGui") → 画面GUIを作る
local timerLabel = Instance.new("TextLabel")
timerLabel.Size = UDim2.new(0, 200, 0, 50)
timerLabel.Position = UDim2.new(0, 20, 0, 20)
timerLabel.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
timerLabel.BackgroundTransparency = 0.4
timerLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
timerLabel.TextSize = 22
timerLabel.Font = Enum.Font.GothamBold
timerLabel.Text = "⏱️ タイム: 00:00.0" → タイマー表示ラベルを作る
timerLabel.Parent = screenGui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 10)
corner.Parent = timerLabel → 角を丸くする
game:GetService("RunService").RenderStepped:Connect(function()
local elapsed = tick() - startTime
local mins = math.floor(elapsed / 60)
local secs = elapsed % 60
timerLabel.Text = string.format("⏱️ タイム: %02d:%04.1f", mins, secs) → 毎フレーム、経過時間を表示
end) → コードのおわり
6

もっと楽しくしよう!

スピードブースト
通過するとスピードアップ!
2倍速!
boost.Touched:Connect(function(hit)
if hit.Name == "Body" then
local vel = hit.Parent:FindFirstChildWhichIsA("BodyVelocity")
if vel then
vel.Velocity = vel.Velocity * 2 -- 2倍速!
wait(2)
-- 元に戻る
end
end
end)
雲のトンネル
雲の中を飛ぶと、まわりが真っ白に!
まわりが真っ白!

Fog エフェクトと白いパーツで作れるよ

着陸チャレンジ
指定の場所にピタッと着陸!
BodyVelocity を 0 にして着陸!

BodyVelocity を 0 にして、地面に近づくスクリプトで作れるよ

マルチプレイヤーレース
ともだちと一緒に飛んでタイムを競おう!
VS Team Create で一緒に作って遊ぼう!

Team Create を使えば一緒に作って一緒に遊べるよ

7

完成!

10

テストプレイ

作ったゲームを実際にあそんでみよう!下のチェックリストで確認してね。

チェックリスト

VehicleSeat に座れる?
WASDで飛行機が動く?
上昇・下降できる?
カメラが飛行機を追いかける?
リングを通過すると色が変わる?
ゴールしたらメッセージが出る?
タイマーが動いてる?
上のツールバーの ▶ ボタンを押してテストプレイ!
11

みんなに遊んでもらおう

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

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

チャレンジ!

おめでとう!フライトシミュレーターの完成!

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

🏆

3つのコースを作ろう!

かんたん・ふつう・むずかしい の3コース!リングの数や配置を変えてみよう

🌋

障害物コースを作ろう!

ビルや山を避けながら飛ぶコース!パーツで建物を作って並べよう

🎨

オリジナル飛行機をデザインしよう!

色を変えたり、パーツを増やしたり!ジェット機、プロペラ機、宇宙船...なんでもOK!