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 Camera Objekt definiert eine Ansicht der 3D-Welt.In einer laufenden Erlebnishat jeder Client sein eigenes Camera Objekt, das sich in der lokalen Workspace des Clients befindet und über die Workspace.CurrentCamera Eigenschaftenzugänglich ist.

Die wichtigsten Kameraproperties sind:

  • CFrame , der die position und ausrichtung der kamera darstellt.

  • CameraType , das von den kameraskripten des erlebnisses gelesen wird und bestimmt, wie die kamera jeden frame aktualisieren soll.

  • CameraSubject , das von den kameraskripten des erlebnisses gelesen wird und bestimmt, welchem objekt die kamera folgen soll.

  • FieldOfView, das die sichtbare ausdehnung der beobachtbaren welt darstellt.

  • Focus, der den Punkt darstellt, auf den die Kamera schaut.Es ist wichtig, dass diese Eigenschaft festlegenist, da bestimmte Visualisierungen detaillierter sein werden und häufiger aktualisiert werden, je näher sie dem Fokuspunkt sind.

Siehe Anpassung der Kamera für weitere Informationen darüber, wie das Verhalten der Kamera angepasst und angepasst werden kann.

Mehrere Kameras speichern

Beachten Sie, dass wenn Sie Workspace.CurrentCamera zu einem neuen Camera ändern, alle anderen Cameras direkt von Workspace absteigen werden.Wenn Sie mehrere Kameras speichern und zwischen ihnen auf Abruf wechseln müssen, wird empfohlen, sie in einem Folder oder Model unter Workspace zu speichern, in dem sie auch bleiben, wenn CurrentCamera geändert wird.

Zusammenfassung

Eigenschaften

Eigenschaften von PVInstance übernommen

Methoden

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

    Gibt eine Reihe von , die die Sichtlinien zwischen der Kamera und den Gießpunkten verdunkeln.

  • Gibt die tatsächliche CFrame zurück, wo das Camera gerendert wird, wobei jede Rolle und der Einfluss von VR-Geräten berücksichtigt werden.

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

  • Parallel schreiben

    Erstellt eine Einheit Ray von einer Position auf dem Bildschirm (in Pixeln), mit einer festgelegten Tiefe von der Camera in Richtung der Kamera ausgerichtet.Konten für die GUI-Eingabe.

  • SetRoll(rollAngle : number):()

    Legt die aktuelle Rotation fest, die um die Z-Achse der Kamera herum angewendet wird.

  • Parallel schreiben

    Erstellt eine Einheit Ray von einer Position auf dem Ansichtsfenster (in Pixeln), mit einer bestimmten Tiefe vom Camera, die in Richtung der Kamera ausgerichtet ist.Berücksichtigt nicht die CoreUISafeInsets Einschüchterung.

  • Parallel schreiben

    Gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Grenzen des Bildschirms liegt zurück.Konten für die GUI-Eingabe.

  • Parallel schreiben

    Gibt die Bildschirmposition und Tiefe eines Datatype.Vector3``worldPoint und ob dieser Punkt innerhalb der Grenzen des Bildschirms liegt zurück.Berücksichtigt nicht die GUI-Eingabe.

  • ZoomToExtents(boundingBoxCFrame : CFrame,boundingBoxSize : Vector3):()
Methoden von PVInstance übernommen

Eigenschaften

CFrame

Parallel lesen

Diese Eigenschaft ist die CFrame des Camera, die ihre Position und Ausrichtung in der 3D-Welt definiert.Beachten Sie, dass einige Transformationen, wie die Rotation des Kopfes beim Verwenden von VR-Geräten, in dieser Eigenschaftennicht reflektiert werden, sodass Sie GetRenderCFrame() verwenden sollten, um die "echte" CFrame der Kamera zu erhalten.

Du kannst die Kamera verschieben, indem du diese Eigenschaftenfestlegst. Allerdings legen auch die Standard-Kamera-Skripte sie fest, also solltest du entweder:

  • Setze die Kamera CameraType auf Enum.CameraType.Scriptable, damit die Standard-Kamera-Skripte die Kamera nicht CFrame aktualisieren.Diese Methode ist am einfachsten und wird in den meisten Fällen empfohlen.

  • Ersetze die Standard-Kamerascripts vollständig durch Alternativen.Dieser Ansatz wird nur empfohlen, wenn du keine Standard-Kamerafunktionalität benötigst.

