Steuere die Kamera des Benutzers

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

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.

Ego-Perspektive Kamera
Klassische Roblox Kamera

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.

  1. Wähle StarterPlayer aus.

    alt

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

    alt

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

alt

Skripte die Kamera

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

    alt

  2. 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.LocalPlayer
  3. Erstelle 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.LocalPlayer
    local function updateCamera()
    end
  4. Innerhalb 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.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

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.

  1. 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.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. Die 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.LocalPlayer
    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)
    end
    end
    end

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
end

Aktualisiere 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
end

Synchronisiere 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.
  1. 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.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
    RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 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.

alt

Modifiziere Position und Sicht

  1. Verwende den Code aus dem vorherigen Beispiel und modifiziere cameraPosition, um in allen 3 Dimensionen denselben Betrag hinzuzufügen.

    alt

    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 = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 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.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local 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!

©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.