La vista dell'utente del mondo è rappresentata da un oggetto Camera. Puoi cambiare il comportamento della telecamera per adattarlo al tuo gioco in vari modi. Ad esempio, la telecamera può reagire a eventi nel mondo, come tremare quando un mostro passa, o essere bloccata al lato del personaggio dell'utente, come in un gioco a scorrimento laterale.
Crea una telecamera in prima persona
Una telecamera in prima persona è una vista in cui la telecamera rimane bloccata con la testa del personaggio, il che è più accurato rispetto alla vita reale. È comune nei giochi di tiro e di storia dove l'obiettivo è far sentire l'utente immerso nel mondo.


In Studio, l'oggetto StarterPlayer contiene un certo numero di proprietà che influenzano la telecamera dell'utente. La proprietà CameraMode determina come si comporta la telecamera.
Seleziona StarterPlayer.

Cambia CameraMode in LockFirstPerson. Questo assicura che la telecamera dell'utente non si allontani dalla sua testa.

Esegui un test di gioco per vedere la telecamera in prima persona in azione.
Crea una telecamera a scorrimento laterale
Una vista a scorrimento laterale mantiene la telecamera in una posizione fissa rispetto al lato del personaggio, dando al mondo una sensazione bidimensionale.

Scriptare la telecamera
Espandi StarterPlayer e in StarterPlayerScripts aggiungi un LocalScript chiamato CameraManager.

In cima allo script, copia e incolla il seguente campione di codice per ottenere il servizio Players, e poi in una nuova variabile ottieni l'utente locale.
local Players = game:GetService("Players")local player = Players.LocalPlayerCrea una funzione chiamata updateCamera. Questa contiene la logica necessaria per ottenere e impostare una nuova posizione per la telecamera.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endAll'interno della funzione, ottieni il modello del personaggio dell'utente e controlla se esiste utilizzando un'istruzione if.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Punta la telecamera
Tutti i modelli dei personaggi contengono una parte chiamata HumanoidRootPart, che può essere utilizzata per ottenere la posizione del personaggio nel mondo. Questo imposta la posizione verso cui punta la telecamera.
Usa FindFirstChild per ottenere l'HumanoidRootPart e controlla che esista utilizzando un'istruzione 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 posizione dell'HumanoidRootPart è effettivamente 2 stud sotto la testa dell'utente. Per risolvere questo, aggiungi un nuovo Vector3 con un'altezza di 2 stud alla posizione 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
Imposta la posizione della telecamera
La telecamera ha anche bisogno di una posizione. Per dare alla vista dell'utente un aspetto a scorrimento laterale 2D, la telecamera deve guardare direttamente al lato del personaggio. Posiziona la telecamera al lato dell'utente aggiungendo profondità solo all'asse Z della posizione della telecamera utilizzando 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
endAggiorna CurrentCamera
Ora che le variabili per la posizione della telecamera e il target della telecamera sono pronte, è tempo di aggiornare la posizione della telecamera. Puoi accedere alla telecamera dell'utente attraverso la proprietà CurrentCamera di Workspace. La telecamera ha una proprietà CFrame per determinare la sua posizione.
Puoi usare CFrame.lookAt() per aggiornare la telecamera. Prende due posizioni e crea un CFrame situato nella prima posizione puntato verso la seconda. Usa CFrame.lookAt() per creare un CFrame che è posizionato in cameraPosition e puntato verso 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
endSincronizza la telecamera
L'ultimo passo è eseguire questa funzione ripetutamente per mantenere la telecamera sincronizzata con l'utente. L'immagine che l'utente vede si aggiorna costantemente. Il secondo che ci vuole per fare tutti i calcoli necessari è chiamato passo di rendering.
RunService:BindToRenderStep() rende semplice eseguire una funzione a ogni frame accettando questi tre parametri:
- name - Il nome di questo binding, che dovrebbe essere unico in modo da non scontrarsi con altre funzioni dello stesso nome.
- priority - Più alto è il numero, più alta è la priorità. Questa funzione dovrebbe essere eseguita dopo l'aggiornamento predefinito della telecamera di Roblox, quindi la priorità è impostata a 1 livello superiore rispetto alla RenderPriority della telecamera interna.
- function - La funzione da legare al passo di rendering.
Usa RunService:BindToRenderStep() per legare la funzione updateCamera al passo di rendering.
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)Esegui un test del tuo codice. Usa i tasti A e D per muovere il tuo personaggio da un lato all'altro.
Crea una telecamera isometrica
La struttura di base per ottenere la posizione dell'utente e aggiornare la posizione della telecamera a ogni frame può essere adattata a molti altri stili di telecamera, come una telecamera isometrica. Una telecamera isometrica è una vista 3D che punta leggermente verso il basso a un angolo fisso verso il personaggio dell'utente.

Modifica posizione e vista
Utilizzando il codice dell'esempio precedente, modifica cameraPosition per aggiungere la stessa quantità a tutte e 3 le dimensioni.
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)Cambiare la proprietà FieldOfView della telecamera simula lo zoom in e out, il che può dare alla vista un aspetto più piatto. Prova a impostarlo su un valore di 20 per zoomare dentro, e aumentando la distanza della telecamera dall'utente per compensare.
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()
Cambiando il modo in cui si comporta la telecamera, puoi ottenere un aspetto completamente nuovo per il tuo gioco. Vedi se riesci a cambiare cameraPosition per ottenere una telecamera dall'alto con lo stesso script. Prova a modificare le impostazioni per ottenere un risultato che ti piace!