Camera
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
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
Das CFrame der Camera, das seine Position und Ausrichtung in der 3D-Welt definiert.
Gibt die Enum.CameraType an, die von der Kamera-Skripte gelesen werden soll.
Setzt den Winkel des vertikalen Feldes der Kamera.
Setzt den Winkel des vertikalen Feldes der Kamera.
Bestimmt den FOV-Wert der Camera, die unter der Ansichtsgrößenänderungen einheitlich ist.
Setzt das Gebiet im 3D-Raum, der von Roblox's grafischen Systemen priorisiert wird.
Schaltet ab, ob die Kamera automatisch die Kopf Bewegung eines Spielers mit einem VR Gerät verfolgt.
Setzt die Skala der Perspektive des Benutzers auf die Welt, wenn VR verwendet wird.
Setzt den Winkel des Sichtfeldes der Kamera entlang der längsten Ansichtsfenster-Achse.
Beschreibt den negativen Z -Versatz, in Studs, der Kamera in der Nähe des Schneidevlieses.
Schaltet ab, ob der Tilt und Roll von der Camera.CFrame Eigenschaft angewendet werden soll, während der Spieler ein VR-Gerät verwendet.
Die Dimensionen des Geräte-Tresorraums auf einem Roblox-Client.
Methoden
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() .
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.
Setzt die aktuelle Rotation, die um die Z-Achse der Kamera angewendet wird, ein.
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.
Gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Bildschirmgröße liegt. Rechnet den GUI-Einsatz ab.
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.
Ereignisse
Ausgelöst, wenn die Camera fertig mit Camera:Interpolate() interpoliert ist.
Eigenschaften
CFrame
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.CurrentCameracamera.CameraType = Enum.CameraType.Scriptablelocal 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.CurrentCameracamera.CameraType = Enum.CameraType.Scriptablelocal player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal pos = camera.CFrame * Vector3.new(0, 20, 0)local lookAtPos = character.PrimaryPart.Positionlocal targetCFrame = CFrame.lookAt(pos, lookAtPos)local tween = TweenService:Create(camera, TweenInfo.new(2), {CFrame = targetCFrame})tween:Play()
CameraSubject
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
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
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
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
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
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
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.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale-- Das wird Camera:GetRenderCFrame() ähnelnlocal 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
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
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
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
VRTiltAndRollEnabled
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
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
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
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.CurrentCameralocal 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
Ein Array von Instances , das ignoriert werden sollte, zusammen mit seinen Nachkommen.
Rückgaben
Ein Array von BaseParts, das die Sichtzeilen zwischen der Kamera Camera.CFrame und dem castPoints verbirgt.
Code-Beispiele
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.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScalerenderCFrame = camera.CFrame * headCFrame
Die Kamera rendert CFrame , wird nur für den Kopf geändert, wenn die Eigenschaft Camera.HeadLocked wahr ist.
Rückgaben
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
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
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.CurrentCameralocal length = 500local 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.
Rückgaben
SetRoll
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.CFramelocal rollCFrame = CFrame.Angles(0, 0, roll)workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame
Parameter
Rückgaben
ViewportPointToRay
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> .
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.CurrentCameralocal viewportPoint = camera.ViewportSize / 2local 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.CurrentCameralocal length = 500local 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.
Rückgaben
WorldToScreenPoint
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.CurrentCameralocal 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
Rückgaben
Ein Tupl, das in Ordnung enthält:
EinBoolean, der anzeigt, ob der worldPoint innerhalb der Grenzen des Bildschirms liegt.
WorldToViewportPoint
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.CurrentCameralocal 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
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.
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.