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.


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

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, obtenez l'utilisateur local.
local Players = game:GetService("Players")local player = Players.LocalPlayerCré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.LocalPlayerlocal function updateCamera()endÀ 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.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. Cela définit la position vers laquelle la caméra pointe.
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.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendLa 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.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 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
endMettre à 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
endSynchroniser 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.
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.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 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.

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