CFrames

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

Ein CFrame, kurz für Koordinatenrahmen, ist ein Datentyp, der verwendet wird, um 3D-Objekte zu drehen und zu positionieren. Als Objekt-Eigenschaft oder als eigenständige Einheit enthält ein CFrame globale X, Y und Z Koordinaten sowie Rotationsdaten für jede Achse. Darüber hinaus enthält CFrames nützliche Funktionen für die Arbeit mit Objekten im 3D-Raum.

Positionieren eines CFrame

Sie können ein leeres CFrame an der Standardposition von (0, 0, 0) erstellen, indem Sie CFrame.new() verwenden. Um ein CFrame an einem bestimmten Punkt zu positionieren, geben Sie X, Y und Z Koordinaten als Argumente an CFrame.new(). Im folgenden Beispiel ändert sich die CFrame-Eigenschaft des redBlock-Teils in newCFrame, wodurch es auf (-2, 2, 4) repositioniert wird.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
-- Neues CFrame erstellen
local newCFrame = CFrame.new(-2, 2, 4)
-- Das aktuelle CFrame des roten Blocks mit dem neuen CFrame überschreiben
redBlock.CFrame = newCFrame
Vorher
Nachher

Alternativ können Sie eine neue Vector3-Position an CFrame.new() übergeben und dasselbe Ergebnis erzielen:


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
-- Neues CFrame erstellen
local newVector3 = Vector3.new(-2, 2, 4)
local newCFrame = CFrame.new(newVector3)
-- Das aktuelle CFrame des roten Blocks mit dem neuen CFrame überschreiben
redBlock.CFrame = newCFrame

Ein CFrame rotieren

Um ein rotiertes CFrame zu erstellen, verwenden Sie den Konstruktor CFrame.fromEulerAnglesXYZ(), wobei Sie einen Rotationswinkel in Bogenmaß für die gewünschten Achsen angeben. Die Parameter für CFrame.fromEulerAnglesXYZ() sind in Bogenmaß angegeben und nicht in Grad; wenn Sie Grad bevorzugen, verwenden Sie math.rad(), um Grad in Bogenmaß zu konvertieren. Im folgenden Beispiel dreht sich der redBlock-Teil um 45 Grad gegen den Uhrzeigersinn um seine Y-Achse.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
-- Neues rotiertes CFrame erstellen
local newCFrame = CFrame.fromEulerAnglesXYZ(0, math.rad(45), 0)
-- Das aktuelle CFrame des roten Blocks mit dem neuen CFrame überschreiben
redBlock.CFrame = newCFrame
Vorher
Nachher

Ein CFrame auf einen Punkt ausrichten

Sie können CFrame.lookAt() verwenden, um die Vorderfläche eines CFrame auf einen bestimmten Punkt in der Welt auszurichten. Im folgenden Beispiel wird redBlock auf (0, 3, 0) positioniert und zeigt seine Vorderfläche, markiert durch den weißen Kreis, auf den blueCube-Teil.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
redBlock.Position = Vector3.new(0, 3, 0)
-- Die Vorderfläche des roten Blocks auf den blauen Würfel ausrichten
redBlock.CFrame = CFrame.lookAt(redBlock.Position, blueCube.Position)
Vorher
Nachher

Ein CFrame verschieben

Um ein Objekt um eine bestimmte Anzahl an Studs von seiner aktuellen Position zu verschieben, addieren oder subtrahieren Sie einen Vector3 zu oder von einem neuen CFrame an der Position des Objekts. Um eine korrekt formatierte Vector3-Position eines Objekts zu erhalten, die Sie mit CFrame.new() verwenden können, wie hier zu sehen ist, ist die Position-Eigenschaft (redBlock.Position) eine praktische Abkürzung.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
redBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
Vorher
Nachher