Die intuitivste Art und Weise, die Camera zu positionieren und auszurichten, besteht darin, den CFrame.lookAt() Konstruktor zu verwenden.Im folgenden Beispiel wird die Camera am Vector3.new(0, 10, 0) positioniert und ist darauf ausgerichtet, in Richtung Vector3.new(10, 0, 0) zu schauen.


local Workspace = game:GetService("Workspace")
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 wie oben dargestellt platziert werden kann, möchten Sie sie möglicherweise animieren, sich reibungslos von einer CFrame zur anderen zu bewegen.Dafür können Sie entweder:

  • Stelle die Position/Ausrichtung der Kamera jedes Frame mit RunService:BindToRenderStep() und der CFrame:Lerp() Methode ein.

  • Erstelle und spiele ein Tween, das die Position/Ausrichtung der Kamera animiert:


    local Players = game:GetService("Players")
    local TweenService = game:GetService("TweenService")
    local Workspace = game:GetService("Workspace")
    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 Standard-Kameraskripte reagieren unterschiedlich auf die verfügbaren Einstellungen:

  • Standardmäßig folgen die Kamerascripts dem Humanoid des lokalen Charakters und berücksichtigen den aktuellen Zustand des Humanoiden und Humanoid.CameraOffset .

  • Wenn es auf eine BasePart festgelegt ist, folgen die Kameraskripte ihrer Position, mit einem vertikalen Versatz im Fall von VehicleSeats .

CameraSubject kann nicht auf nil gesetzt werden. Wenn du es versuchst, wird es zu seinem vorherigen Wert zurückkehren.

Um CameraSubject auf ihren Standardwert zurückzusetzen, stellen Sie sie auf den lokalen Charakter Humanoid ein:


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

CameraType

Parallel lesen

Die Standard-Roblox-Kamerascripts haben mehrere integrierte Verhaltensweisen.Das Festlegen dieser Eigenschaft wechselt zwischen den verschiedenen Enum.CameraType Verhaltensweisen.Beachten Sie, dass einige Kameratypen eine gültige CameraSubject benötigen, um richtig zu funktionieren.

Die Standard-Kamera-Skripte bewegen oder aktualisieren die Kamera nicht, wenn CameraType auf Enum.CameraType.Scriptable gesetzt ist.Für weitere Informationen zur manuellen Ausrichtung und Orientierung der Kamera, siehe CFrame .

Für alle CameraType Einstellungen außer Enum.CameraType.Scriptable repräsentiert die CameraSubject Eigenschaft das Objekt, dessen Position die Kamera Focus festgelegt ist.

DiagonalFieldOfView

Nicht repliziert
Parallel lesen

Legt fest, wie viele Grad in der diagonalen Richtung (von einer Ecke des Ansichtsfensters zu seiner gegenüberliegenden Ecke) die Kamera sehen kann.Siehe FieldOfView für eine allgemeinere Erklärung des Sichtfelds.

Beachten Sie, dass DiagonalFieldOfView das Sichtfeld darstellt, das durch das Camera Rendern in den Vollbildbereich sichtbar ist, das bei einigen Geräten durch Notizen oder Bildschirmkürzungen verdeckt werden kann.Siehe ViewportSize für weitere Informationen.

FieldOfView

Parallel lesen

Die Eigenschaft FieldOfView (FOV) legt fest, wie viele Grad in der vertikalen Richtung die Kamera Ansichtkann.Diese Eigenschaft wird zwischen 1 und 120 Grad eingeschränkt und Standard bei 70 .Sehr niedrige oder sehr hohe Sichtfelder werden nicht empfohlen, da sie für Spieler verwirrend sein können.

Beachten Sie, dass die einheitliche Skalierung durchgesetzt wird, d. h. die vertikale und horizontale Sichtfeld immer durch die Aspektverhältnis des Bildschirms verbunden ist.

Vorgeschlagene Verwendungen für FieldOfView umfassen:

  • Reduzierung des FOV, um den Eindruck einer Vergrößerung zu geben, zum Beispiel beim Einsatz von Ferngläsern.
  • Erhöhte FOV, wenn der Spieler "sprintet", um den Eindruck eines Mangels an Kontrolle zu vermitteln.

