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 l'adapter à votre jeu 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 de l'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 fidèle à la réalité. C'est courant dans les jeux de tir et les jeux narratifs où l'objectif est de faire sentir à l'utilisateur qu'il est 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 comment la caméra se comporte.

  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 de défilement latéral

Une vue de défilement latéral maintient la caméra à une position fixe par rapport au côté du personnage, donnant au monde une sensation en 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, obtenez l'utilisateur local.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Créez une fonction appelée updateCamera. Cela contient 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 de personnage de l'utilisateur et vérifiez s'il existe en utilisant une instruction 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. Cela définit la position vers laquelle la caméra pointe.

  1. Utilisez FindFirstChild pour obtenir le HumanoidRootPart et vérifiez qu'il existe en utilisant une instruction 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é à 2 studs en dessous de 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 aspect de défilement latéral 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 via 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. Cela prend deux positions et crée un CFrame situé à la première position pointant 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 de manière répétée pour garder la caméra synchronisée avec l'utilisateur. L'image que l'utilisateur voit se rafraîchit constamment. Le court instant qu'il faut pour effectuer tous les calculs nécessaires est appelé l'étape de rendu.

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

  • name - Le nom de cette liaison, qui doit être unique afin de ne pas entrer 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 fixée à 1 niveau plus élevé que le RenderPriority de la caméra interne.
  • function - La fonction à lier à l'étape de rendu.
  1. Utilisez RunService:BindToRenderStep() pour lier la fonction updateCamera à l'étape de rendu.

    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 côté.

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 de l'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 aspect plus plat. Essayez de la définir à une valeur de 20 pour zoomer, et d'augmenter 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 jeu. Voyez si vous pouvez modifier cameraPosition pour obtenir une caméra vue de dessus 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.