Camera

Veraltete anzeigen

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

Nicht repliziert

Das Kamera-Objekt definiert eine Ansicht der 3D-Welt. In einer laufenden Erlebnishat jeder Client seine eigene Kamera-Objekt, die in dem Client lokale Workspace aufruft, über die das Eigenschaft 2> Class.Arbeitsbereich.CurrentCamera2> zugänglich ist.

Die wichtigsten Kamera-Eigenschaften sind:

  • Camera.CFrame , die die Position und Ausrichtung der Kamera repräsentiert.

  • Camera.CameraType , was von den Kamera-Skripts der Erlebnisgelesen wird und bestimmt, wie die Kamera jeden Frame aktualisieren soll.

  • Camera.CameraSubject , das von den Erfahrungsskripten der Kamera gelesen wird und bestimmt, welches Objekt die Kamera folgen soll.

  • Camera.FieldOfView welcher den sichtbaren Umfang der beobachtbaren Welt repräsentiert.

  • Camera.Focus , die den Punkt darstellt, auf den die Kamera zielt. Es ist wichtig, dass diese Eigenschaft festlegenist, da bestimmte visuelle mehr Details enthalten und häufiger aktualisiert werden, abhängig davon, wie nah sie dem Fokuspunkt sind.

Siehe Anpassung der Kamera für weitere Informationen darüber, wie man das Verhalten der Kamera anpasst und anpasst.

Zusammenfassung

Eigenschaften

Methoden

  • GetPartsObscuringTarget(castPoints : Array,ignoreList : Instances):Instances

    Gibt eine Matrix von BaseParts zurück, die die Sichtzeilen zwischen der Kamera's Camera.CFrame und den Cast-Punkten verdecken.

  • Gibt die tatsächliche CFrame zurück, in der die Camera gerade gerendert wird, und berücksichtigt alle angewandten Rollen und die Wirkung von VR-Geräten.

  • Gibt in Radian die aktuelle Rolle oder Rotation um die Z-Achse der Kamera an, die auf die Camera angewendet wird, mit Camera:SetRoll() .

  • Parallel schreiben

    Erstellt eine Einheit Ray von einer Position auf dem Bildschirm (in Pixel), in einer bestimmten Tiefe von der Camera orientierten in der Kamerarichtung. Zählt für die GUI-Einsätze.

  • SetRoll(rollAngle : number):void

    Setzt die aktuelle Rotation, die um die Z-Achse der Kamera angewendet wird, ein.

  • Parallel schreiben

    Erstellt eine Einheit Ray von einer Position auf dem Ansichtsfenster (in Pixeln), von einer bestimmten Tiefe aus der Camera , in Richtung der Kamera ausgerichtet. Nimmt nicht den CoreUISafeInsets Inset in Ansicht.

  • Parallel schreiben

    Gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Bildschirmgröße liegt. Rechnet den GUI-Einsatz ab.

  • Parallel schreiben

    Gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Bildschirmgröße liegt. Nimmt nicht den GUI-Einsatz in Anspruch.

  • ZoomToExtents(boundingBoxCFrame : CFrame,boundingBoxSize : Vector3):void

Eigenschaften

CFrame

Parallel lesen

Dieses Eigenschaft ist das CFrame von der Camera, die seine Position und Ausrichtung in der 3D-Welt definiert. Beachten Sie, dass einige Transformationen, z. B. die Rotation des Kopfes bei der Verwendung von VR-Geräten, nicht in dieser Eigenschaftenreflektiert sind, so dass Sie <

Du kannst die Kamera bewegen, indem du diese Eigenschafteneinstellst. Die Standard-Kamera-Skripte stellen dies jedoch auch ein, du solltest also entweder:

  • Set the camera Camera.CameraType to Enum.CameraType.Scriptable so that the default camera scripts will not update the Kamera's CFrame. This method is simplest and recommended in most cases.

  • Ersetzen Sie die Standardkameraskripte vollständig durch Alternativen. Dieser Ansatz wird nur empfohlen, wenn Sie keine Standardkamerafunktionen benötigen.

