いいですね 🎮。
プレイヤーが「自分の操作」でカメラ位置を変える場合は、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を操作する。
- こうすることで「サーバーが全体を管理しつつ、プレイヤーごとの視点を制御」できます。