Beachten Sie, dass FieldOfView das Sichtfeld darstellt, das durch das Camera Rendern in den Vollbildbereich sichtbar ist, das bei einigen Geräten durch Notizen oder Bildschirmkürzungen verdeckt werden kann.Siehe ViewportSize für weitere Informationen.

FieldOfViewMode

Parallel lesen

Die Kamera von FieldOfView (FOV) muss aktualisiert werden, um Änderungen ViewportSize zu widerspiegeln.Der Wert von FieldOfViewMode bestimmt, welcher FOV-Wert konstant gehalten wird.

Zum Beispiel wird diese Eigenschaft auf Enum.FieldOfViewMode.Vertical festgelegt, wenn die horizontale FOV aktualisiert wird, wenn der Ansichtsbereich vergrößert wird, aber die vertikale FOV konstant bleibt.Wenn diese Eigenschaft auf Enum.FieldOfViewMode.Diagonal gesetzt ist, können sowohl horizontale als auch vertikale FOV geändert werden, um die diagonale FOV konstant zu halten.

Focus

Parallel lesen

Bestimmte grafische Operationen, die die Engine ausführt, wie z. B. das Aktualisieren von Beleuchtung, können Zeit oder Berechnungsaufwand erfordern, um abgeschlossen zu werden.Die Eigenschaft der Kamera Focus sagt der Engine, welchen Bereich im 3D-Raum sie bei der Durchführung solcher Operationen priorisieren soll.Zum Beispiel kann dynamische Beleuchtung von Objekten wie PointLights nicht auf Entfernungen weit vom Fokus renderen.

Die Standard-Roblox-Kamerascripts setzen automatisch Focus zu Folge, um der CameraSubject (normalerweise ein Humanoid) zu folgen.Allerdings wird nicht automatisch aktualisiert, wenn auf oder wenn die Standard-Kameraskripte nicht verwendet werden.In diesen Fällen solltest du jeden Frame aktualisieren, indem du die Methode bei der Priorität verwendest.

Focus hat keine auswirkung auf die position oder ausrichtung der kamera; siehe CFrame für dieses.

HeadLocked

Parallel lesen

Schaltet um, ob die Kamera die Kopfbewegung eines Spielers automatisch mit einem VR-Gerät verfolgt.Wenn true (Standard), kombiniert die Engine CFrame mit dem Enum.UserCFrame des Kopfes des Benutzers, um die Ansicht des Spieler:inmit Kopfbewegungsverfolgung zu rendern, die mit einbezogen wird.Die Ansicht wird bei der folgenden CFrame gerendert:


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

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

  • Spieler können Bewegungsübelkeit erleiden, wenn keine gleichwertige Kopfverfolgungs-Lösung hinzugefügt wird.
  • Die Roblox-Engine führt Verzögerungsoptimierungen durch, wenn HeadLocked wahr ist.
Siehe auch

HeadScale

Parallel lesen

HeadScale ist die Skala der Perspektive des Benutzers auf die Welt beim Einsatz von VR.

Die Größe von 1 Stud in VR beträgt 0.3 meters / HeadScale, was bedeutet, dass größere HeadScale Werte der Welt vom Benutzer aus kleiner aussehen, wenn er VR-Geräte verwendet.Zum Beispiel scheint ein Teil, das 1 Stude hoch ist, 0,6 Meter hoch zu sein, für einen VR-Spieler mit einem HeadScale von 0.5.

Diese Eigenschaft wird automatisch von VRService.AutomaticScaling gesteuert, um die Perspektive des Spieler:inmit der Größe seines Avatars auszurichten.Wenn du Absicht hast, HeadScale dich selbst zu steuern oder benutzerdefinierte Zeichen zu verwenden, schalte VRService.AutomaticScaling auf Enum.VRScaling.Off um.

Diese Eigenschaft sollte nicht mit verwechselt werden, die einem übergeordnet ist, um seine Skalierung zu steuern.

MaxAxisFieldOfView

Nicht repliziert
Parallel lesen

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