Der beste intuitivste Weg, um die Position und Ausrichtung der Camera zu platzieren und auszurichten, ist, den CFrame.lookAt() -Builder zu verwenden. Im folgenden Beispiel ist die Camera an 2>Datatype.Vector3.new(0, 10,


local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
local pos = Vector3.new(0, 10, 0)
local lookAtPos = Vector3.new(10, 0, 0)
workspace.CurrentCamera.CFrame = CFrame.lookAt(pos, lookAtPos)

Obwohl die Kamera in der oben gezeigten Weise platziert werden kann, möchten Sie vielleicht animieren, um sie von einem CFrame zu einem anderen zu bewegen. Dafür können Sie entweder:

  • Setzen Sie die Position/Ausrichtung der Kamera jeden Frame mit RunService:BindToRenderStep() und der CFrame:Lerp() Methode.

  • Erstellen und spielen Sie ein Tween, das die Position/Ausrichtung der Kamera animiert:


    local Players = game:GetService("Players")
    local TweenService = game:GetService("TweenService")
    local camera = workspace.CurrentCamera
    camera.CameraType = Enum.CameraType.Scriptable
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local pos = camera.CFrame * Vector3.new(0, 20, 0)
    local lookAtPos = character.PrimaryPart.Position
    local targetCFrame = CFrame.lookAt(pos, lookAtPos)
    local tween = TweenService:Create(camera, TweenInfo.new(2), {CFrame = targetCFrame})
    tween:Play()

CameraSubject

Parallel lesen

CameraSubject akzeptiert eine Vielzahl von Instances . Die Standardkamera-Skripte reagieren auf die verfügbaren Einstellungen unterschiedlich:

  • Standardmäßig folgen die Kamera-Skripte der lokalen Figur Humanoid, indem sie den Zustand des Humanoids und Humanoid.CameraOffset berücksichtigen.

  • Wenn auf eine BasePart festgelegt, folgen die Kamera-Skripte seiner Position, mit einem vertikalen Offset in der Fall von VehicleSeats .

Kamerasubjekt kann nicht auf nil eingestellt werden. Wenn du versuchst, dies zu tun, wird es zu seinem früheren Wert zurückkehren.

Um CameraSubject an seinen Standardwert zurückzusetzen, setzen Sie es auf das lokale Charakter Humanoid :


local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
local function resetCameraSubject()
if workspace.CurrentCamera and localPlayer.Character then
local humanoid = localPlayer.Character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
workspace.CurrentCamera.CameraSubject = humanoid
end
end
end

CameraType

Parallel lesen

Die Standard-Roblox-Kamera-Skripte haben mehrere integrierte Verhaltensweisen. Wenn Sie diese Eigenschaft einstellen, wechseln sich die verschiedenen Enum.CameraType Verhaltensweisen. Beachten Sie, dass einige Kameratypen eine gültige Camera.CameraSubject benötigen, um richtig zu funktionieren.

Die Standardkamera-Skripte bewegen sich nicht oder aktualisieren die Kamera, wenn Kameratyp auf Enum.CameraType.Scriptable eingestellt ist. Weitere Informationen zum Positionieren und Ausrichten der Kamera manuell finden Sie unter Camera.CFrame.

Für alle KameraTyp -Einstellungen außer Enum.CameraType.Scriptable, repräsentiert die 1> Class.Camera.CameraSubject -Eigenschaft das Objekt, whose Position das Kamera-4> Class.Camera.Focus4> ist.

DiagonalFieldOfView

Nicht repliziert
Parallel lesen

Setzt, wie viele Grad in der diagonalen Richtung (von einem Ecke des Ansichtsfensters zum anderen) die Kamera anzeigen kann. Siehe FieldOfView für eine genauere Erklärung des Sichtfelds.

Beachten Sie, dass DiagonalFieldOfView das Sichtfeld darstellt, das durch die Camera -Renderung in den Vollbildbereich sichtbar ist, der durch Knöpfe oder Bildschneidungen auf einigen Geräten blockiert sein kann. Siehe Class. Camera.ViewportSize|ViewportSize für weitere Informationen.

FieldOfView

Parallel lesen

Die FieldOfView -Eigenschaft legt fest, wie viele Grad in vertikaler Richtung die Kamera Ansichtkann. Diese Eigenschaft wird zwischen 1 und 120 Grad geklemmt und standardmäßig auf 70 gesetzt. Sehr niedrige oder sehr hohe Feldbahnen sind nicht empfohlen, da sie Spieler verwirren können.

Beachten Sie, dass die uniforme Skalierung durchgesetzt wird, was bedeutet, dass das vertikale und horizontale Sichtfeld immer durch das Aspektverhältnis des Bildschirms zusammenhängt.

Vorgeschlagene Verwendung für FieldOfView (FOV) umfassen:

  • Reduzieren Sie die FOV, um die Vergrößerungseffekt zu geben, z. B. wenn Sie Binokulare verwenden.
  • Erhöhen Sie die FOV, wenn der Spieler "sprintet", um den Eindruck zu erhalten, dass keine Kontrolle vorhanden ist.

Beachten Sie, dass FieldOfView den Ansichtsbereich darstellt, der durch die Camera -Renderung in den Vollbildbereich, der durch Notches oder Bildschneidungen auf einigen Geräten occludes, sichtbar ist. Siehe Class.Camera. ViewportSize|ViewportSize für weitere Informationen.

FieldOfViewMode

Parallel lesen

Das Sichtfeld der Kamera (FOV) muss aktualisiert werden, um ViewportSize Änderungen zu반영. Der Wert von FieldOfViewMode bestimmt, welcher FOV-Wert konstant gehalten wird.

Zum Beispiel, wenn diese Eigenschaft auf Enum.FieldOfViewMode.Vertical eingestellt ist, wird die horizontale FOV aktualisiert, wenn der Ansichtsbereich skaliert wird, aber die vertikale FOV wird konstant gehalten. Wenn diese Eigenschaft auf Enum.FieldOfViewMode.Diagonal eingestellt ist, können sowohl die horizontale als auch die vertikale FOV geändert werden, um die vertikale FOV konstant zu halten.

Focus

Parallel lesen

Bestimmte grafischen Operationen, die der Engine ausführt, wie das Aktualisieren von Beleuchtung, können Zeit oder Berechnungsaufwand erfordern, um abzuschließen. Die Kamera's Fokus -Eigenschaft sagt dem Engine, welcher Bereich in 3D-Raumriorisiert wird, wenn solche Operationen ausgeführt werden. Zum Beispiel kann die dynamische Beleuchtung von Objekten wie PointLights nicht in der Ferne vom Fok

Die Standard-Roblox-Kamera-Skripte setzen automatisch Fokus

Fokus hat keinen Einfluss auf die Position oder Ausrichtung der Kamera; siehe Camera.CFrame für diesen Zweck.

HeadLocked

Parallel lesen

Schaltet ab, ob die Kamera automatisch die Kopf Bewegung eines Spielers mit einem VR Gerät verfolgt. Wenn true (Standard), der Engine kombiniert Camera.CFrame mit dem Enum.UserCFrame des Benutzers, um die Spieler:inmit der Kopf-Tracking-Funktion in Factoring einzurend


local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
-- Das wird Camera:GetRenderCFrame() ähneln
local renderCFrame = camera.CFrame * headCFrame

Es wird empfohlen, dieses Eigenschaft nicht zu deaktivieren aus folgenden Gründen:

  • Spieler können Bewegungskrankheit erleiden, wenn keine gleichwertige Kopfverfolgungs-Lösung hinzugefügt wird.
  • Die Roblox-Engine führt Latenz-Optimierungen aus, wenn KopfLocked wahr ist.

Siehe auch

  • VRService:GetUserCFrame() , der die CFrame des Kopfes erhalten kann.
  • VRService:RecenterUserHeadCFrame() wird verwendet, um den Kopf in die aktuelle Position und Ausrichtung des VR-Geräts zu verschieben.
  • Die Class.Camera:GetRenderCFrame() -Funktion, die das kombiniert Class.Camera.CFrame mit dem Datatype.CFrame des Benutzerkopfes zurückgibt.

HeadScale

Parallel lesen

HeadScale ist die Skalierung der Perspektive des Benutzers auf die Welt, wenn VR verwendet wird.

Die Größe von 1 Stud in VR ist 0.3 meters / HeadScale , was bedeutet, dass größere HeadScale- Werte in der Perspektive des Benutzers von der VR-Hardware aus kleiner aussehen, wenn sie mit VR-Geräten verwendet werden. Zum Beispiel erscheint ein Teil, der 1 Stud hoch ist, 0.6 Meter hoch zu sein, wenn Sie VR-Geräte mit einem Head

Dieses Eigenschaft wird automatisch von VRService.AutomaticScaling kontrolliert, um die Perspektive des Spieler:inmit der Größe seines Avatars auszurichten. Wenn Sie HeadScale selbst steuern oder benutzerdefinierte Charaktere verwenden, schalten Sie VRService.AutomaticScaling auf 2>Class.VRService.Auto

Diese Eigenschaft sollte nicht mit Humanoid.HeadScale verwechselt werden, die ein NumberValue ist, das an einen Humanoid gebunden ist, um seine Skalierung zu steuern.

MaxAxisFieldOfView

Nicht repliziert
Parallel lesen

Die MaxAxisFieldOfView Eigenschaft legt fest, wie viele Grad entlang der längsten Ansichtsfensterachse die Kamera anzeigen kann.

Wenn die längste Achse die vertikale Achse ist, wird sich dieses Verhalten ähnlich der FieldOfView Eigenschaftenverhalten. Dies ist in der Regel der Fall, wenn ein Gerät in einer Porträt-Orientalierung ist. In einer Landschaft-Orientalierung ist die längste Achse die horizontale Achse; in diesem Fall beschreibt die Eigenschaft die horizontale Sichtweite der Camera.

NearPlaneZ

Schreibgeschützt
Nicht repliziert
Parallel lesen

Die NearPlaneZ -Eigenschaft beschreibt, wie weit der Kamera-Near Clipping-Flugzeug entfernt ist, in Studs. Das Near Clipping-Flugzeug ist ein geometrisches Flugzeug, das vor der Kamera steht. Alles zwischen diesem Flugzeug und der Kamera wird nicht rendern, wodurch ein Cutaway-Ansicht beim Anzeigen von Objekten bei sehr kurzen

Diagram showing how the NearPlaneZ clips (does not render) 3D content between the plane and the camera.

VRTiltAndRollEnabled

Parallel lesen

Dieses Eigenschaftstool schaltet ab, ob der Tilt und Roll von der Camera.CFrame Eigenschaft verwendet wird, während der Spieler ein VR-Gerät verwendet.

Um Bewegungsickeln zu verhindern, sollte der Horizont auf der Stufebleiben. Wenn Sie den Spieler:inmit einem VR-Gerät anvisieren und seinen Ansichtsbereich drehen und drehen, kann dies zu einer Verbindung zwischen dem physischen Raum des Spieler:inund dem virtuellen Raum führen, den er anzeigt. Die Änderung der sichtbaren Richtung nach unten kann Spieler zum Verlieren des Gleichgewichts oder Erleiden von Schwindel führen.

Aus diesen Gründen ist es in der Regel ratsam, diese Eigenschaft zu deaktivieren, es sei denn, Sie haben Ihre Erfahrung für diese Effekte ausführlich getestet. Selbst mit der Verwendung von Tilt und Roll aktiviert, möchten Sie sicherstellen, dass der Spieler immer einen stabilen Verweisungsrahmen hat, z. B. die Innenausstattung eines Fahrzeugs oder ein Boden, der dem Spieler helfen kann, sich in ihrem physischen Platzzu begeben.

ViewportSize

Schreibgeschützt
Nicht repliziert
Parallel lesen

ViewportSize gibt die Dimensionen der Geräte-Sicherheitsbereich auf dem aktuellen Bildschirm zurück. Dieser Bereich ist ein Rechteck, das die Roblox-Top-Bar-Zone enthält, aber keine Geräte-Nischen oder Bildschirm-Cutouts enthält. Die Einheiten von ViewportSize sind Roblox-UI-Versatz-Einheiten, die von nat

Mobile device screen with cutout showing device safe area.

Wie oben erwähnt, ViewportSize ist nicht gleich der Größe des Vollbildbereichs auf Anzeigen mit Auschnitten oder Kerbverzahnungen. Um

Schließlich beachten Sie, dass ViewportSize nicht die tatsächliche Größe des Ansichtsfensters ist, die die Kamera für die Darstellung verwendet (die Kamera rendert in der vollständigen Bildschirmbereich). Darüber hinaus basieren die Camera.FieldOfView und Class.Camera.DiagonalFieldOfView</

Kamera-Updates

Nur die Camera , die derzeit von Class.Workspace. CurrentCamera verwendet wird, hat ihr ViewportSize aktualisiert, jedes Frame während der 1>Class.RunService.PreRender|PreRender1> -

Methoden

GetPartsObscuringTarget

Instances

Diese Methode gibt eine Reihe von BaseParts zurück, die die Sichtzeilen zwischen der Kamera's Camera.CFrame und Vector3 Positionen im 1> castPoints1>-Arrangement ignorieren. Alle 4>

Der castPoints -Parameter wird als Array von Vector3 Positionen gegeben. Beachten Sie, dass die Matrix der BaseParts zurückgegebene ist in einer beliebigen Reihenfolge und keine zusätzlichen Raycast-Daten bereitgestellt werden. Wenn Sie Daten wie Treffposition, Treffmaterial oder Oberflächennormal benötigen, soll


local camera = workspace.CurrentCamera
local castPoints = {
Vector3.new(0, 10, 0),
Vector3.new(0, 15, 0)
}
local ignoreList = {}
local partsObscuringTarget = camera:GetPartsObscuringTarget(castPoints, ignoreList)

Wenn Terrain ein Cast-Punkt verbergt, BaseParts den Cast-Punkt zwischen dem Verbergen Terrain und dem Cast-Punkt wird nicht zurückgegeben.

Parameter

castPoints: Array

Ein Array von Vector3 Positionen von Cast-Punkten.

ignoreList: Instances

Ein Array von Instances , das ignoriert werden sollte, zusammen mit seinen Nachkommen.


Rückgaben

Instances

Ein Array von BaseParts, das die Sichtzeilen zwischen der Kamera Camera.CFrame und dem castPoints verbirgt.

Code-Beispiele

X-Ray Function

local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local function XRay(castPoints, ignoreList)
ignoreList = ignoreList or {}
local parts = camera:GetPartsObscuringTarget(castPoints, ignoreList)
for _, part in parts do
part.LocalTransparencyModifier = 0.75
for _, child in pairs(part:GetChildren()) do
if child:IsA("Decal") or child:IsA("Texture") then
child.LocalTransparencyModifier = 0.75
end
end
end
end
XRay({ Vector3.new() })

GetRenderCFrame

Diese Funktion gibt die tatsächliche CFrame der Camera wieder, einschließlich der Wirkung von VR (VR-Kopf-Transformierungen werden nicht auf die Class.Camera.CFrameEigenschaftenangewendet, daher ist es die beste Praktik, 2>Class.Camera:GetRenderC

Zum Beispiel, wenn Sie VR verwenden, wird die Camera tatsächlich in der folgenden CFrame gerendert:


local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
renderCFrame = camera.CFrame * headCFrame

Die Kamera rendert CFrame , wird nur für den Kopf geändert, wenn die Eigenschaft Camera.HeadLocked wahr ist.


Rückgaben

Die CFrame wird gerade Camera gerendert.

GetRoll

Diese Funktion gibt in Radian die aktuell angewandte Rolle für die Camera mit Camera:SetRoll() zurück. Die Rolle wird alsRotation um die Z-Achse der Kamera definiert.

Diese Funktion gibt nur die von der Funktion Camera:SetRoll() angewandte Rolle zurück. Die von der Kamera manuell angewandte Rolle wird nicht berücksichtigt. Um die tatsächliche Rolle der Camera.CFrame , einschließlich der manuell angewandten Rolle, zu erhalten, können Sie das folgende Snippet verwenden:


local function getActualRoll()
local camera = workspace.CurrentCamera
local trueUp = Vector3.new(0, 1, 0)
local cameraUp = camera:GetRenderCFrame().upVector
return math.acos(trueUp:Dot(cameraUp))
end

Rückgaben

Die aktuelle Anwendung von Camera:SetRoll() , in Radian.

Code-Beispiele

Camera:GetRoll

local currentRoll = math.deg(workspace.CurrentCamera:GetRoll()) -- Gets the current roll of the camera in degrees.
if currentRoll ~= 20 then
workspace.CurrentCamera:SetRoll(math.rad(20)) -- If the camera isn't at 20 degrees roll, the roll is set to 20 degrees.
end

ScreenPointToRay

Parallel schreiben

Diese Funktion erstellt eine Einheit Ray aus einer 2D-Position auf dem Bildschirm (definiert in Pixel), die für die GUI-Einset verantwortlich ist. Die Ray stammt vom Vector3 der 2D-Position in der Welt in der angegebenen Tiefe (in Studs) ab vom 1>

Da diese Funktion die GUI-Einset anerkennt, wird der Offset, der auf GUI-Elemente angewendet wird (z. B. von der oberen Leiste), berücksichtigt. Dies bedeutet, dass die angegebene Bildschirmposition beginnen wird in der oberen linken Ecke des Bildschirms unter der oberen Bar. Für eine anderen identischen Funktion, die nicht den Versatzberücksichtigt, verwenden Sie Camera:ViewportPointToRay() .

Als das Ray erstellt ist, ist es ein Einheitsstrahl, der nur eine Länge von 1 Studs hat. Um einen längeren Strahl zu erstellen, können Sie gefolgte Profiletun:


local camera = workspace.CurrentCamera
local length = 500
local unitRay = camera:ScreenPointToRay(100, 100)
local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)

Diese Funktion gilt nur für die aktuelle Workspace-Kamera. Andere Kameras, wie die, die Sie für eine ViewportFrame erstellen, haben eine ursprüngliche Kameragröße von (1, 1) und werden nur aktualisiert, nachdem Sie sie auf Workspace.CurrentCamera festgelegt haben. Die Diskrepanz in

Parameter

Die Position in Pixel auf der X-Achse, von der der Bildpunkt, an dem die Ray entstehen soll, hergeleitet wird. Diese Position entspricht dem GUI-Einset.

Die Position auf der Y-Achse, in Pixel, des Bildpunkts, an dem der Ray entsteht. Diese Position berücksichtigt die GUI-Einsetzung.

depth: number

Die Tiefe aus der Camera , in Studs, von der abgezogen werden kann, um die Herkunft des Ray .

Standardwert: 0

Rückgaben

Eine Einheit Ray , die von der entsprechenden Vector3 Weltposition der angegebenen Bildschirmkoordinaten in der gegebenen Tiefe entsteht. Dieser Strahl ist in der Richtung der Camera .

SetRoll

void

Diese Funktion ist veraltet und wird nicht mehr als beste Praxis angesehen.

Diese Funktion setzt die aktuelle Rolle, in Radian, der Camera. Die Rolle wird nach dem Camera.CFrame angewendet und repräsentiert dieRotation um die Z-Achse der Kamera.

Zum Beispiel würde das Folgende das Camera umkehren:


workspace.CurrentCamera:SetRoll(math.pi) -- math.pi radians = 180 degrees

SetRoll hat keinen Effekt auf irgendeinen Roll, der mit der Camera.CFrame Eigenschaftenangewendet wird. Roll mit der Camera.CFrame Eigenschaft angewendet, wird nicht in der CFrame Eigenschaft reflektiert, sondern in der 1> Datatype.CFrame1> zurückgegeben, die von 4> Class.Camera:GetRenderCFrame()4> zurückge

Diese Funktion kann nur verwendet werden, wenn das Camera.CameraType auf 'Skriptbar' eingestellt ist, unabhängig davon, ob die Standardkameraskripte verwendet werden. Wenn es mit einem anderen Camera.CameraType verwendet wird, wird in der Ausgabe ein Warnung angezeigt.

Jede Anwendung, die mit dieser Funktion aufgewendet wird, wird verloren, wenn der Camera.CameraType geändert wird, von 'Skriptbar' .

Um das Rollset mit dieser Funktion zu erhalten, verwenden Sie Camera:GetRoll() .

Da diese Funktion veraltet ist, empfehlen wir Ihnen, stattdessen die Rolle auf der Camera anzuwenden, indem Sie die EigenschaftenCamera.CFrame verwenden. Zum Beispiel:


local currentCFrame = workspace.CurrentCamera.CFrame
local rollCFrame = CFrame.Angles(0, 0, roll)
workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame

Parameter

rollAngle: number

Der Rollwinkel, in Radian, zu Camera anzuwenden.


Rückgaben

void

ViewportPointToRay

Parallel schreiben

Diese Funktion erstellt eine Einheit Ray aus einer 2D-Position in der Geräte-Sichtweite, definiert in Pixel. Der Ray stammt aus dem Vector3 Equivalenz der 2D-Position in der Welt in der angegebenen Tiefe (in Studs) von der Camera .

Wie unten gezeigt, (0, 0) entspricht dem oberen linken Punkt der Roblox-Top-Bar. Dies bedeutet, dass die Eingabe 2D-Position nicht account for the Enums.ScreenInsets|CoreUISafeInsets inset, aber es account for any 1> Enums.ScreenInsets|DeviceSafeInsets1> .

Diagram showing the origin of the device safe area viewport coordinate system.

Beachten Sie, dass UI-Instanzen ein anderes Koordinatensystem verwenden ( GuiObject.AbsolutePosition verwendet das CoreUISafeInsets-Ansichtskoordinatensystem, während diese Funktion das DeviceSafeInsets -Ansichtskoordinatensystem

Beachten Sie auch, dass diese Funktion nur für die Class.Workspace. CurrentCamera Kamera funktioniert. Andere Kameras, wie diejenigen, die Sie für eine ViewportFrame erstellen, haben eine ursprüngliche Kameragröße von (1, 1) und werden

Diese Funktion kann in Kombination mit der ViewportSize Eigenschaft verwendet werden, um einen Strahl aus der Mitte des Bildschirms zu erstellen, z. B.:


local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local viewportPoint = camera.ViewportSize / 2
local unitRay = camera:ViewportPointToRay(viewportPoint.X, viewportPoint.Y, 0)

Als das Ray erstellt ist, ist es ein Einheitsstrahl, der nur eine Länge von 1 Studs hat. Um einen längeren Strahl zu erstellen, können Sie gefolgte Profiletun:


local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local length = 500
local unitRay = camera:ScreenPointToRay(100, 100)
local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)

Parameter

Die Position auf der X-Achse , in Pixel, des Ansichtspunkts, von dem der Ray hervorgeht, in Geräte-Sicherheitsbereich-Koordinaten.

Die Position auf der Y-Achse in Pixeln des Ansichtspunkts, von dem der Ray hervorgeht, in der Geräte-Sichertumszone.

depth: number

Die Tiefe aus der Camera , in Studs, von der abgezogen werden kann, um die Herkunft des Ray .

Standardwert: 0

Rückgaben

Eine Einheit Ray , die von der entsprechenden Position der Welt Vector3 der angegebenen Ansichtskoordinaten in der Entfernung von der Camera . Dieser Strahl ist in Richtung der 1> Class.Camera1> ausgerichtet.

WorldToScreenPoint

Parallel schreiben

Diese Funktion gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Grenzen des Bildschirms liegt zurück.

Diese Funktion berücksichtigt die aktuelle GUI-Einheit, wie die obere Leiste belegt, was bedeutet, dass die 2D-Position, die zurückgegebene wird, in demselben Termin wie die GUI-Positionen steht und verwendet werden kann, um GUI-Elemente zu platzieren. Für eine andere identische Funktion, die die GUI-Einheit ignoriert, siehe Camera:WorldToViewportPoint() .


local camera = workspace.CurrentCamera
local worldPoint = Vector3.new(0, 10, 0)
local vector, onScreen = camera:WorldToScreenPoint(worldPoint)
local screenPoint = Vector2.new(vector.X, vector.Y)
local depth = vector.Z

Beachten Sie, dass diese Funktion keinen Raycasting ausführt und dieBoolean, die anzeigt, ob worldPoint innerhalb der Grenzen des Bildschirms ist, wird true unabhängig davon, ob der Punkt von BaseParts oder 1> Class.Terrain1> bedeckt ist.

Parameter

worldPoint: Vector3

Die Vector3 Weltposition.


Rückgaben

Ein Tupl, das in Ordnung enthält:

  • Ein Vector3 , dessen X und Y-Komponenten den Offset des worldPoint aus der oberen linken Ecke des Bildschirms in Pixel repräsentieren. Der Vector31> Z-Komponente1> repräsentiert die Tiefe des 4> worldPoint4> aus der屏幕 (in Studs).

  • EinBoolean, der anzeigt, ob der worldPoint innerhalb der Grenzen des Bildschirms liegt.

WorldToViewportPoint

Parallel schreiben

Diese Funktion gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Grenzen des Bildschirms liegt zurück.

Diese Funktion berücksichtigt nicht die aktuelle GUI-Einblendung, wie die obere Leiste belegt, was bedeutet, dass die 2D-Position, die zurückgegebene wird, aus der oberen linken Ecke des Ansichtsfensters stammt. Es ist nicht geeignet, GUI-Elemente zu platzieren, wenn Sie nicht ScreenGui.IgnoreGuiInset verwenden.

Für eine andere identische Funktion, die den GUI-Einsatz abdeckt, siehe Camera:WorldToScreenPoint() .


local camera = workspace.CurrentCamera
local worldPoint = Vector3.new(0, 10, 0)
local vector, onScreen = camera:WorldToViewportPoint(worldPoint)
local viewportPoint = Vector2.new(vector.X, vector.Y)
local depth = vector.Z

Beachten Sie, dass diese Funktion keinen Raycasting ausführt und dieBoolean, die anzeigt, ob worldPoint innerhalb der Grenzen des Bildschirms ist, wird true unabhängig davon, ob der Punkt von BaseParts oder 1> Class.Terrain1> bedeckt ist.

Parameter

worldPoint: Vector3

Die Vector3 Weltposition.


Rückgaben

Ein Tupl, das in Ordnung enthält:

  • Ein Vector3 , dessen X und Y-Komponenten den Offset des 2>worldPoint2> aus der oberen linken Ecke des Ansichtsfensters, in Pixeln, repräsentieren. Der 5>Datatype.Vector35> 8>Z8>

  • EinBoolean, der anzeigt, ob der worldPoint innerhalb der Grenzen des Bildschirms liegt.

ZoomToExtents

void

Parameter

boundingBoxCFrame: CFrame
boundingBoxSize: Vector3

Rückgaben

void

Ereignisse

InterpolationFinished

Dieses Ereignis wird ausgelöst, wenn die Camera die Interpolation mit der Camera:Interpolate() Funktion abgeschlossen hat.

Dieses Ereignis wird nicht ausgelöst, wenn ein Tween aufgrund von Camera:Interpolate() erneut aufgerufen wird.

Du solltest TweenService verwenden, um die Camera stattdessen zu animieren, da sie zuverlässiger ist und mehr Optionen für Stil-Einführungen bietet.