Sie können die gleiche Technik verwenden, um ein Objekt von der Position eines anderen Objekts zu verschieben. Im folgenden Beispiel wird ein Vector3 zu einem neuen CFrame hinzugefügt, das an der Position des blauen Würfels erstellt wurde, anstatt an der Position des Blocks.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
redBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
Vorher
Nachher

Dynamische CFrame-Orientierung

Die Konstruktoren CFrame.new() und CFrame.fromEulerAnglesXYZ() repositionieren oder rotieren ein Objekt in einer bestimmten Orientierung innerhalb der Welt, aber manchmal können Sie sich nicht auf eine feste Weltposition und einen Rotationswinkel verlassen. Zum Beispiel:

  • Einen schwebenden Schatz direkt vor einen Spieler platzieren, der sich überall in der Welt aufhalten und in jede Richtung blicken kann.
  • Einen magischen Dschinn direkt über die rechte Schulter eines Spielers erscheinen lassen.

In diesen Fällen verwenden Sie lieber die Methoden von CFrame anstelle ihrer Konstruktoren.

Relative Position

Die Funktion CFrame:ToWorldSpace() transformiert das CFrame eines Objekts — unter Berücksichtigung seiner eigenen lokalen Orientierung — in eine neue Welt-Orientierung. Dies macht es ideal, um ein Teil relativ zu sich selbst oder einem anderen Objekt zu verschieben, unabhängig davon, wie es derzeit positioniert/rotiert ist.

Im folgenden Beispiel wird der redBlock-Teil relativ zur Y-Achse des blauen Würfels (der grüne Pfeil, der durch ihn zeigt) um 2 Studs verschoben und nicht relativ zur globalen Y-Achse, die gerade nach oben zeigt.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
local offsetCFrame = CFrame.new(0, 2, 0)
redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
Vorher
Nachher

Relative Rotation

Sie können CFrame:ToWorldSpace() auch verwenden, um ein Objekt relativ zu sich selbst zu rotieren. Im folgenden Beispiel dreht sich der redBlock-Teil um 70 Grad gegen den Uhrzeigersinn um seine Y-Achse und um 20 Grad im Uhrzeigersinn um seine Z-Achse.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local rotatedCFrame = CFrame.fromEulerAnglesXYZ(0, math.rad(70), math.rad(20))
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Vorher
Nachher

Eine bestimmte Fläche auf einen Punkt ausrichten

Sie können die Vorderseite eines Objekts auf ein anderes Objekt ausrichten, indem Sie einen Vector3-Punkt als zweiten Parameter von CFrame.new() angeben. Sie können auch relative Drehungen verwenden, um jede Fläche des Objekts auf einen Vector3-Punkt auszurichten. Im folgenden Beispiel werden zwei aufeinanderfolgende CFrame-Operationen durchgeführt:

  1. Die Vorderseite, markiert durch den weißen Kreis, auf das Ziel ausrichten.
  2. Das CFrame so rotieren, dass die Oberfläche, markiert durch den schwarzen Kreis, auf das Ziel zeigt.

local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
-- Die Vorderseite des roten Blocks auf den blauen Würfel ausrichten
redBlock.CFrame = CFrame.lookAt(redBlock.Position, blueCube.Position)
-- CFrame relativ zu sich selbst rotieren, sodass die Oberseite (nicht die Vorderseite) auf den blauen Würfel zeigt
local rotatedCFrame = CFrame.fromEulerAnglesXYZ(math.rad(-90), 0, 0)
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Vorher
Nachher

Einen Punkt zwischen Punkten finden

Sie können lineare Interpolation oder lerp verwenden, um ein CFrame zwischen zwei Punkten zu positionieren. Im folgenden Beispiel wird der redBlock-Teil zwischen den Teilen greenCube und cyanCube neu positioniert. Der Wert von 0.7 platziert ihn 70 % der Entfernung vom grünen Würfel entfernt.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local greenCube = Workspace.GreenCube
local cyanCube = Workspace.CyanCube
redBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)
Vorher
Nachher
©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.