Wenn die längste Achse die vertikale Achse ist, verhält sich diese Eigenschaft ähnlich wie die EigenschaftenFieldOfView.Dies ist in der Regel der Fall, wenn ein Gerät in einer Portrait-Ausrichtung ist.In einer Landschaftsorientierung wird die längste Achse die horizontale Achse sein; in diesem Fall beschreibt die Eigenschaft das horizontale Sichtfeld des Camera .

NearPlaneZ

Schreibgeschützt
Nicht repliziert
Parallel lesen

Die Eigenschaft NearPlaneZ beschreibt, wie weit der nahe Clipping-Plan der Kamera in Studs entfernt ist.Die nahe Clipping-Ebene ist eine geometrische Ebene, die vor der Kamera CFrame sitzt.Alles zwischen diesem Flugzeug und der Kamera wird nicht rendern, wodurch beim Anzeigen von Objekten auf sehr kurze Distanz eine Ausschnittsansicht erstellt wird.Der Wert von NearPlaneZ variiert je nach Plattform und ist derzeit immer zwischen -0.1 und -0.5 .

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

VRTiltAndRollEnabled

Parallel lesen

Diese Eigenschaft schaltet um, ob Tilt und Roll von der CFrame Eigenschaft angewendet werden, während der Spieler ein VR-Gerät verwendet.

Um Bewegungsübelkeit zu verhindern, sollte der Horizont Stufebleiben.Das Neigen und Rollen der Ansicht des Spieler:inwährend der Verwendung eines VR-Geräts kann zu einer Trennung zwischen dem physischen Raum des Spieler:inund dem virtuellen Raum führen, den er betrachtet.Die Änderung der offensichtlichen Richtung nach unten kann dazu führen, dass Spieler das Gleichgewicht verlieren oder Schwindel erleben.

Aus diesen Gründen ist es im Allgemeinen ratsam, diese Eigenschaft deaktiviert zu lassen, es sei denn, du hast deine Erfahrung ausgiebig für diese Effekte getestet.Selbst mit Neigung und Rollen aktiviert, möchten Sie vielleicht sicherstellen, dass der Spieler immer einen stabilen Bezugsfrahmen hat, wie zum Beispiel das Innere eines Fahrzeugs oder ein Boden, der dem Spieler helfen kann, sich in ihrem physischen Platzzu verankern.

ViewportSize

Schreibgeschützt
Nicht repliziert
Parallel lesen

ViewportSize gibt die Dimensionen des Gerät-Sicherheitsbereichs auf dem aktuellen Bildschirm zurück.Dieser Bereich ist ein Rechteck, das den Roblox-Topbar-Bereich enthält, aber keine Geräte-Notizen oder Bildschirm-Ausschnitte enthält.Die Einheiten von ViewportSize sind Roblox-UI-Versatz-Einheiten, die sich von nativen Display-Pixeln unterscheiden können.

Mobile device screen with cutout showing device safe area.

Wie oben erwähnt, ist ViewportSize nicht gleich der Vollbildgröße auf Displays mit Ausbrüchen oder Notizen.Um die volle Bildschirmgröße auf allen Displays zu erhalten, kannst du die AbsoluteSize Eigenschaft eines ScreenGui mit ScreenInsets auf None festlegen.Siehe Enum.ScreenInsets für weitere Informationen darüber, wie Bildschirmbereiche definiert sind.

Schließlich beachten Sie, dass ViewportSize nicht die tatsächliche Bildschirmgröße ist, die die Kamera für das Rendern verwendet (die Kamera rendert im Vollbildbereich).Außerdem basieren die Eigenschaften FieldOfView und DiagonalFieldOfView auf dem Vollbildbereich, nicht auf ViewportSize.

Kameraupdates

Nur das Camera, derzeit von Workspace.CurrentCamera erwähnt, hat seine ViewportSize während des Schritts PreRender aktualisiert.Die ViewportSize aller anderen Kameras in deiner Erfahrung wird nicht aktualisiert, einschließlich derjenigen, die für ViewportFrames verwendet werden.

Methoden

GetPartsObscuringTarget

Instances

Diese Methode gibt eine Matrix von BaseParts, die die Sichtlinien zwischen den CFrame und Vector3 Positionen der Kamera im castPoints -Array verschleiert.Jedes Instances in der ignoreList Matrix enthaltene Element wird ignoriert, zusammen mit seinen Nachkommen.

