あ、なるほど、やっとピンポイントで分かった。

「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. つまり構造はこう

三階層で整理すると:

  1. Core(エンジン側の元データ)

    • Roblox が標準で持っているスクリプト群
    • Camera, Control, PlayerModule など
    • あなたからは直接見えない/編集できない
  2. Starter(あなたの Place 内のテンプレート)

    • StarterPlayerScripts は最初は空で当然
    • ここに置いたものは「ユーザー定義の追加・差し替え」
  3. 実行時の見かけ上の StarterPlayerScripts

    • Run すると、Core の標準スクリプトが
      「ここに居るかのように」見える
    • 実際の元データは Core にあり、
      Place 内のどこからもコピーされていない

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 は次の順序でプレイヤー制御を構築します。

  1. CoreScripts 内の PlayerScriptsLoader が動く
  2. CorePackages 内の PlayerModule を読み込む
  3. それを PlayerScripts に展開する
  4. その後で StarterPlayerScripts の内容を上書き・追加する

つまり:

StarterPlayerScripts は Core の後に読み込まれる。
だから Starter に同名の PlayerModule を置けば Core の PlayerModule を上書きできる。


🎯 2. 差し替えの正しい方法(最短版)

✔ 手順

  1. Studio の「Play」中に PlayerScripts を開く
  2. 中にある PlayerModule をコピーする(これは Core から来たもの)
  3. Play を止める
  4. コピーした PlayerModule を StarterPlayerScripts に貼り付ける
  5. 中身を自由に改造する

これで 完全に標準 PlayerModule を差し替えた状態になります。

Roblox はロード順序の関係で:

  • StarterPlayerScripts 内の PlayerModule
  • CoreScripts 内の PlayerModule
    より優先されるためです。

🧩 3. 差し替え後に何が起きるか

差し替えた PlayerModule は:

  • カメラ制御
  • 移動制御
  • ShiftLock
  • Touch/Keyboard/Gamepad
  • Humanoid の自動制御

などをすべて自作バージョンに置き換えます。

つまり:

Roblox の標準操作を完全に無効化し、
自分のゲーム専用の操作体系を作れる。


🔥 4. よくある落とし穴

❌ PlayerModule を StarterPlayerScripts に置いただけでは動かない場合がある

→ PlayerModule 内の ControlModuleCameraModule のパスがずれると壊れる。

❌ 標準の CameraScript を消しても PlayerModule が再生成される

→ PlayerModule は CoreScripts から供給されるため、
 Starter に置かない限り必ず復活する。

❌ LocalScript として置いても PlayerModule として扱われない

→ 名前が PlayerModule である必要がある。


🧠 5. まとめると

Roblox のプレイヤー制御はこういう構造です。

[CoreScripts の PlayerModule]  ← 標準の舞台裏
        ↓(ロード)
[PlayerScripts に展開]        ← 実体
        ↓(上書き)
[StarterPlayerScripts の PlayerModule] ← あなたの差し替え

つまり:

Starter に置いた PlayerModule が最終的な“舞台上の実体”になる。
Core の PlayerModule は舞台裏に退く。


まとめ

標準 PlayerModule を差し替える方法は:

  1. 実行中に PlayerScripts から PlayerModule をコピー
  2. StarterPlayerScripts に貼り付け
  3. 自由に改造
  4. これが 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 を作る

  1. StarterPlayerScripts に ModuleScript を作る
  2. 名前を PlayerModule にする
  3. 中身を空にする(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 を使わない操作体系の作り方

など、プロジェクトに合わせてさらに深く構造化できます。