Die Sicht des Benutzers auf die Welt wird durch ein Camera-Objekt dargestellt. Du kannst das Kameraverhalten auf verschiedene Arten ändern, um es an dein Erlebnis anzupassen. Beispielsweise kann die Kamera auf Ereignisse in der Welt reagieren, wie z.B. Wackeln, wenn ein Monster vorbeigeht, oder an die Seite des Benutzerscharakters 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 ist, was realistischeren Bedingungen entspricht. Dies ist häufig in Shooter- und Story-Erlebnissen der Fall, 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.

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

Spiele dein Spiel, um die Ego-Perspektivkamera 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.

Am Anfang des Skripts kopierst und fügst du das folgende Codebeispiel ein, um den Players-Service zu erhalten, und holst 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, 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 mit einer if-Anweisung, ob er existiert.
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 unterhalb des Kopfes des Benutzers. Um dies zu korrigieren, füge der Position des Roots einen neuen Vector3 mit einer Höhe von 2 Studs 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 dem Blick des Benutzers ein 2D-Side-Scrolling-Aussehen zu verleihen, muss die Kamera direkt an die Seite des Charakters schauen. Platziere die Kamera seitlich vom Benutzer, indem du der Z-Achse der Position der Kamera Tiefe hinzufügst, und zwar mithilfe eines 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
Aktualisiere CurrentCamera
Jetzt, da die Variablen für die Position der Kamera 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 des Workspace zugreifen. Die Kamera hat eine CFrame-Eigenschaft, um ihre Position zu bestimmen.
Du kannst CFrame.lookAt() verwenden, um die Kamera zu aktualisieren. Es benötigt 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
end
Synchronisiere die Kamera
Der letzte Schritt besteht darin, diese Funktion wiederholt auszuführen, um die Kamera synchron mit dem Benutzer zu halten. Das Bild, das der Benutzer sieht, wird ständig aktualisiert. Der Augenblick, in dem alle notwendigen Berechnungen durchgeführt werden, wird als Render-Schritt bezeichnet.
RunService:BindToRenderStep() macht es einfach, eine Funktion in jedem Frame auszuführen, indem diese drei Parameter akzeptiert werden:
- name - Der Name dieser Bindung, die einzigartig sein sollte, damit sie nicht mit anderen Funktionen gleichen Namens in Konflikt gerät.
- priority - Je höher die Zahl, desto höher die Priorität. Diese Funktion sollte nach dem standardmäßigen Kamera-Update von Roblox ausgeführt werden, sodass die Priorität auf 1 Level höher als die RenderPriority der internen Kamera gesetzt wird.
- function - Die Funktion, die an den Render-Schritt gebunden werden soll.
Verwende RunService:BindToRenderStep(), um die updateCamera-Funktion 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 bei jedem Frame zu aktualisieren, kann auf 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.

Position und Ansicht ändern
Verwende den Code aus dem vorherigen Beispiel und modifiziere cameraPosition, um die gleiche Menge zu allen 3 Dimensionen 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)Durch Ändern der FieldOfView-Eigenschaft der Kamera simuliert man das Hinein- und Herauszoomen, was der Ansicht ein flacheres Aussehen verleihen kann. Versuche, sie auf einen Wert von 20 einzustellen, um hineinzuzoomen, und erhöhe den Abstand der Kamera vom Benutzer, um das 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 Erlebnis erzielen. Überprüfe, ob du die cameraPosition ändern kannst, um eine Draufsicht-Kamera mit dem gleichen Skript zu erreichen. Probiere, die Einstellungen anzupassen, um ein Ergebnis zu erzielen, das dir gefällt!