いいですね 🎮。
プレイヤーが「自分の操作」でカメラ位置を変える場合は、LocalScript を使って UserInputService などの入力イベントを拾い、workspace.CurrentCamera を操作します。


📝 例:矢印キーでカメラを動かすコード

LocalScript(StarterPlayerScriptsに入れる)

local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera

-- カメラを Scriptable にして自由に動かせるようにする
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(Vector3.new(0, 10, -20), Vector3.new(0, 0, 0)) 
-- 初期位置(原点を見下ろす)

-- 入力に応じてカメラを移動
UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end

    local move = Vector3.new()

    if input.KeyCode == Enum.KeyCode.Up then
        move = Vector3.new(0, 0, 2)
    elseif input.KeyCode == Enum.KeyCode.Down then
        move = Vector3.new(0, 0, -2)
    elseif input.KeyCode == Enum.KeyCode.Left then
        move = Vector3.new(-2, 0, 0)
    elseif input.KeyCode == Enum.KeyCode.Right then
        move = Vector3.new(2, 0, 0)
    end

    if move.Magnitude > 0 then
        camera.CFrame = camera.CFrame + move
    end
end)

🎯 ポイント

  • CameraType = Scriptable にすると、プレイヤーが自由にカメラを動かせるようになります。
  • UserInputService を使ってキー入力を検知し、そのたびに camera.CFrame を更新。
  • この例では矢印キーでカメラを前後左右に移動できます。

 

なるほど ⚙️。
Robloxでは Cameraはクライアント側でしか直接操作できない ため、サーバー側から制御したい場合は RemoteEvent を使って「指示」を送り、クライアント側で実際にカメラを動かす必要があります。


📝 サンプルコード

1. サーバースクリプト(ServerScriptServiceなど)

-- ReplicatedStorageにRemoteEventを作成
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CameraEvent = Instance.new("RemoteEvent")
CameraEvent.Name = "CameraEvent"
CameraEvent.Parent = ReplicatedStorage

-- プレイヤーが参加したらカメラ変更の指示を送る
game.Players.PlayerAdded:Connect(function(player)
    -- 例: 参加後5秒で特定のPartを見せる
    task.wait(5)
    local targetPart = workspace:FindFirstChild("Statue") -- 見せたいオブジェクト
    if targetPart then
        CameraEvent:FireClient(player, targetPart)
    end
end)

2. ローカルスクリプト(StarterPlayerScriptsなど)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CameraEvent = ReplicatedStorage:WaitForChild("CameraEvent")

local camera = workspace.CurrentCamera

-- サーバーから指示を受け取ったらカメラを変更
CameraEvent.OnClientEvent:Connect(function(targetPart)
    if targetPart then
        camera.CameraType = Enum.CameraType.Scriptable
        camera.CFrame = CFrame.new(targetPart.Position + Vector3.new(0, 10, -20), targetPart.Position)
    end
end)

🎯 ポイント

  • サーバー側は「誰のカメラをどうしたいか」を決めて RemoteEventで指示を送る
  • クライアント側はその指示を受けて CurrentCameraを操作する
  • こうすることで「サーバーが全体を管理しつつ、プレイヤーごとの視点を制御」できます。