Tutorials für Fortgeschrittene

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

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.

    alt

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

    alt

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

alt

Skripte die Kamera

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

    alt

  2. 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.LocalPlayer
  3. Erstelle 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.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 mit einer if-Anweisung, ob er existiert.


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

alt

Position und Ansicht ändern

  1. Verwende den Code aus dem vorherigen Beispiel und modifiziere cameraPosition, um die gleiche Menge zu allen 3 Dimensionen 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. 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.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 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!

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