Die Sicht des Benutzers auf die Welt wird durch ein Camera Objekt dargestellt.Du kannst das Kamerabenehmen so ändern, dass es deiner Erfahrung in einer Vielzahl von Weisen entspricht.Zum Beispiel kann die Kamera auf Ereignisse in der Welt reagieren, wie z. B. Schütteln, wenn ein Monster vorbeigeht, oder an der Seite des Benutzercharakters feststecken, wie in einem Seiten-Scroller.
Erstelle eine First-Person-Kamera
Eine First-Person-Kamera ist eine Ansicht, bei der die Kamera mit dem Kopf des Charakters verschlossen bleibt, was dem realen Leben genauer entspricht.Es ist üblich in Schießer- und Story-Erlebnissen, bei denen das Ziel ist, den Benutzer in die Welt einzutauchen.


Im Studio enthält das StarterPlayer -Objekt eine Reihe von Eigenschaften, die die Kamera des Benutzers beeinflussen.Die Kamera-Modus -Eigenschaft legt fest, wie die Kamera sich verhält.
Wählen Sie StarterPlayer .
Ändere den Kameramodus auf LockFirstPerson . Dadurch wird sichergestellt, dass die Kamera des Benutzers nicht von seinem Kopf weg bewegt wird.
Teste, um die erste Person-Kamera in Actionzu sehen.
Erstelle eine seitlich scrollende Kamera
Eine seitlich scrollende Ansicht hält die Kamera an einer festen Position in Bezug auf die Seite des Charakters und gibt der Welt ein zweidimensionales Gefühl.
Skripte die Kamera
Erweitere StarterPlayer und füge in StarterPlayerScripts ein Lokales Skript hinzu, das sich CameraManager heißt.
Am oberen Rand des Skript, das. PL: die Skriptskopieren und fügen Sie das folgende Codebeispiel ein, um den Spielerdienst zu erhalten, und holen Sie dann in einer neuen Variable den lokalen Benutzer.
local Players = game:GetService("Players")local player = Players.LocalPlayerErstelle eine Funktion namens updateCamera. Diese enthält die Logik, die zum Erhalten und Festlegen einer neuen Position für die Kamera erforderlich ist.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endIm Inneren der Funktion erhalten Sie das Charaktermodell des Benutzers und prüfen, ob es vorhanden ist, indem Sie eine if-Anweisung verwenden.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Zeige die Kamera
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 der Kamerapunkte fest.
Verwende FindFirstChild, um die HumanoidRootPart zu erhalten und sie mit einer if-Anweisung zu überprüfen, ob sie 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 ist tatsächlich 2 Klötze unter dem Kopf des Benutzers.Um dies zu beheben, füge einen neuen Vector3 mit einer Höhe von 2 Klötzen an die Position der Wurzel 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
Stelle die Kameraposition ein
Die Kamera braucht auch eine Position.Um der Ansicht des Benutzers ein 2D-Seitenanschauen zu geben, muss die Kamera direkt auf die Seite des Charakters schauen.Platziere die Kamera neben dem Benutzer, indem du der Tiefe zur nur Z-Achse der Kameraposition mit einem 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
Aktuelle Kamera aktualisieren
Jetzt, da die Variablen für die Position der Kamera und das Ziel der Kamera bereit sind, ist es Zeit, die Position der Kamera zu aktualisieren.Du kannst auf die Kamera des Benutzers über das Eigenschaft CurrentCamera des Arbeitsbereichs zugreifen.Die Kamera hat ein CFrame Eigenschaft, um ihre Position zu bestimmen.
Du kannst CFrame.lookAt() verwenden, um die Kamera zu aktualisieren.Es erfordert zwei Positionen und erstellt einen CFrame, der sich an der ersten Position befindet und auf die zweite zeigt.Verwende CFrame.lookAt(), um ein CFrame zu erstellen, das sich an cameraPosition befindet 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 im Einklang zu halten.Das Bild, das der Benutzer sieht, wird ständig aktualisiert.Die Sekunde, die es dauert, alle notwendigen Berechnungen durchzuführen, heißt Render-Schritt .
RunService:BindToRenderStep() macht es einfach, eine funktion auf jedem frame auszuführen, indem du diese drei parameter akzeptierst:
- name - Der Name dieser Bindung, die einzigartig sein sollte, damit sie nicht mit anderen Funktionen desselben Namens kollidiert.
- priority - Je höher die Zahl, desto höher die Priorität.Diese Funktion sollte nach dem Standard-Kamera-Update von Roblox ausgeführt werden, so dass die Priorität um 1 Stufe höher als die RenderPriority der internen Kamera festgelegt wird.
- function - Die Funktion, die an den Render-Schritt gebunden werden soll.
Verwende RunService:BindToRenderStep(), um die updateCamera-Funktion mit dem Render-Schritt zu verknüpfen.
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 Codes. Verwende die A- und D-Tasten, um deinen Charakter von Seite zu Seite zu bewegen.
Erstelle eine isometrische Kamera
Die grundlegende Struktur des Erhalts der Position des Benutzers und der Aktualisierung der Position der Kamera in jedem Frame kann auf viele andere Kamerastile angepasst werden, wie eine isometrische Kamera .Eine isometrische Kamera ist eine 3D-Ansicht, die leicht nach unten zeigt auf einen festen Winkel zum Benutzercharakter.
Position und Ansicht modifizieren
Mit dem Code aus dem vorherigen Beispiel modifizieren Sie cameraPosition, um die gleiche Menge für alle 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)Das Ändern der Eigenschaft FieldOfView der Kamera simuliert das Zoomen ein- und aus, was der Ansicht ein flacheres Aussehen verleihen kann.Versuche, es auf einen Wert von 20 zu setzen, um einzuzoomen, und erhöhe die Entfernung der Kamera vom Benutzer, um sie 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 Ändern der Art, wie die Kamera sich verhält, kannst du ein ganz neues Aussehen für deine Erlebniserreichen.Sehen Sie, ob Sie die cameraPosition ändern können, um eine Kamera von oben nach unten mit demselben Skript, das. PL: die Skriptszu erreichen.Versuche, die Einstellungen zu tweaken, um ein Ergebnis zu erhalten, das dir gefällt!