Roblox Studioシフトダッシュの作り方【コピペ1分・初心者向け】
コラムRoblox Studio(ロブロックススタジオ)で自分のゲームを作っていて、「Shiftキーを押したらキャラが素早く走る、あの演出を自分のゲームにも入れたい」と思ったことはありませんか。
動画やチュートリアルサイトを見てコードだけコピーしてみたものの、「どこに貼ればいいのか」「なぜこの数値なのか」が分からず手が止まってしまう。シフトダッシュはRobloxゲームの定番演出のひとつですが、いざ自分で実装しようとすると意外とつまずきやすい機能です。
この記事では、コピペしてそのまま動くLuauコードを使ってシフトダッシュを実装する手順を、設置場所から一行ずつの解説まで丁寧に説明します。よく似た機能である「シフトロック」との違いや、動かないときに確認すべきポイントも合わせて紹介するので、初めてスクリプトに触れる方でも迷わず形にできます。
Roblox公式のCreator Hub(create.roblox.com/docs)が公開しているHumanoidとUserInputServiceのリファレンスをもとにしているので、情報が古くなる心配もありません。
目次
シフトダッシュとは?シフトロックとの違い
シフトダッシュとは、プレイヤーがShiftキーを押している間だけキャラクターの走行速度を上げる機能です。多くのRobloxゲームで見かける、いわゆる「ダッシュ移動」の実装がこれにあたります。
名前が似ている機能に「シフトロック」がありますが、こちらはRoblox標準搭載の別機能です。
- シフトダッシュ:Shiftキーで走行速度(WalkSpeed)を上げる。ゲーム側で自作するスクリプト
- シフトロック:Shiftキーでカメラをキャラクターの正面に固定する。Roblox標準の視点操作機能
どちらも同じShiftキーを使いますが、片方は「速度」、もう片方は「カメラ視点」を操作するまったく別の仕組みです。2つを組み合わせて使うこともできます。この記事では、走行速度を変えるシフトダッシュの実装方法を解説します。
実装の準備 ― LocalScriptの設置場所
シフトダッシュはプレイヤー自身の操作に反応する機能なので、クライアント側で動く「LocalScript」を使います。以下の手順で準備します。
- Explorerウィンドウで「StarterPlayer」を開く
- 「StarterCharacterScripts」を右クリックし、「Insert Object」から「LocalScript」を選ぶ
- 作成したLocalScriptの名前を「ShiftDash」など分かりやすい名前に変更する
StarterCharacterScriptsに入れる理由
LocalScriptの置き場所は「StarterPlayerScripts」でも動きそうに見えますが、シフトダッシュのようにキャラクター(Character)が読み込まれるたびに実行したい処理は、StarterCharacterScriptsに入れるのが基本です。
StarterCharacterScriptsに置いたスクリプトは、キャラクターが生成されるたびに自動で複製されて実行されます。そのため、プレイヤーが死んでリスポーンした後も、シフトダッシュが自動的に有効な状態を保てます。StarterPlayerScriptsに置いた場合は、リスポーン後にキャラクター情報を取得し直す処理を自分で書く必要があり、初心者にはやや手間です。

シフトダッシュのコード(コピペOK)
先ほど作成したLocalScriptに、以下のコードをそのまま貼り付けてください。
local UserInputService = game:GetService("UserInputService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local normalSpeed = 16
local dashSpeed = 32
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then
return
end
if input.KeyCode == Enum.KeyCode.LeftShift then
humanoid.WalkSpeed = dashSpeed
end
end)
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.KeyCode == Enum.KeyCode.LeftShift then
humanoid.WalkSpeed = normalSpeed
end
end)
貼り付けたらPlayボタンを押して、Shiftキーを押しながら移動してみてください。キャラクターの走る速度が変わることを確認できれば成功です!
コードの解説 ― 各行のポイント
一行ずつ何をしているかを見ていきましょう。
UserInputService:キーボードやマウスの入力を検知するRoblox標準のサービスscript.Parent:LocalScriptをStarterCharacterScriptsに入れた場合、この値はキャラクター(Character)そのものになるhumanoid.WalkSpeed:キャラクターの移動速度を決めるプロパティ。数値が大きいほど速く走るInputBegan:キーが押された瞬間に発火するイベントgameProcessed:チャット入力中などRoblox側が既に処理した入力かどうかを表す。trueのときは無視しないと、チャット中にもダッシュしてしまうInputEnded:キーが離された瞬間に発火するイベント。ここでWalkSpeedを元に戻すのを忘れると、一度ダッシュしたらずっと速いままになる
InputEndedで速度を元に戻す処理を書き忘れるのが、シフトダッシュ実装でもっとも多い失敗です。押したときの処理だけでなく、離したときの処理も必ずセットで書いてください。
走行速度・視野角をカスタマイズする
normalSpeedとdashSpeedの数値を変えるだけで、走行速度の印象は大きく変わります。
| 通常速度 | ダッシュ速度 | 印象 |
|---|---|---|
| 16(デフォルト) | 24 | 控えめな加速。ゆったりした探索ゲーム向け |
| 16(デフォルト) | 32 | 体感しやすい標準的な加速 |
| 16(デフォルト) | 48以上 | かなり速い。アクション性の高いゲーム向け |
視野角(FOV)も一緒に広げると、スピード感がさらに演出できます。CameraのFieldOfViewプロパティを、ダッシュ開始時に70前後、終了時に元の値(通常70)へ戻すコードを追加すると効果的です。
ジャンプ力も一緒に変えてみよう
ダッシュ中はジャンプ力も上げたい、という場合は同じLocalScript内にJumpPower(または新しいAPIのJumpHeight)の変更を追加します。
local normalJumpPower = 50
local dashJumpPower = 65
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then
return
end
if input.KeyCode == Enum.KeyCode.LeftShift then
humanoid.WalkSpeed = dashSpeed
humanoid.JumpPower = dashJumpPower
end
end)
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.KeyCode == Enum.KeyCode.LeftShift then
humanoid.WalkSpeed = normalSpeed
humanoid.JumpPower = normalJumpPower
end
end)
WalkSpeedのときと同じく、InputEndedで元の数値に戻す処理を忘れないようにしてください。これを忘れると、一度Shiftキーを押しただけでジャンプ力が上がったままになってしまいます。
ダッシュ中に風エフェクトを追加するには(応用)
見た目の演出をもう一段階足したい場合は、ダッシュ中にパーティクルエフェクトを表示する方法があります。基本的な流れは次のとおりです。
- キャラクターのHumanoidRootPartに「ParticleEmitter」を追加し、初期状態は無効(Enabled = false)にしておく
- InputBeganでShiftキーが押されたタイミングに合わせて、ParticleEmitterのEnabledをtrueにする
- InputEndedのタイミングでEnabledをfalseに戻す
エフェクトを足しすぎると視認性が下がり、かえって遊びにくくなることもあります。まずは速度変化だけを実装し、ゲームの雰囲気に合わせて少しずつ演出を足していくのがおすすめです。

