La vista del mundo del usuario está representada por un objeto Camera. Puedes cambiar el comportamiento de la cámara para adaptarlo a tu juego de varias maneras. Por ejemplo, la cámara puede reaccionar a eventos en el mundo, como temblar cuando un monstruo pasa, o estar bloqueada al lado del personaje del usuario, como en un juego de desplazamiento lateral.
Crear una cámara en primera persona
Una cámara en primera persona es una vista donde la cámara permanece bloqueada con la cabeza del personaje, lo que es más preciso en la vida real. Es común en juegos de disparos y de historia donde el objetivo es hacer que el usuario se sienta inmerso en el mundo.


En Studio, el objeto StarterPlayer contiene una serie de propiedades que afectan la cámara del usuario. La propiedad CameraMode determina cómo se comporta la cámara.
Selecciona StarterPlayer.

Cambia CameraMode a LockFirstPerson. Esto asegura que la cámara del usuario no se aleje de su cabeza.

Realiza una prueba de juego para ver la cámara en primera persona en acción.
Crear una cámara de desplazamiento lateral
Una vista de desplazamiento lateral mantiene la cámara en una posición fija en relación con el lado del personaje, dando al mundo una sensación bidimensional.

Programar la cámara
Expande StarterPlayer, y en StarterPlayerScripts agrega un LocalScript llamado CameraManager.

En la parte superior del script, copia y pega el siguiente código de ejemplo para obtener el servicio Players, y luego en una nueva variable obtén el usuario local.
local Players = game:GetService("Players")local player = Players.LocalPlayerCrea una función llamada updateCamera. Esta contendrá la lógica necesaria para obtener y establecer una nueva posición para la cámara.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endDentro de la función, obtén el modelo del personaje del usuario y verifica si existe utilizando una declaración if.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Apuntar la cámara
Todos los modelos de personajes contienen una parte llamada HumanoidRootPart, que se puede usar para obtener la posición del personaje en el mundo. Esto establece la posición a la que apunta la cámara.
Usa FindFirstChild para obtener el HumanoidRootPart y verifica que exista utilizando una declaración if.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendLa posición del HumanoidRootPart está en realidad 2 studs por debajo de la cabeza del usuario. Para corregir esto, agrega un nuevo Vector3 con una altura de 2 studs a la posición del root.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal HEIGHT_OFFSET = 2local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)endendend
Establecer la posición de la cámara
La cámara también necesita una posición. Para darle a la vista del usuario un aspecto de desplazamiento lateral en 2D, la cámara necesita mirar directamente al lado del personaje. Coloca la cámara al lado del usuario agregando profundidad solo al eje Z de la posición de la cámara utilizando un Vector3.
local player = Players.LocalPlayer
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
end
end
endActualizar CurrentCamera
Ahora que las variables para la posición de la cámara y el objetivo de la cámara están listas, es hora de actualizar la posición de la cámara. Puedes acceder a la cámara del usuario a través de la propiedad CurrentCamera de Workspace. La cámara tiene una propiedad CFrame para determinar su posición.
Puedes usar CFrame.lookAt() para actualizar la cámara. Toma dos posiciones y crea un CFrame ubicado en la primera posición apuntando hacia la segunda. Usa CFrame.lookAt() para crear un CFrame que esté posicionado en cameraPosition y apuntando hacia rootPosition.
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
endSincronizar la cámara
El último paso es ejecutar esta función repetidamente para mantener la cámara sincronizada con el usuario. La imagen que ve el usuario se está actualizando constantemente. El breve momento que toma hacer todos los cálculos necesarios se llama el paso de renderizado.
RunService:BindToRenderStep() facilita la ejecución de una función en cada fotograma al aceptar estos tres parámetros:
- name - El nombre de este enlace, que debe ser único para que no choque con otras funciones del mismo nombre.
- priority - Cuanto mayor sea el número, mayor será la prioridad. Esta función debe ejecutarse después de la actualización de cámara predeterminada de Roblox, por lo que la prioridad se establece en 1 nivel más alto que el RenderPriority de la cámara interna.
- function - La función que se vinculará al paso de renderizado.
Usa RunService:BindToRenderStep() para vincular la función updateCamera al paso de renderizado.
local Players = game:GetService("Players")local RunService = game:GetService("RunService")local player = Players.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 24local HEIGHT_OFFSET = 2local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)endendendRunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)Realiza una prueba de juego de tu código. Usa las teclas A y D para mover tu personaje de lado a lado.
Crear una cámara isométrica
La estructura básica para obtener la posición del usuario y actualizar la posición de la cámara en cada fotograma se puede adaptar a muchos otros estilos de cámara, como una cámara isométrica. Una cámara isométrica es una vista 3D que apunta ligeramente hacia abajo en un ángulo fijo hacia el personaje del usuario.

Modificar posición y vista
Usando el código del ejemplo anterior, modifica cameraPosition para agregar la misma cantidad a las 3 dimensiones.
local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)endendendRunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)Cambiar la propiedad FieldOfView de la cámara simula el acercamiento y alejamiento, lo que puede darle a la vista un aspecto más plano. Intenta establecerlo en un valor de 20 para acercar, y aumentar la distancia de la cámara desde el usuario para compensar.
local Players = game:GetService("Players")local RunService = game:GetService("RunService")local player = Players.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 64local HEIGHT_OFFSET = 2camera.FieldOfView = 20local function updateCamera()
Al cambiar la forma en que se comporta la cámara, puedes lograr un aspecto completamente nuevo para tu juego. ¡Ve si puedes cambiar la cameraPosition para lograr una cámara de arriba hacia abajo con el mismo script! Intenta ajustar configuraciones para obtener un resultado que te guste.