Inizia
Tutorial intermedi

Controllare la telecamera dell'utente

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

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.

Telecamera in Prima Persona
Telecamera Classica di Roblox

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.

  1. Seleziona StarterPlayer.

    alt

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

    alt

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

alt

Scriptare la telecamera

  1. Espandi StarterPlayer e in StarterPlayerScripts aggiungi uno LocalScript chiamato CameraManager.

    alt

  2. 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.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 del personaggio dell'utente e controlla se esiste utilizzando un'istruzione if.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

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.

  1. Usa FindFirstChild per ottenere l'HumanoidRootPart e controlla se esiste utilizzando un'istruzione 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 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.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 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.
  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. 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.

alt

Modifica posizione e vista

  1. Utilizzando il codice dell'esempio precedente, modifica cameraPosition per aggiungere la stessa quantità a tutte e tre le dimensioni.

    alt


    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. 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.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local 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!

© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.