Steuern der 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 repräsentiert. Sie können das Kamerabezug verändern, um Ihrem Erlebnis entsprechend zu gestalten, in einer Vielzahl von Möglichkeiten. Zum Beispiel kann die Kamera auf Ereignisse in der Welt reagieren, z. B. auf Schütteln, wenn ein Monster läuft, oder auf das Seitenbild des Benutzerscharakters, wie in einem Seiten-Scroller.

Erstellen einer First-Person-Kamera

Eine First-Person-Kamera ist eine Ansicht, bei der die Kamera mit dem Kopf des Benutzers verschlossen bleibt, was der Benutzer in der realen Welt besser fühlt. Es ist in Shooter- und Story-Erlebnissen weit verbreitet, bei denen das Ziel ist, den Benutzer in die Welt einzufühlen.

Erste-Person-Kamera
Klassische Roblox-Kamera

In Studio enthält das StarterPlayer-Objekt eine Reihe von Eigenschaften, die die Kamera des Benutzers beeinflussen. Die Kameramodus-Eigenschaft bestimmt, wie die Kamera sich verhält.

  1. Wählen Sie StarterPlayer .

  2. Ändern Sie CameraMode in LockFirstPerson . Dies gewährleistet, dass die Kamera des Benutzers nicht von seinem Kopf weg bewegt wird.

  3. Teste das Spiel, um die erste Kameraperspektive in Actionzu sehen.

Eine seitlich scrollende Kamera erstellen

Ein seitlich scrollender Blick behält die Kamera in einer fixen Position im Verhältnis zu der Seite des Charakters, wodurch die Welt eine zweidimensionale Wirkung hat.

Scripting der Kamera

  1. Erweitern Sie StarterPlayer und fügen Sie in StarterPlayerScripts einen lokalen Skript namens CameraManager hinzu.

  2. In der oberen Zeile des Skript, das. PL: die Skriptskopieren und fügen Sie den folgenden Code-Beispiel ein, um den Players service zu erhalten, und dann in einer neuen Variable den lokalen Benutzer zu erhalten.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Erstellen Sie eine Funktion namens updateCamera. Dies enthält die Logik, die für die Kamera erforderlich ist, um eine neue Position einzuprüfen und zu festzulegen.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. Im Inneren der Funktion erhalten Sie das Charaktermodell des Benutzers und überprüfen Sie, ob es mit einem If-Ausdruck existiert.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

Kamera zeigen

Alle Charaktermodelle enthalten ein Teil namens HumanoidRootPart , das verwendet werden kann, um die Position des Charakters in der Welt zu erhalten. Dies setzt die Position, an der die Kamera zeigt.

  1. Verwenden Sie FindFirstChild, um die HumanoidRootPart zu erhalten, und überprüfen Sie, ob sie mit einem If-Ausdruck 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 der HumanoidRootPart ist tatsächlich 2 Studs unter dem Kopf des Benutzers. Um dies zu beheben, füge einen neuen Vector3 mit einer Höhe von 2 Studs zum Wurzel position 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

Kamera-Position einstellen

Die Kamera benötigt auch eine Position. Um dem Benutzer die 2D-Seitenrolle anzubieten, muss die Kamera direkt auf die Seite des Charakters blicken. Platzieren Sie die Kamera auf der Seite des Benutzers, indem Sie die Tiefe der Kamera mit der Taste Datatype.Vector3 hinzufügen.


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

Nun, da die Variablen für die Position der Kamera und das Ziel der Kamera bereit sind, ist es Zeit, die KameraPosition zu aktualisieren. Sie können auf die Kamera über das Eigenschaft CurrentCamera des Arbeitsbereichzugreifen. Die Kamera hat eine Eigenschaft CFrame, um ihre Position zu bestimmen.

Sie können CFrame.lookAt() verwenden, um die Kamera zu aktualisieren. Es erfordert zwei Positionen und erstellt einen CFrame, der in der ersten Position angezeigt wird, und einen CFrame, der in der zweiten Position angezeigt wird. Verwenden Sie CFrame.lookAt() , um einen CFrame zu erstellen, der in der ersten Position angezeigt wird, und einen CFrame, der in der zweiten Position angezeigt


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

Kamera synchronisieren

Der letzte Schritt ist es, diese Funktion wiederholt auszuführen, um die Kamera mit dem Benutzer in Einklang zu bringen. Das Bild, das der Benutzer sieht, wird ständig aktualisiert. Der Trennungs zweite, der für alle notwendigen Berechnungen erforderlich ist, wird als Render-Schritt genannt.

RunService:BindToRenderStep() macht es einfach, eine Funktion auf jedem Frame auszuführen, indem Sie diese drei Argumente akzeptieren:

  • name - Der Name dieses Bindings, das einzigartig sein sollte, um nicht mit anderen Funktionen des gleichen Namens zu kollidieren.
  • priority - Je höher die Zahl, desto höher die Priorität. Diese Funktion sollte nach der Roblox-Standardkamera-Update nach der Roblox-Standardkamera-Render Priorität auf 1 erhöht werden, so dass die Priorität auf 1-Stufe höher als die interne Kamera-Render-Einstellung ist.
  • function - Die Funktion, der auf den Rendering-Schritt gebunden ist.
  1. Verwenden Sie RunService:BindToRenderStep() , um die updateCamera-Funktion auf 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. Testen Sie Ihren Codes. Verwenden Sie die A und D-Tasten, um Ihren Charakter von Seite an Seite zu bewegen.

Erstellen einer isometrischen Kamera

Die grundlegende Struktur, die Position des Benutzers zu erhalten, und die Position der Kamera jedes Frames anzupassen, kann an viele andere Kamerastile angepasst werden, z. B. eine isometrische Kamera . Eine isometrische Kamera ist eine 3D-Ansicht, die leicht nach unten zeigt, in Richtung des Benutzers-Charakters.

Position und Ansicht ändern

  1. Das Code aus dem vorherigen Beispiel zu verwenden, modifizieren Sie cameraPosition, um die gleiche Menge an allen 3 Dimensionen hinzuzufügen.


    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. Die Änderung der Kamera's FieldOfView Eigenschaft simuliert das Zoomen hinein und raus, was der Ansicht ein schillerndes Aussehen verleihen kann. Versuchen Sie, es auf einen Wert von 20 zu setzen, um das vergrößernund die Kamera's Entfernung vom Benutzer zu kompensieren.


    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()

Indem Sie die Art und Weise, wie die Kamera sich verhält, ändern, können Sie ein ganz neues Aussehen für Ihr Erlebnis erhalten. Sehen Sie, ob Sie die cameraPosition ändern können, um eine Top-Down-Kamera mit demselben Skript, das. PL: die Skriptszu erhalten. Versuchen Sie, die Einstellungen anzupassen, um ein Ergebnis zu erhalten, das Sie mögen!