Commencer
Tutoriels intermédiaires

Contrôler la caméra de l'utilisateur

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

La vue de l'utilisateur sur le monde est représentée par un objet Camera. Vous pouvez modifier le comportement de la caméra pour s'adapter à votre expérience de différentes manières. Par exemple, la caméra peut réagir à des événements dans le monde, comme trembler lorsqu'un monstre passe, ou être verrouillée sur le côté du personnage utilisateur, comme dans un jeu de défilement horizontal.

Créer une caméra à la première personne

Une caméra à la première personne est une vue où la caméra reste verrouillée avec la tête du personnage, ce qui est plus précis par rapport à la réalité. C'est courant dans les expériences de tir et d'histoire où le but est de faire en sorte que l'utilisateur se sente immergé dans le monde.

Caméra à la Première Personne
Caméra Classique Roblox

Dans Studio, l'objet StarterPlayer contient un certain nombre de propriétés qui affectent la caméra de l'utilisateur. La propriété CameraMode détermine le comportement de la caméra.

  1. Sélectionnez StarterPlayer.

    alt

  2. Changez CameraMode en LockFirstPerson. Cela garantit que la caméra de l'utilisateur ne s'éloigne pas de sa tête.

    alt

  3. Testez pour voir la caméra à la première personne en action.

Créer une caméra en défilement horizontal

Une vue en défilement horizontal maintient la caméra à une position fixe par rapport au côté du personnage, donnant au monde une impression de deux dimensions.

alt

Script de la caméra

  1. Développez StarterPlayer, et dans StarterPlayerScripts, ajoutez un LocalScript nommé CameraManager.

    alt

  2. En haut du script, copiez et collez l'exemple de code suivant pour obtenir le service Players, puis dans une nouvelle variable, récupérez l'utilisateur local.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Créez une fonction appelée updateCamera. Cela contiendra la logique nécessaire pour obtenir et définir une nouvelle position pour la caméra.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. À l'intérieur de la fonction, obtenez le modèle du personnage de l'utilisateur et vérifiez s'il existe en utilisant une déclaration if.


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

Pointer la caméra

Tous les modèles de personnage contiennent une partie nommée HumanoidRootPart, qui peut être utilisée pour obtenir la position du personnage dans le monde. Ceci définit la position que la caméra pointe.

  1. Utilisez FindFirstChild pour obtenir le HumanoidRootPart et vérifiez s'il existe à l'aide d'une déclaration 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 position du HumanoidRootPart est en réalité située 2 studs sous la tête de l'utilisateur. Pour corriger cela, ajoutez un nouveau Vector3 avec une hauteur de 2 studs à la position de la racine.


    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

Définir la position de la caméra

La caméra a également besoin d'une position. Pour donner à la vue de l'utilisateur un look de défilement horizontal en 2D, la caméra doit regarder directement sur le côté du personnage. Placez la caméra sur le côté de l'utilisateur en ajoutant de la profondeur uniquement à l'axe Z de la position de la caméra à l'aide d'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

Mettre à jour CurrentCamera

Maintenant que les variables pour la position de la caméra et la cible de la caméra sont prêtes, il est temps de mettre à jour la position de la caméra. Vous pouvez accéder à la caméra de l'utilisateur par la propriété CurrentCamera de Workspace. La caméra a une propriété CFrame pour déterminer sa position.

Vous pouvez utiliser CFrame.lookAt() pour mettre à jour la caméra. Elle prend deux positions et crée un CFrame situé à la première position pointée vers la seconde. Utilisez CFrame.lookAt() pour créer un CFrame qui est positionné à cameraPosition et pointé vers 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

Synchroniser la caméra

La dernière étape consiste à exécuter cette fonction en continu pour garder la caméra synchronisée avec l'utilisateur. L'image que l'utilisateur voit se rafraîchit constamment. La fraction de seconde nécessaire pour effectuer tous les calculs nécessaires est appelée le render step.

RunService:BindToRenderStep() facilite l'exécution d'une fonction à chaque image en acceptant ces trois paramètres :

  • name - Le nom de ce lien, qui doit être unique afin qu'il ne soit pas en conflit avec d'autres fonctions du même nom.
  • priority - Plus le nombre est élevé, plus la priorité est élevée. Cette fonction doit s'exécuter après la mise à jour de la caméra par défaut de Roblox, donc la priorité est réglée à 1 niveau plus élevé que RenderPriority de la caméra interne.
  • function - La fonction à lier au render step.
  1. Utilisez RunService:BindToRenderStep() pour lier la fonction updateCamera au render step.


    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. Testez votre code. Utilisez les touches A et D pour déplacer votre personnage de gauche à droite.

Créer une caméra isométrique

La structure de base pour obtenir la position de l'utilisateur et mettre à jour la position de la caméra à chaque image peut être adaptée à de nombreux autres styles de caméra, comme une caméra isométrique. Une caméra isométrique est une vue 3D pointant légèrement vers le bas à un angle fixe vers le personnage utilisateur.

alt

Modifier la position et la vue

  1. En utilisant le code de l'exemple précédent, modifiez cameraPosition pour ajouter la même quantité à toutes les 3 dimensions.

    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. Changer la propriété FieldOfView de la caméra simule un zoom avant et arrière, ce qui peut donner à la vue un look plus plat. Essayez de le régler sur une valeur de 20 pour zoomer, et augmentez la distance de la caméra par rapport à l'utilisateur pour compenser.


    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()

En changeant le comportement de la caméra, vous pouvez obtenir un tout nouveau look pour votre expérience. Voyez si vous pouvez modifier cameraPosition pour obtenir une caméra vue de haut avec le même script. Essayez d'ajuster les paramètres pour obtenir un résultat qui vous plaît !

©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.