「ロブロックスで一人称視点のゲームを作りたい」「カメラを横から見る形に固定したい」「Shiftキーでダッシュできるようにしたい」
ロブロックス(Roblox)スタジオで、カメラの見え方とキー入力を変える方法を、実際の画像付きで誰でも簡単に分かるように解説します。一人称視点はプロパティを1つ変えるだけでできます。横から見るカメラとShiftキーのダッシュは、それぞれ短いLocalScriptで作ります。
中級ステップ23/28 前の記事:ロブロックス(Roblox)スタジオの画像の入れ方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。LocalScriptは、体力ゲージの作り方でも使った、プレイヤーごとのパソコンの中で動くスクリプトです。
今回の完成状態:下の画像のように、カメラがキャラクターを横から映し、歩くとカメラが付いてくれば、横から見るカメラの完成です(画像の1)。スポーン地点が画面の左へ流れていきます(画像の2)。

この記事で作る3つ
| 作るもの | 使うもの | スクリプト |
|---|---|---|
| 一人称視点 | StarterPlayerのCameraMode | なし |
| 横から見るカメラ(カメラ固定) | LocalScript「CameraManager」 | あり |
| Shiftキーでダッシュ | LocalScript「DashControl」 | あり |
カメラは、プレイヤーごとに自分の画面だけで動いています。Robloxの公式のチュートリアルにも、カメラの設定はプレイヤーの側(LocalScript)で決めると書かれています。そのため、この記事のスクリプトは2つともLocalScriptにして、StarterPlayerの中の「StarterPlayerScripts」に入れます。
1. 一人称視点にする
新しいBaseplateを開き、エクスプローラの「StarterPlayer」を押して選びます(画像の1)。プロパティの検索欄に「CameraMode」と入力すると、CameraModeが「Classic」になっています(画像の2)。Classicは、キャラクターの後ろから見る、いつものカメラです。

CameraModeの右の欄を押して、一覧から「LockFirstPerson」を選びます(赤い枠)。

3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。キャラクターの体が見えなくなり、頭の位置から見る一人称視点になります(赤い枠)。マウスを動かすと、見る向きが変わります。
右上の名前の欄はモザイクにしています。

Robloxの公式のチュートリアルによると、テスト中にマウスの矢印が画面の真ん中から動かなくなったときは、Escキーを押すと動かせるようになります。確かめたら、Escキーを押してから、Shift + F5キーでテストを停止します。
この先の横から見るカメラは、いつものカメラから作ります。StarterPlayerのCameraModeを「Classic」に戻します(赤い枠)。

2. 横から見るカメラのスクリプトを入れる
エクスプローラの「StarterPlayer」の左の「▶」を押して開きます。中の「StarterPlayerScripts」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「LocalScript」と入れ、一覧の「LocalScript」を押します(赤い枠)。

StarterPlayerScriptsの中にLocalScriptが入り、中身の画面が開きます。エクスプローラで「LocalScript」を押して選び、F2キーを押して名前を「CameraManager」に変えます(赤い枠)。

開いているCameraManagerの画面で、中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24 -- キャラクターからカメラまでの横のきょり
local HEIGHT_OFFSET = 2 -- 体の中心より少し上(頭のあたり)を見る
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, 0, 0)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end
camera.CameraType = Enum.CameraType.Scriptable -- Robloxのカメラ操作を止めて、スクリプトで動かす
RunService:BindToRenderStep("SidescrollCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)

| 行 | していること |
|---|---|
HumanoidRootPart | キャラクターの体の中心の部品。ここの位置を見てカメラを決める |
HEIGHT_OFFSET = 2 | Robloxの公式の説明によると、HumanoidRootPartは頭より2スタッド下にある。2足して頭のあたりを見る |
Vector3.new(CAMERA_DEPTH, 0, 0) | キャラクターから横(X)へ24離れた場所にカメラを置く |
CFrame.lookAt(カメラの位置, 見る場所) | カメラをキャラクターのほうへ向ける |
CameraType = Scriptable | マウスでカメラを回すいつもの動きを止め、スクリプトだけで動かす |
BindToRenderStep | 画面を1回描くたびに、updateCameraを動かしてカメラを付いていかせる |
3. テストで横から見るカメラを確かめる
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます。カメラがキャラクターを横から映します(赤い枠)。

Dキーを押して歩くと、キャラクターは画面の真ん中のまま(画像の1)、スポーン地点が画面の左へ流れていきます(画像の2)。カメラがキャラクターに付いてきているので、横スクロールのゲームのような見え方になります。

このカメラでは、W・Sキーはカメラから見て奥・手前、A・Dキーは左・右へ歩きます。横スクロールのゲームでは、主にA・Dキーで進む作りにします。確かめたら、Shift + F5キーでテストを停止します。
斜め上から見下ろすカメラにする
同じCameraManagerの1か所を変えるだけで、斜め上から見下ろすカメラになります。Robloxの公式のチュートリアルでも、横から見るカメラの次に、この形が紹介されています。CameraManagerの画面で、16行目の Vector3.new(CAMERA_DEPTH, 0, 0) を、次のように書きかえます(赤い枠)。
local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)