Der castPoints -Parameter wird als Array von Vector3 Positionen angegeben.Beachten Sie, dass die Array von BaseParts zurückgegeben wird, in einer beliebigen Reihenfolge und keine zusätzlichen Raycast-Daten bereitgestellt werden.Wenn Sie Daten wie Trefferposition, Treffermaterial oder Oberflächennormal benötigen, sollten Sie die WorldRoot:Raycast()-Methode wählen.


local Workspace = game:GetService("Workspace")
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 einen Cast-Punkt verschleiert, BaseParts wird der Cast-Punkt zwischen dem verschleierenden Terrain und dem Cast-Punkt nicht zurückgegeben.

Parameter

castPoints: Array

Ein Array von Vector3 Positionen von Cast-Punkten.

Standardwert: ""
ignoreList: Instances

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

Standardwert: ""

Rückgaben

Instances

Ein Array von BaseParts, das die Sichtlinien zwischen der Kamera von CFrame und der castPoints verschleiert.

GetRenderCFrame

Diese Methode gibt die tatsächliche CFrame des Camera als es gerendert wird, einschließlich der Auswirkung von VR (VR-Kopf-Transformierungen werden nicht auf die CFrame Eigenschaftenangewendet, so ist es die beste Praxis, GetRenderCFrame() zu verwenden, um die "echte" CFrame eines Spieler:inzu erhalten).

Zum Beispiel, wenn VR verwendet wird, wird die Camera tatsächlich beim folgenden CFrame gerendert:


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

Die Rendering der Kamera CFrame wird nur geändert, um den Kopf zu berücksichtigen, wenn die HeadLocked Eigenschaft wahr ist.


Rückgaben

Die CFrame die Camera wird gerendert.

GetRoll

Diese Methode gibt in Radianen die derzeit angewendete Rollen zurück, die auf die Camera mit SetRoll() angewendet werden.Roll wird definiert als Rotation um die Z-Achse der Kamera.

Diese Methode gibt nur Rollen zurück, die mit der Methode SetRoll() angewendet wurden.Roll manuell auf die Kamera angewendet wird nicht berücksichtigt CFrame .Um die tatsächliche Rolle der Camera zu erhalten, einschließlich der manuell angewendeten Rolle, kannst du den folgenden Snippet verwenden:


local Workspace = game:GetService("Workspace")
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 Rolle, die von SetRoll() angewendet wurde, in Radianen.

Code-Beispiele

This example, when used in a LocalScript, will retrieve the current roll of the camera in degrees. Then, if the camera roll angle is not 20 degrees, the camera roll angle is set to 20 degrees.

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 Methode erstellt eine Einheit Ray aus einer 2D-Position auf dem Bildschirm (in Pixeln definiert), die für den GUI-Eintrag verantwortlich ist.Die Ray stammt aus dem Vector3 Äquivalent der 2D-Position in der Welt auf der angegebenen Tiefe (in Stollen) weg von der Camera .

Da diese Methode die GUI-Eingabe bestätigt, wird der Abstand, der auf GUI-Elemente angewendet wird (z. B. von der oberen Leiste), berücksichtigt.Das bedeutet, dass die angegebene Bildschirmposition in der oberen linken Ecke unter der oberen Leiste beginnt.Für eine sonst identische Methode, die den GUI-Versatz nicht berücksichtigt, verwende ViewportPointToRay().

Da der Ray erstellte eine Einheitsstrahl ist, ist er nur eine Stunde lang. Um einen längeren Strahl zu erstellen, kannst du 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)

Diese Methode funktioniert nur für die aktuelle Workspace Kamera.Andere Kameras, wie diejenigen, die du für eine ViewportFrame erstellst, haben eine initiale Sichtfeldgröße von (1, 1) und werden nur aktualisiert, nachdem du sie auf Workspace.CurrentCamera gesetzt hast.Die Diskrepanz in der Ansichtsgröße veranlasst die Kamera, einen Strahl mit einer falschen Ray.Direction -Werte zurückzugeben.

Parameter

Die Position auf der X -Achse, in Pixeln, des Bildpunkts, von dem aus der Ray hervorgeht. Diese Position macht den GUI-Eintrag aus.

Standardwert: ""

