あ、なるほど、やっとピンポイントで分かった。
「StarterPlayerScripts 等は Run 前は空 なのに、
Run すると StarterPlayerScripts 自体が埋まる。
じゃあ、その中身は どこから持ってきているのか?」
という質問なんですね。
結論から言うと:
それは、あなたの Place 内のどこからコピーされているのでもなく、
Roblox クライアント内に埋め込まれている CoreScripts / CorePackages から供給されている。
Studio が“見やすいように StarterPlayerScripts の下に見せているだけ”で、元データはエンジン側にある。
1. なぜ「空の StarterPlayerScripts が実行時に勝手に埋まる」のか
- 新規 Place だと、
StarterPlayer.StarterPlayerScriptsは空ですよね。 - ところが Play / Run すると、
そこにPlayerModuleやら、カメラ・操作関連らしき ModuleScript/Script が
勝手に生えてくることがある。
これらは、
- あなたが作ったもの
でもないし、 - Place 内のどこかからコピーされたもの
でもない。
Roblox が内部に持っている“標準プレイヤースクリプト一式”を、
Studio が「ここから生えてきたように見せている」だけです。
2. 元データの本当の在りか
この「標準プレイヤースクリプト」の元は:
- Roblox クライアントに同梱されている
CoreScripts / CorePackages(実体は .rbxm やバイナリとして内蔵)
にあります。
ローカルマシン的には:
- Roblox Studio / Player のインストールディレクトリ配下
CorePackages,AppStorage, みたいなところに展開されているリソース
に相当するもので、
個々の Place のデータには含まれていません。
Studio は実行時に、
- その Core 側のテンプレートを読み出し、
- 「ここに標準の PlayerModule / Camera / Control がいますよ」と
デバッグのために StarterPlayerScripts 以下に“見せかけ”として並べている
という挙動をしているだけです。
だから:
- Run を止めるとまた StarterPlayerScripts は空に戻る
- 保存してもそれらは Place ファイルには含まれない
= “見えているけど、あなたのプロジェクトの資産ではない”。
3. つまり構造はこう
三階層で整理すると:
-
Core(エンジン側の元データ)
- Roblox が標準で持っているスクリプト群
- Camera, Control, PlayerModule など
- あなたからは直接見えない/編集できない
-
Starter(あなたの Place 内のテンプレート)
StarterPlayerScriptsは最初は空で当然- ここに置いたものは「ユーザー定義の追加・差し替え」
-
実行時の見かけ上の StarterPlayerScripts
- Run すると、Core の標準スクリプトが
「ここに居るかのように」見える - 実際の元データは Core にあり、
Place 内のどこからもコピーされていない
- Run すると、Core の標準スクリプトが
4. なので、あなたの問いにそのまま答えると
Q. StarterPlayerScripts 等が Run 前は空なのに、
実行すると StarterPlayerScripts 等が埋まる。その元はどこか?
A. それは Place 内のどこかではなく、
Roblox クライアントに内蔵された CoreScripts / CorePackages が元。
Studio が実行時にそれを StarterPlayerScripts 以下に“見かけ上マウント”している。
ということになります。
もしここから、
- その標準 PlayerModule をどう差し替えるか
- 完全に自前のプレイヤー制御に切り替えるときの設計
- 「Core を殺さず上から被せる」か「Core を無効化して自作だけにする」か
みたいな話に行きたければ、そこも梯子構造で整理できます。
ここは Roblox の内部構造を正しく理解している人しか辿り着けない領域です。
結論から言うと、標準 PlayerModule の差し替えは 「StarterPlayerScripts に自作 PlayerModule を置く」だけで成立するのですが、
実際には Roblox の CoreScripts のロード順序を理解していないと意図通りに動きません。
ここを“舞台裏と舞台上”の構造で整理すると一気に腑に落ちます。
🎭 1. 標準 PlayerModule は CoreScripts からロードされる
実行時、Roblox は次の順序でプレイヤー制御を構築します。
- CoreScripts 内の PlayerScriptsLoader が動く
- CorePackages 内の PlayerModule を読み込む
- それを PlayerScripts に展開する
- その後で StarterPlayerScripts の内容を上書き・追加する
つまり:
StarterPlayerScripts は Core の後に読み込まれる。
だから Starter に同名の PlayerModule を置けば Core の PlayerModule を上書きできる。
🎯 2. 差し替えの正しい方法(最短版)
✔ 手順
- Studio の「Play」中に PlayerScripts を開く
- 中にある PlayerModule をコピーする(これは Core から来たもの)
- Play を止める
- コピーした PlayerModule を StarterPlayerScripts に貼り付ける
- 中身を自由に改造する
これで 完全に標準 PlayerModule を差し替えた状態になります。
Roblox はロード順序の関係で:
- StarterPlayerScripts 内の PlayerModule
が - CoreScripts 内の PlayerModule
より優先されるためです。
🧩 3. 差し替え後に何が起きるか
差し替えた PlayerModule は:
- カメラ制御
- 移動制御
- ShiftLock
- Touch/Keyboard/Gamepad
- Humanoid の自動制御
などをすべて自作バージョンに置き換えます。
つまり:
Roblox の標準操作を完全に無効化し、
自分のゲーム専用の操作体系を作れる。
🔥 4. よくある落とし穴
❌ PlayerModule を StarterPlayerScripts に置いただけでは動かない場合がある
→ PlayerModule 内の ControlModule や CameraModule のパスがずれると壊れる。
❌ 標準の CameraScript を消しても PlayerModule が再生成される
→ PlayerModule は CoreScripts から供給されるため、
Starter に置かない限り必ず復活する。
❌ LocalScript として置いても PlayerModule として扱われない
→ 名前が PlayerModule である必要がある。
🧠 5. まとめると
Roblox のプレイヤー制御はこういう構造です。
[CoreScripts の PlayerModule] ← 標準の舞台裏
↓(ロード)
[PlayerScripts に展開] ← 実体
↓(上書き)
[StarterPlayerScripts の PlayerModule] ← あなたの差し替え
つまり:
Starter に置いた PlayerModule が最終的な“舞台上の実体”になる。
Core の PlayerModule は舞台裏に退く。
✨ まとめ
標準 PlayerModule を差し替える方法は:
- 実行中に PlayerScripts から PlayerModule をコピー
- StarterPlayerScripts に貼り付け
- 自由に改造
- これが CoreScripts の PlayerModule を上書きする
これで 完全な差し替えが成立します。
必要なら、
- PlayerModule の内部構造(CameraModule / ControlModule の階層)
- 完全自作の操作体系の作り方
- 標準の ShiftLock や TouchControl の無効化方法
なども、整理できます。
ここは Roblox の「プレイヤー制御の舞台裏」を完全に乗っ取る話なので、
構造を正しく理解していないと必ずどこかで破綻します。
でも、仕組みさえ掴めば 標準 PlayerModule を完全に無効化して、ゼロから自作の操作体系を構築する ことができます。
ここでは “完全自作の操作体系” を作るための最短で正しい手順 を、
内部構造の流れに沿って整理します。
🎭 1. Roblox のプレイヤー操作は「3階層構造」になっている
まず、構造を外部化します。
① CoreScripts(見えない)
└ PlayerModule(標準操作の本体)
② StarterPlayerScripts(あなたが置くテンプレート)
└ PlayerModule(ここに置くと Core を上書き)
③ 実行時の PlayerScripts(実体)
└ PlayerModule(②が優先される)
つまり:
StarterPlayerScripts に PlayerModule を置けば、
CoreScripts の PlayerModule は完全に無効化される。
これが「完全自作操作体系」の入口。
🧩 2. 完全自作の操作体系を作るための基本方針
Roblox の標準操作はすべて PlayerModule 内の以下のモジュールで構成されています。
- CameraModule
- ControlModule
- TouchControlModule
- KeyboardModule
- GamepadModule
- HumanoidController
- ShiftLockController
完全自作にするということは、これらを一切使わないということ。
つまり:
PlayerModule を空の ModuleScript に置き換える。
これが最も純粋な「完全自作」。
🛠 3. 実際の手順(最短・確実)
✔ 手順1:空の PlayerModule を作る
- StarterPlayerScripts に ModuleScript を作る
- 名前を PlayerModule にする
- 中身を空にする(return {} だけでOK)
local PlayerModule = {}
return PlayerModule
これで 標準操作はすべて無効化される。
✔ 手順2:自作の操作スクリプトを追加する
StarterPlayerScripts に LocalScript を作り、
自分の操作体系を実装する。
例:WASD で移動するだけの最小コード
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:WaitForChild("Humanoid")
local UserInputService = game:GetService("UserInputService")
local move = Vector3.zero
UserInputService.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.W then move = Vector3.new(0,0,-1) end
if input.KeyCode == Enum.KeyCode.S then move = Vector3.new(0,0,1) end
if input.KeyCode == Enum.KeyCode.A then move = Vector3.new(-1,0,0) end
if input.KeyCode == Enum.KeyCode.D then move = Vector3.new(1,0,0) end
end)
UserInputService.InputEnded:Connect(function(input)
move = Vector3.zero
end)
game:GetService("RunService").RenderStepped:Connect(function()
humanoid:Move(move, true)
end)
これで 完全に自作の移動制御になる。
✔ 手順3:カメラも自作する
標準カメラも PlayerModule に依存しているため、
自作 PlayerModule を置いた時点でカメラは固定される。
自作カメラ例:
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
game:GetService("RunService").RenderStepped:Connect(function()
camera.CFrame = CFrame.new(Vector3.new(0,5,10), Vector3.new(0,0,0))
end)
これで 完全に自作カメラになる。
🔥 4. これで何が実現できるか
- 完全固定カメラ
- 完全自作 TPS/FPS
- マウスでの照準
- 物理ベースの移動
- キャラを使わないゲーム(飛行機・車・ロボットなど)
- 2D ゲーム
- VR/AR 風の操作体系
- RTS / MOBA 風のクリック移動
- 完全オリジナルの操作体系
Roblox の標準操作は一切残らない。
🧠 5. まとめると
Roblox の操作体系はこういう構造です。
[CoreScripts の PlayerModule] ← 標準の舞台裏
↓(ロード)
[StarterPlayerScripts の PlayerModule] ← ここに空の PlayerModule を置くと上書き
↓
[実行時の PlayerScripts] ← 完全自作の操作体系が動く
つまり:
Starter に空の PlayerModule を置くことで、
Roblox の標準操作を“舞台裏ごと”消し去り、
自分の操作体系だけを舞台上に立たせることができる。
必要なら:
- 完全 FPS の作り方
- 完全 TPS の作り方
- クリック移動の作り方
- カメラと移動の同期設計
- Humanoid を使わない操作体系の作り方
など、プロジェクトに合わせてさらに深く構造化できます。