横・上・奥の3つの向きに同じだけ離れた場所から映すので、ななめ45度くらいの上から見下ろす形になります。3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます。キャラクターとスポーン地点を、斜め上から見下ろす画面になりました。Dキーで歩くと、カメラが付いてきます。

確かめたら、Shift + F5キーでテストを停止します。横から見るカメラに戻すときは、16行目を Vector3.new(CAMERA_DEPTH, 0, 0) に書き戻します。
4. 横から見るカメラを止める
次のダッシュは、いつものカメラで確かめます。CameraManagerは消さずに止めておくと、あとでまた使えます。
エクスプローラで「CameraManager」を押して選び、プロパティの検索欄に「Enabled」と入力して、Enabledのチェックを外します(赤い枠)。エクスプローラのCameraManagerがうすい色になり、テストで動かなくなります。

5. Shiftキーでダッシュするスクリプトを入れる
エクスプローラの「StarterPlayerScripts」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「LocalScript」と入れ、一覧の「LocalScript」を押します(赤い枠)。

エクスプローラで新しい「LocalScript」を押して選び、F2キーを押して名前を「DashControl」に変えます(赤い枠)。

開いているDashControlの画面で、中身を全部消して、次のコードを貼り付けます。
local ContextActionService = game:GetService("ContextActionService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local DASH_ACTION = "Dash"
local NORMAL_SPEED = 16 -- ふだんの歩く速さ(最初の値)
local DASH_SPEED = 28 -- Shiftキーを押しているあいだの速さ
local NORMAL_FOV = 70 -- ふだんの見える広さ(最初の値)
local DASH_FOV = 80 -- 走っているあいだは、少し広く見せる
local function onDash(actionName, inputState, inputObject)
local character = player.Character
local humanoid = character and character:FindFirstChildWhichIsA("Humanoid")
if not humanoid then
return
end
if inputState == Enum.UserInputState.Begin then
humanoid.WalkSpeed = DASH_SPEED
camera.FieldOfView = DASH_FOV
elseif inputState == Enum.UserInputState.End then
humanoid.WalkSpeed = NORMAL_SPEED
camera.FieldOfView = NORMAL_FOV
end
end
-- 左Shiftキーに「Dash」をつなぐ。true にすると、スマホでは画面にボタンが出る
ContextActionService:BindAction(DASH_ACTION, onDash, true, Enum.KeyCode.LeftShift)
ContextActionService:SetTitle(DASH_ACTION, "ダッシュ")

| 行 | していること |
|---|---|
BindAction(名前, onDash, true, Enum.KeyCode.LeftShift) | 左Shiftキーを押したり離したりしたときに、onDashを動かす |
UserInputState.Begin / End | キーを押した瞬間と、離した瞬間 |
humanoid.WalkSpeed | 歩く速さ。Robloxの公式の説明によると、最初は16(1秒に16スタッド進む) |
camera.FieldOfView | カメラに見える広さ(角度)。最初は70 |
SetTitle(..., "ダッシュ") | スマホで出るボタンに「ダッシュ」と書く |
Shiftキーを離すと、歩く速さはNORMAL_SPEEDの16に戻ります。StarterPlayerで歩く速さの最初の値(CharacterWalkSpeed)を16以外に変えている作品では、NORMAL_SPEEDの16も同じ数字に書きかえてください。書きかえないと、Shiftキーを離したときに16に戻ってしまいます。
Robloxの公式のチュートリアルでは、ContextActionServiceのBindActionで、キーと動きをつなぐ方法を紹介しています。3つ目のtrueにすると、キーボードのないスマホでは、画面に押せるボタンが出ます。走っているあいだに見える広さを少し広げるのは、Robloxの公式の説明でも、FieldOfViewの使い方の例として挙げられています。
6. テストでダッシュを確かめる
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます。いつもの後ろからのカメラに戻っています(赤い枠)。

左Shiftキーを押したままにすると、画面が少し広がり、キャラクターが小さく見えます(赤い枠)。そのまま歩くと、いつもより速く進みます。Shiftキーを離すと、元の見え方と速さに戻ります。

| 試したこと | 結果 |
|---|---|
| CameraModeをLockFirstPersonにしてテスト | 頭の位置から見る一人称になった |
| CameraManagerを入れてテスト | 横から映すカメラになり、歩くと付いてきた |
| 左Shiftキーを押したまま | 画面が広がった。コマンドで読むとWalkSpeed 28、FieldOfView 80 |
| 左Shiftキーを離す | WalkSpeed 16、FieldOfView 70に戻った |
確かめ終わったら、Shift + F5キーでテストを停止します。
数字を変えて調整する
DashControlとCameraManagerは、コードの中の数字です。エクスプローラで「DashControl」や「CameraManager」をダブルクリックして開き、表の名前の行を書き換えます。
最後の「CameraManagerのEnabled」だけはプロパティです。エクスプローラで「CameraManager」を押して選び、プロパティの検索欄に「Enabled」と入力して、右の四角を押してチェックを外します。
| 変えたいこと | 変える場所 | 例 |
|---|---|---|
| ダッシュの速さ | DashControlのDASH_SPEED | 28 → 24 |
| ダッシュのキー | DashControlのEnum.KeyCode.LeftShift | Enum.KeyCode.Q |
| 走っているときの見える広さ | DashControlのDASH_FOV | 80 → 75(大きくしすぎると酔いやすい) |
| 横のカメラのきょり | CameraManagerのCAMERA_DEPTH | 24 → 16(近づく) |
| 反対側の横から映す | CameraManagerのVector3.new(CAMERA_DEPTH, 0, 0) | Vector3.new(-CAMERA_DEPTH, 0, 0) |
| 斜め上から見下ろす | CameraManagerのVector3.new(CAMERA_DEPTH, 0, 0) | Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH) |
| いつもの後ろからのカメラに戻す | CameraManagerのEnabled | チェックを外す |
うまくいかないときの確かめ方
| 症状 | 見るところ | 直し方 |
|---|---|---|
| 一人称にならない | StarterPlayerのCameraMode | LockFirstPersonになっているか |
| テスト中にマウスが動かせない | 一人称のとき | Escキーを押す |
| 横のカメラにならない | CameraManagerの場所と種類 | StarterPlayerScriptsの中のLocalScriptか。Enabledにチェックがあるか |
| Shiftを押しても速くならない | DashControlの場所 | StarterPlayerScriptsの中のLocalScriptか。ふつうのScriptでは動かない |
| Shiftを離しても速いまま | キーを離した瞬間 | テストの画面以外を押していると、離したことが届かないことがある。画面を押してからもう一度試す |
AIに相談するときの伝え方
Roblox Studioのアシスタントにも、次のように頼めます。
Roblox Studioでアクションゲームを作っています。
StarterPlayerScriptsのLocalScript「DashControl」で、ContextActionServiceのBindActionを使い、左Shiftを押しているあいだWalkSpeedを28、FieldOfViewを80にしています。
ダッシュは3秒までしか続かず、使ったら5秒待たないと次に使えないようにしたいです。
よくある質問
一人称視点のまま、横から見るカメラは使える?
一人称視点と横から見るカメラは見え方の考え方が違うので、ゲームに合うほうを1つ選びます。この記事でも、横から見るカメラを試す前にCameraModeをClassicに戻しました。
ダッシュの速さをスクリプトで変えても、ずるはされない?
Robloxの公式の説明によると、WalkSpeedはプレイヤーの側で変えられる項目なので、ずるを防ぐ仕組みには使えません。速さを大きく変えるゲームや、勝ち負けのあるゲームでは、サーバーで速さを確かめる仕組みも考えます。サーバーで確かめる考え方はRemoteEventの使い方で解説しています。
次は、AIが書いたスクリプトの変数・if・for・関数・イベントを読めるようにします。次のステップ(中級 24/28)
次に知りたいことを選ぶ
- 次のステップ:AIが書いたスクリプトの変数・if・for・関数・イベントを読めるようにします → ロブロックス(Roblox)スクリプトの読み方
- 体力ゲージを作りたい → ロブロックス(Roblox)スタジオで体力ゲージと回復アイテムを作る方法
- 手に持って使えるアイテムを作りたい → ロブロックス(Roblox)スタジオで手に持てるアイテム(ツール)を作る方法
- 画面にボタンを出したい → ロブロックス(Roblox)でボタンを作る方法