Die Position auf der Y -Achse, in Pixeln, des Bildpunkts, von dem aus der Ray hervorgeht. Diese Position macht den GUI-Eintrag aus.

Standardwert: ""
depth: number

Die Tiefe von der Camera, in Stollen, von der die Herkunft des Ray ausgeglichen werden soll.

Standardwert: 0

Rückgaben

Eine Einheit Ray, die aus der entsprichtenden Vector3 Weltposition der angegebenen Bildkoordinaten auf der angegebenen Tiefe entsteht, weit weg von der Camera .Dieser Strahl ist in Richtung der Camera ausgerichtet.

SetRoll

()

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

Diese Methode legt die aktuelle Rolle, in Radien, des Camera fest.Die Rolle wird nach dem CFrame angewendet und repräsentiert die Rotation um die Z-Achse der Kamera.

Zum Beispiel würde das Folgende die Camera umkehren:


local Workspace = game:GetService("Workspace")
Workspace.CurrentCamera:SetRoll(math.pi) -- math.pi radians = 180 degrees

SetRoll hat keine Auswirkung auf eine Rolle, die mit der EigenschaftenCFrame angewendet wird.Rollen, die mit SetRoll angewendet werden, werden in der CFrame Eigenschaft nicht reflektiert, werden aber in der CFrame von GetRenderCFrame() zurückgegeben.

Diese Methode kann nur verwendet werden, wenn die CameraType auf Scriptable gesetzt ist, unabhängig davon, ob die Standard-Kamerascripts verwendet werden.Wenn es mit einer anderen CameraType verwendet wird, wird eine Warnung in der Ausgabe gegeben.

Jede Rolle, die mit dieser Methode angewendet wird, geht verloren, wenn die CameraType geändert wird von Scriptable.

Um das Rollenset mit dieser Methode zu erhalten, verwende GetRoll().

Da diese Methode veraltet ist, wird Ihnen empfohlen, stattdessen Roll auf die Camera Anwendung zu verwenden, indem Sie die CFrame Eigenschaft verwenden. Zum Beispiel:


local Workspace = game:GetService("Workspace")
local currentCFrame = Workspace.CurrentCamera.CFrame
local rollCFrame = CFrame.Angles(0, 0, roll)
Workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame

Parameter

rollAngle: number

Der Rollwinkel, in Radianen, der auf die Camera angewendet werden soll.

Standardwert: ""

Rückgaben

()

ViewportPointToRay

Parallel schreiben

Diese Methode erstellt eine Einheit Ray aus einer 2D-Position in Geräte-Sicherheits-Ansichtsfensterkoordinaten, die in Pixeln definiert sind.Der Strahl stammt vom Äquivalent der 2D-Position in der Welt in der angegebenen Tiefe (in Stollen) entfernt vom .

Wie unten illustriert, entspricht (0, 0) dem oberen linken Punkt der Roblox-Oberleiste.Das bedeutet, dass die Eingabe 2D-Position nicht berücksichtigt den CoreUISafeInsets Eintrag, aber sie berücksichtigt jeden DeviceSafeInsets .

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 Ansichtsfensterkoordinatensystem, während diese Methode das DeviceSafeInsets Ansichtsfensterkoordinatensystem verwendet).Wenn Sie die Position in den Kern-UI-Koordinaten spezifizieren möchten, verwenden Sie bitte ScreenPointToRay().

Beachten Sie auch, dass diese Methode nur für die Workspace.CurrentCamera Kamera funktioniert.Andere Kameras, wie diejenigen, die du für eine ViewportFrame erstellst, haben eine initiale Sichtfeldgröße von (1, 1) und werden nur aktualisiert, nachdem du sie auf CurrentCamera gesetzt hast.Die Diskrepanz in der Ansichtsgröße veranlasst die Kamera, einen Strahl mit einer falschen Ray.Direction zurückzugeben.

Diese Methode kann in Verbindung mit der Eigenschaft ViewportSize verwendet werden, um einen Strahl vom Zentrum des Bildschirms zu erstellen, zum Beispiel:


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

Da der Ray erstellte eine Einheitsstrahl ist, ist er nur eine Stunde lang. Um einen längeren Strahl zu erstellen, kannst du 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 Pixeln, des Ansichtspunkts, von dem aus der Ray hervorgebracht werden soll, in Gerät-sicheren Bereichskoordinaten.

