La visione del mondo dell'utente è rappresentata da un oggetto Camera .Puoi cambiare il comportamento della fotocamera per adattarla alla tua esperienza in molti modi.Ad esempio, la fotocamera può reagire agli eventi nel Mondo, come lo scuotimento quando un mostro passa, o bloccarsi sul lato del personaggio utente, come in un side-scroller.
Crea una Telecamerain prima persona
Una fotocamera in prima persona è una vista in cui la fotocamera rimane bloccata con la testa del personaggio, che è più precisa nella vita reale.È comune in esperienze di sparatutto e storia in cui l'obiettivo è far sentire l'utente immerso nel Mondo.


In Studio, l'oggetto StarterPlayer contiene una serie di proprietà che influiscono sulla Telecameradell'utente.La proprietà Modalità fotocamera determina il modo in cui la fotocamera si comporta.
Seleziona StarterPlayer .
Cambia CameraMode a Blocca la prima persona . Questo garantisce che la fotocamera dell'utente non si allontani dalla sua testa.
Playtest per vedere la prima persona fotocamera in azione.
Crea una Telecameraa scorrimento laterale
Una vista a scorrimento laterale mantiene la fotocamera in una posizione fissa rispetto al lato del personaggio, dando al mondo una sensazione bidimensionale.
Script la Telecamera
Espandi StarterPlayer, e in StarterPlayerScripts aggiungi un LocalScript chiamato CameraManager .
In cima allo script, copia e pasta il seguente esempio di codice per ottenere il servizio giocatori , 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 di carattere dell'utente e controlla se esiste utilizzando una dichiarazione if.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Puntare la Telecamera
Tutti i modelli di personaggio contengono una parte chiamata HumanoidRootPart , che può essere utilizzata per ottenere la posizione del personaggio nel Mondo.Questo imposta la posizione a cui i punti della fotocamera si riferiscono.
Usa FindFirstChild per ottenere la HumanoidRootPart e verifica che esista utilizzando una dichiarazione 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 della HumanoidRootPart è in realtà a 2 studs sotto la testa dell'utente.Per correggere questo, aggiungi un nuovo Vector3 con un'altezza di 2 borchie alla posizione della radice.
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 fotocamera ha anche bisogno di una posizione.Per dare allo sguardo dell'utente una vista a scorrimento laterale in 2D, la fotocamera deve guardare direttamente al lato del personaggio.Posiziona la fotocamera sul lato dell'utente aggiungendo profondità solo all'asse Z della posizione della Telecamerausando un >.
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 Telecamerae il bersaglio della Telecamerasono pronte, è il momento di aggiornare la posizione della Telecamera.Puoi accedere alla fotocamera dell'utente attraverso la proprietà CurrentCamera di Area di lavoro.La fotocamera ha una proprietà CFrame per determinare la sua posizione.
Puoi usare CFrame.lookAt() per aggiornare la Telecamera.Occorrono due posizioni e crea un CFrame situato alla prima posizione puntato verso la seconda.Usa CFrame.lookAt() per creare un CFrame che è posizionato a cameraPosition e punta 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 ripetutamente questa funzione per mantenere la fotocamera sincronizzata con l'utente.L'immagine che l'utente vede si aggiorna costantemente.Il secondo spartito che ci vuole per fare tutti i calcoli necessari si chiama il passo di rendering .
RunService:BindToRenderStep() rende semplice eseguire una funzione su ogni frame accettando questi tre parametri:
- name - Il nome di questo binding, che dovrebbe essere unico in modo che non si scontri con altre funzioni dello stesso nome.
- priority - Più alto è il numero, maggiore è la priorità.Questa funzione dovrebbe essere eseguita dopo l'Aggiornarmentopredefinito della fotocamera di Roblox, quindi la priorità è impostata a 1 livello superiore alla priorità di rendering della Telecamerainterna.
- function - La funzione da legare allo step 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)Prova il tuo codice. Usa le chiavi A e D per muovere il tuo personaggio da un lato all'altro.
Crea una Telecameraisometrica
La struttura di base per ottenere la posizione dell'utente e aggiornare la posizione della Telecameraad ogni frame può essere adattata a molti altri stili di fotocamera, come un fotocamera isometrica .Una fotocamera isometrica è una vista 3D che punta leggermente verso il basso ad un angolo fisso verso il personaggio dell'utente.
Modifica posizione e vista
Usando il codice dall'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à della TelecameraFieldOfView simula lo zoom in e fuori, che può dare alla vista un aspetto più piatto.Prova a impostarlo su un valore di 20 per ingrandire e aumentare la distanza della Telecameradall'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 la fotocamera si comporta, puoi ottenere un look completamente nuovo per la tua esperienza.Vedere se puoi cambiare il cameraPosition per ottenere una fotocamera a livello superiore con lo stesso script.Prova a modificare le impostazioni per ottenere un risultato che ti piace!