ロブロックス(Roblox)スタジオで一人称視点・カメラ固定・ダッシュを作る方法|Shiftキーで走るまで画像で解説

制作手順難易度: 中級所要時間: 約30分(目安)情報確認日: 2026年10月18日

「ロブロックスで一人称視点のゲームを作りたい」「カメラを横から見る形に固定したい」「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 = 2Robloxの公式の説明によると、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_SPEED28 → 24
ダッシュのキーDashControlのEnum.KeyCode.LeftShiftEnum.KeyCode.Q
走っているときの見える広さDashControlのDASH_FOV80 → 75(大きくしすぎると酔いやすい)
横のカメラのきょりCameraManagerのCAMERA_DEPTH24 → 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のCameraModeLockFirstPersonになっているか
テスト中にマウスが動かせない一人称のとき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の使い方で解説しています。

次のステップ(中級 24/28)

次は、AIが書いたスクリプトの変数・if・for・関数・イベントを読めるようにします。

→ ロブロックス(Roblox)スクリプトの読み方

次に知りたいことを選ぶ

次に読む記事