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.


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.
Sélectionnez StarterPlayer.

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

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.

Script de la caméra
Développez StarterPlayer, et dans StarterPlayerScripts, ajoutez un LocalScript nommé CameraManager.

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.LocalPlayerCré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.LocalPlayerlocal function updateCamera()endÀ 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.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
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.
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.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendLa 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.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
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.
Utilisez RunService:BindToRenderStep() pour lier la fonction updateCamera au render step.
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)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.

Modifier la position et la vue
En utilisant le code de l'exemple précédent, modifiez cameraPosition pour ajouter la même quantité à toutes les 3 dimensions.
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)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.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 64local HEIGHT_OFFSET = 2camera.FieldOfView = 20local 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 !