Standardwert: ""

Die Position auf der Y -Achse, in Pixeln, des Ansichtspunkts, von dem aus der Ray hervorgebracht werden soll, in Gerät-sicheren Bereichskoordinaten.

Standardwert: ""
depth: number

Die Tiefe von der Camera, in Stollen, von der die Herkunft des Ray ausgeglichen werden soll.

Standardwert: 0

Rückgaben

Eine Einheit Ray, die von der entsprichtenden Vector3 Weltposition der angegebenen Ansichtskoordinaten auf der angegebenen Tiefe entfernt stammt vom Camera .Dieser Strahl ist in Richtung der Camera ausgerichtet.

WorldToScreenPoint

Parallel schreiben

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

Diese Methode berücksichtigt den aktuellen GUI-Eintrag, wie den Raum, den die oberste Leiste einnimmt, was bedeutet, dass die 2D-Position im selben Zeitraum wie GUI-Positionen zurückgegeben wird und verwendet werden kann, um GUI-Elemente zu platzieren.Für eine sonst identische Methode, die die GUI-Eingabe ignoriert, siehe WorldToViewportPoint() .


local Workspace = game:GetService("Workspace")
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 Methode keine Raycasting durchführt und die boolesche Angabe, ob worldPoint innerhalb der Grenzen des Bildschirms ist, unabhängig davon, ob der Punkt durch BaseParts oder Terrain verschleiert wird, wird true sein.

Parameter

worldPoint: Vector3

Die Vector3 Weltposition.

Standardwert: ""

Rückgaben

Eine Tupla, die enthält: in der Reihenfolge:

  • Ein Vector3, dessen X und Y Komponenten den Versatz des worldPoint aus der oberen linken Ecke des Bildschirms in Pixeln darstellenDie Vector3 Z -Komponente repräsentiert die Tiefe des worldPoint von der Bildschirm (in Stollen).

  • Ein boolescher Indikator, der anzeigt, ob der worldPoint innerhalb der Grenzen des Bildschirms ist.

WorldToViewportPoint

Parallel schreiben

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

Diese Methode berücksichtigt nicht die aktuelle GUI-Eingabe, wie den Raum, den die oberste Leiste einnimmt, was bedeutet, dass die 2D-Position aus dem oberen linken Eck des Ansichtsfensters entnommen wird.Es sei denn, du verwendest ScreenGui.IgnoreGuiInset, ist diese Position nicht geeignet, um GUI-Elemente zu platzieren.

Für eine sonst identische Methode, die für die GUI-Eingabe verantwortlich ist, siehe WorldToScreenPoint() .


local Workspace = game:GetService("Workspace")
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 Methode keine Raycasting durchführt und die boolesche Angabe, ob worldPoint innerhalb der Grenzen des Bildschirms ist, unabhängig davon, ob der Punkt durch BaseParts oder Terrain verschleiert wird, wird true sein.

Parameter

worldPoint: Vector3

Die Vector3 Weltposition.

Standardwert: ""

Rückgaben

Eine Tupla, die enthält: in der Reihenfolge:

  • Ein Vector3, dessen X und Y Komponenten den Versatz des worldPoint vom oberen linken Rand des Ansichtsfensters in Pixeln darstellenDie Vector3 Z -Komponente repräsentiert die Tiefe des worldPoint von der Bildschirm (in Stollen).

  • Ein boolescher Indikator, der anzeigt, ob der worldPoint innerhalb der Grenzen des Bildschirms ist.

ZoomToExtents

()

Parameter

boundingBoxCFrame: CFrame
Standardwert: ""
boundingBoxSize: Vector3
Standardwert: ""

Rückgaben

()

Ereignisse

InterpolationFinished

Dieses Ereignis wird ausgelöst, wenn das Camera die Interpolation mit der Methode Camera:Interpolate() abgeschlossen hat.Es wird nicht abfeuern, wenn ein Teenager wegen Camera:Interpolate() erneut aufgerufen wird, unterbrochen wird.

Es wird empfohlen, stattdessen TweenService zu verwenden, um die Camera zu animieren, da es zuverlässiger ist und mehr Optionen für das Lösen von Stilen bietet.