La vision du monde de l'utilisateur est représentée par un objet Camera.Vous pouvez modifier le comportement de la caméra pour correspondre à votre expérience de différentes manières.Par exemple, la caméra peut réagir aux événements dans le monde, comme le tremblement lorsqu'un monstre passe, ou être verrouillée sur le côté du personnage utilisateur, comme dans un défileur latéral.
Créer une caméra à la première personne
Une caméra à la première personne est un point de vue où la caméra reste verrouillée avec la tête du personnage, ce qui est plus précis dans la vie réelle.C'est courant dans les expériences de tireur et de récit où l'objectif est de faire en sorte que l'utilisateur se sente immersé 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é Mode de caméra détermine la façon dont la caméra se comporte.
Sélectionnez StarterPlayer .
Changez le mode de caméra en verrouiller la première personne . Cela garantit que la caméra de l'utilisateur ne se déplace pas loin de sa tête.
Testez pour voir la première caméra de personne en action.
Créer une caméra à défilement latéral
Une vue en défilement latéral maintient la caméra à une position fixe par rapport au côté du personnage, ce qui donne au monde un sentiment de deux dimensions.
Script la caméra
Développez StarterPlayer, et dans StarterPlayerScripts ajoutez un LocalScript nommé CameraManager.
Au sommet du script, copiez et collez l'exemple de code suivant pour obtenir le service des joueurs , puis dans une nouvelle variable obtenez l'utilisateur local.
local Players = game:GetService("Players")local player = Players.LocalPlayerCréez une fonction appelée updateCamera. Elle 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 caractère 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
Pointe la caméra
Tous les modèles de caractère contiennent une partie nommée partie racine humanoïde , qui peut être utilisée pour obtenir la position du personnage dans le monde.Cela définit la position auxquels les points de la caméra se réfèrent.
Utilisez FindFirstChild pour obtenir la partie racine humanoïde et vérifier qu'elle existe en utilisant 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 de la partie racine humanoïde est en fait à 2 studs au-dessous de la tête de l'utilisateur.Pour corriger cela, ajoutez un nouveau Vector3 avec une hauteur de 2 pointes à 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 du côté du personnage.Placez la caméra à côté de l'utilisateur en ajoutant de la profondeur à seulement l'axe Z de la position de la caméra en utilisant 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 la caméra actuelle
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 l'espace de travail.La caméra a une propriété CFrame pour déterminer sa position.
Vous pouvez utiliser CFrame.lookAt() pour mettre à jour la caméra.Il prend deux positions et crée un CFrame situé à la première position pointé vers la deuxième.Utilisez CFrame.lookAt() pour créer un cadre C 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 plusieurs fois pour garder la caméra en phase avec l'utilisateur.L'image que voit l'utilisateur se rafraîchit constamment.La seconde d'écart nécessaire pour faire tous les calculs nécessaires s'appelle l'étape de rendu **** .
RunService:BindToRenderStep() rend simple d'exécuter une fonction sur chaque cadre en acceptant ces trois paramètres :
- name - Le nom de cette interface, qui doit être unique pour ne pas se heurter à 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 par défaut de la caméra de Roblox, la priorité étant donc définie à 1 niveau supérieur de la priorité de rendu 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 d'un côté à l'autre.
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 cadre peut être adaptée à de nombreux autres styles de caméra, tels qu'une caméra isométrique .Une caméra isométrique est une vue 3D qui pointe légèrement vers le bas à un angle fixe vers le personnage utilisateur.
Modifier la position et la voir
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é de la caméra FieldOfView simule le zoom avant et arrière, ce qui peut donner à la vue un aspect plus plat.Essayez de le définir sur une valeur de 20 pour zoomer et d'augmenter la distance de la caméra de 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 la façon dont la caméra se comporte, vous pouvez obtenir un tout nouveau look pour votre expérience.Vérifiez si vous pouvez modifier le cameraPosition pour obtenir une caméra en hauteur avec le même script.Essayez de modifier les paramètres pour obtenir un résultat que vous aimez !