うまく動かないときのチェックリスト
コードを貼り付けたのに動かない、という場合は次の項目を上から順に確認してください。
| 症状 | 原因 | 対処法 |
|---|---|---|
| Shiftキーを押しても速度が変わらない | LocalScriptがStarterCharacterScripts以外の場所にある | StarterPlayer > StarterCharacterScriptsに置き直す |
| エラーは出ないが反応しない | スクリプトのDisabledプロパティがtrueになっている | Propertiesウィンドウで有効化する |
| チャット欄で「s」などを打つと速度が変わる | gameProcessedのチェックが抜けている | InputBeganの先頭でgameProcessedがtrueなら処理を抜ける |
| 一度ダッシュすると速度が戻らない | InputEndedの処理を書いていない、または条件が間違っている | InputEndedでWalkSpeedをnormalSpeedへ戻す処理を追加する |
| Studio上では動くのに公開後だけ動かない | LocalScriptをServerScriptServiceなどサーバー側に置いてしまっている | LocalScriptはクライアント側でのみ動作するため、StarterCharacterScripts配下に置き直す |
「LocalScriptが正しい場所にあるか」を最初に確認するだけで、シフトダッシュのトラブルの大半は解決します。
よくある質問(FAQ)
Q1. シフトダッシュとシフトロックは何が違いますか?
シフトダッシュはShiftキーで走行速度を上げる自作機能です。シフトロックはShiftキーでカメラをキャラクター正面に固定するRoblox標準機能で、仕組みも役割もまったく別物です。組み合わせて使うこともできます。
Q2. スマホ(モバイル)でもシフトダッシュは使えますか?
そのままでは使えません。モバイル端末にはShiftキーが存在しないため、画面上にタッチ操作用のダッシュボタンを別途作成し、そのボタンが押されている間だけWalkSpeedを上げる処理に置き換える必要があります。
Q3. ダッシュしながらジャンプ力も上げられますか?
できます。同じLocalScript内でJumpPower(またはJumpHeight)もWalkSpeedと同じタイミングで変更すれば実現できます。ダッシュ終了時に元の数値へ戻す処理を忘れないようにしてください。
Q4. マルチプレイで他のプレイヤーにもダッシュしている様子が見えますか?
LocalScriptはクライアント側だけで動作するため、デフォルトでは他のプレイヤーの画面には反映されません。見た目を同期させたい場合は、ServerScript側でも速度を変更するか、RemoteEventを使ってダッシュ状態を他のクライアントに伝える必要があります。
Q5. コードを入れたのに動かないのはなぜですか?
よくある原因は3つあります。LocalScriptを間違ったフォルダ(StarterCharacterScripts以外)に入れている、スクリプトのDisabledプロパティが有効になっている、別のスクリプトが同じShiftキーの入力を取り合っている、のいずれかです。上から順に確認してみてください。
まとめ
この記事では、Roblox Studioでシフトダッシュを実装する方法を解説しました。
重要なポイント:
- シフトダッシュはWalkSpeedを操作する自作機能で、カメラ操作のシフトロックとは別物
- LocalScriptはStarterCharacterScriptsに置くと、リスポーン後も自動で有効になる
- InputBeganで速度を上げ、InputEndedで必ず元に戻す処理をセットで書く
- ジャンプ力や風エフェクトも同じ仕組みで一緒にカスタマイズできる
- 動かないときは、まずLocalScriptの設置場所とDisabledプロパティを確認する
コード自体は数行ですが、「なぜStarterCharacterScriptsに置くのか」「なぜInputEndedが必要なのか」を理解しておくと、他の入力系機能を作るときにも同じ考え方を応用できます。まずはこの記事のコードをそのまま動かして、数値を変えながら手の感覚で仕組みをつかんでみてください。
TETRA UPのRobloxコースでは、こうしたスクリプトの基礎から一つずつ、プロのインストラクターと一緒に手を動かしながら学べます。自分のゲームに合った動きを、自分の手で作れるようになりませんか。
あわせて読みたい

吉田先生やよっしー、たまによしぞーって呼ばれたりしています。よろしくお願いします。