Controlla la Telecameradell'utente

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

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.

Fotocamera della prima persona
>

Fotocamera Classica di Roblox
>

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.

  1. Seleziona StarterPlayer .

  2. Cambia CameraMode a Blocca la prima persona . Questo garantisce che la fotocamera dell'utente non si allontani dalla sua testa.

  3. 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

  1. Espandi StarterPlayer, e in StarterPlayerScripts aggiungi un LocalScript chiamato CameraManager .

  2. 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.LocalPlayer
  3. Crea 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.LocalPlayer
    local function updateCamera()
    end
  4. All'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.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

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.

  1. Usa FindFirstChild per ottenere la HumanoidRootPart e verifica che esista utilizzando una dichiarazione if.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. La 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.LocalPlayer
    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)
    end
    end
    end

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.
  1. 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.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
    RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 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

  1. 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.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local 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)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 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.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local 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!