La vista del mondo dell'utente è rappresentata da un oggetto Camera. Puoi cambiare il comportamento della telecamera per adattarlo alla tua esperienza in vari modi. Ad esempio, la telecamera può reagire a eventi nel mondo, come tremare quando un mostro passa, o essere bloccata al fianco del personaggio dell'utente, come in un side-scroller.
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ù preciso rispetto alla vita reale. È comune nelle esperienze di sparatutto e racconti in cui 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 sposti dalla sua testa.

Esegui un playtest per vedere la telecamera in prima persona in azione.
Crea una telecamera per il side-scrolling
Una vista per il side-scrolling mantiene la telecamera in una posizione fissa rispetto al fianco del personaggio, dando al mondo un aspetto bidimensionale.

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

Nella parte superiore dello script, copia e incolla il seguente campione di codice per ottenere il servizio Players, e quindi 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 la quale la telecamera punta.
Usa FindFirstChild per ottenere l'HumanoidRootPart e controlla se esiste 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 è in realtà 2 studs sotto la testa dell'utente. Per correggerlo, aggiungi un nuovo Vector3 con un'altezza di 2 studs 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 2D da side-scrolling, la telecamera deve guardare direttamente al fianco del personaggio. Posiziona la telecamera al fianco 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
end
Aggiorna CurrentCamera
Ora che le variabili per la posizione della telecamera e l'obiettivo della telecamera sono pronte, è tempo di aggiornare la posizione della telecamera. Puoi accedere alla telecamera dell'utente tramite 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 posizionato a 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
end
Sincronizza 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 continuamente. Il frazione di secondo necessaria per eseguire tutti i calcoli necessari è chiamata 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 andare in conflitto 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 ad un livello superiore rispetto alla RenderPriority interna della telecamera.
- 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 playtest 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 ad 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 tre 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)Cambiando la proprietà FieldOfView della telecamera si simula lo zoom in e out, il che può dare alla vista un aspetto più piatto. Prova a impostarla su un valore di 20 per ingrandire 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()
Modificando il modo in cui si comporta la telecamera, puoi ottenere un aspetto completamente nuovo per la tua esperienza. Vedi se riesci a modificare la cameraPosition per ottenere una telecamera vista dall'alto con lo stesso script. Prova a modificare le impostazioni per ottenere un risultato che ti piace!