Die Sicht des Benutzers auf die Welt wird durch ein Camera-Objekt dargestellt. Du kannst das Kameraverhalten auf verschiedene Weise anpassen, um es an dein Spiel anzupassen. Zum Beispiel kann die Kamera auf Ereignisse in der Welt reagieren, wie z.B. Wackeln, wenn ein Monster vorbeigeht, oder sie kann an der Seite des Charakter des Benutzers fixiert sein, wie in einem Side-Scroller.
Erstelle eine Ego-Perspektive-Kamera
Eine Ego-Perspektive-Kamera ist eine Ansicht, bei der die Kamera mit dem Kopf des Charakters fixiert bleibt, was realistischer ist. Dies ist in Shooter- und Story-Spielen üblich, bei denen das Ziel darin besteht, den Benutzer in die Welt eintauchen zu lassen.


Im Studio enthält das StarterPlayer-Objekt eine Reihe von Eigenschaften, die die Kamera des Benutzers beeinflussen. Die CameraMode-Eigenschaft bestimmt, wie sich die Kamera verhält.
Wähle StarterPlayer aus.

Ändere CameraMode in LockFirstPerson. Dies stellt sicher, dass die Kamera des Benutzers sich nicht von seinem Kopf entfernt.

Teste das Spiel, um die Ego-Perspektive-Kamera in Aktion zu sehen.
Erstelle eine Side-Scrolling-Kamera
Eine Side-Scrolling-Ansicht hält die Kamera in einer festen Position relativ zur Seite des Charakters und verleiht der Welt ein zweidimensionales Gefühl.

Skripte die Kamera
Erweitere StarterPlayer und füge in StarterPlayerScripts ein LocalScript mit dem Namen CameraManager hinzu.

Kopiere am Anfang des Skripts den folgenden Code, um den Players-Service zu erhalten, und hole dir dann in einer neuen Variablen den lokalen Benutzer.
local Players = game:GetService("Players")local player = Players.LocalPlayerErstelle eine Funktion namens updateCamera. Diese enthält die Logik, die benötigt wird, um eine neue Position für die Kamera zu erhalten und festzulegen.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endInnerhalb der Funktion hole das Charaktermodell des Benutzers und überprüfe, ob es existiert, indem du eine if-Anweisung verwendest.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Richte die Kamera aus
Alle Charaktermodelle enthalten ein Teil namens HumanoidRootPart, das verwendet werden kann, um die Position des Charakters in der Welt zu erhalten. Dies legt die Position fest, auf die die Kamera zeigt.
Verwende FindFirstChild, um den HumanoidRootPart zu erhalten, und überprüfe, ob er existiert, indem du eine if-Anweisung verwendest.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendDie Position des HumanoidRootPart liegt tatsächlich 2 Studs unter dem Kopf des Benutzers. Um dies zu beheben, füge eine neue Vector3 mit einer Höhe von 2 Studs zur Position des Roots hinzu.
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
Setze die Kameraposition
Die Kamera benötigt auch eine Position. Um der Sicht des Benutzers einen 2D-Side-Scrolling-Look zu verleihen, muss die Kamera direkt an die Seite des Charakters schauen. Platziere die Kamera an der Seite des Benutzers, indem du Tiefe nur zur Z-Achse der Kameraposition mit einer Vector3 hinzufügst.
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
endAktualisiere CurrentCamera
Jetzt, da die Variablen für die Kameraposition und das Ziel der Kamera bereit sind, ist es an der Zeit, die Position der Kamera zu aktualisieren. Du kannst auf die Kamera des Benutzers über die CurrentCamera-Eigenschaft von Workspace zugreifen. Die Kamera hat eine CFrame-Eigenschaft, um ihre Position zu bestimmen.
Du kannst CFrame.lookAt() verwenden, um die Kamera zu aktualisieren. Es nimmt zwei Positionen und erstellt ein CFrame, das an der ersten Position liegt und auf die zweite zeigt. Verwende CFrame.lookAt(), um ein CFrame zu erstellen, das an cameraPosition positioniert ist und auf rootPosition zeigt.
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
endSynchronisiere die Kamera
Der letzte Schritt besteht darin, diese Funktion wiederholt auszuführen, um die Kamera mit dem Benutzer synchron zu halten. Das Bild, das der Benutzer sieht, wird ständig aktualisiert. Der Bruchteil einer Sekunde, den es dauert, um alle notwendigen Berechnungen durchzuführen, wird als Render-Schritt bezeichnet.
RunService:BindToRenderStep() macht es einfach, eine Funktion in jedem Frame auszuführen, indem es diese drei Parameter akzeptiert:
- name - Der Name dieser Bindung, der einzigartig sein sollte, damit er nicht mit anderen Funktionen desselben Namens in Konflikt gerät.
- priority - Je höher die Zahl, desto höher die Priorität. Diese Funktion sollte nach dem Standardkamera-Update von Roblox ausgeführt werden, daher wird die Priorität auf 1 Level höher als die RenderPriority der internen Kamera gesetzt.
- function - Die Funktion, die an den Render-Schritt gebunden werden soll.
Verwende RunService:BindToRenderStep(), um die Funktion updateCamera an den Render-Schritt zu binden.
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)Teste deinen Code. Verwende die A- und D-Tasten, um deinen Charakter von Seite zu Seite zu bewegen.
Erstelle eine isometrische Kamera
Die grundlegende Struktur, um die Position des Benutzers zu erhalten und die Position der Kamera in jedem Frame zu aktualisieren, kann an viele andere Kamerastile angepasst werden, wie z.B. eine isometrische Kamera. Eine isometrische Kamera ist eine 3D-Ansicht, die leicht nach unten in einem festen Winkel auf den Charakter des Benutzers zeigt.

Modifiziere Position und Sicht
Verwende den Code aus dem vorherigen Beispiel und modifiziere cameraPosition, um in allen 3 Dimensionen denselben Betrag hinzuzufügen.
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)Das Ändern der FieldOfView-Eigenschaft der Kamera simuliert das Hinein- und Herauszoomen, was der Ansicht ein flacheres Aussehen verleihen kann. Versuche, sie auf einen Wert von 20 zu setzen, um hineinzuzoomen, und erhöhe den Abstand der Kamera vom Benutzer, um dies auszugleichen.
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()
Durch das Ändern des Verhaltens der Kamera kannst du einen ganz neuen Look für dein Spiel erreichen. Sieh, ob du die cameraPosition ändern kannst, um mit demselben Skript eine Draufsicht-Kamera zu erreichen. Versuche, die Einstellungen anzupassen, um ein Ergebnis zu erzielen, das dir gefällt!