Camera

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No replicado

El objeto Camera define una vista del mundo 3D.En una experiencia en ejecución, cada cliente tiene su propio objeto Camera que reside en el local del cliente Workspace , accesible a través de la propiedad Workspace.CurrentCamera.

Las propiedades de cámara más importantes son:

  • CFrame que representa la posición y orientación de la cámara.

  • CameraType que es leído por los scripts de la cámara de la experiencia y determina cómo debe actualizar la cámara cada marco.

  • CameraSubject que es leído por los scripts de la cámara de la experiencia y determina qué objeto debe seguir la cámara.

  • FieldOfView que representa el alcance visible del mundo observable.

  • Focus que representa el punto al que la cámara está mirando.Es importante que esta propiedad esté establecer, ya que ciertas visuales serán más detalladas y se actualizarán con más frecuencia dependiendo de cuán cerca estén del punto de enfoque.

Vea Personalización de la cámara para obtener más información sobre cómo ajustar y personalizar el comportamiento de la cámara.

Almacenar múltiples cámaras

Tenga en cuenta que al cambiar Workspace.CurrentCamera a un nuevo Camera , todos los demás Cameras descenderán directamente de Workspace .Si necesita almacenar múltiples cámaras y cambiar entre ellas bajo demanda, se recomienda que las almacene en un Folder o Model dentro de Workspace, dentro del cual permanecerán incluso cuando se cambie CurrentCamera.

Resumen

Propiedades

Propiedades heredados de PVInstance

Métodos

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

    Devuelve un array de que están ocultando las líneas de visión entre los puntos de lanzamiento de la cámara y los puntos de lanzamiento.

  • Devuelve el actual CFrame donde se está renderizando el Camera, que cuenta con cualquier roll aplicado y el impacto de los dispositivos VR.

  • Devuelve en radianes el giro actual, o la rotación alrededor del eje Z de la cámara, aplicado al Camera usando SetRoll() .

  • Escribir paralelo

    Crea una unidad Ray desde una posición en la pantalla (en píxeles), a una profundidad determinada desde el Camera orientado en la dirección de la cámara.Cuentas para la inserción de la interfaz gráfica.

  • SetRoll(rollAngle : number):()

    Establece la rotación actual aplicada alrededor del eje Z de la cámara.

  • Escribir paralelo

    Crea una unidad Ray desde una posición en la ventana de visualización (en píxeles), a una profundidad dada desde el Camera , orientada en la dirección de la cámara.No tiene en cuenta el inserto CoreUISafeInsets .

  • Escribir paralelo

    Devuelve la ubicación y profundidad de una pantalla Datatype.Vector3``worldPoint y si este punto está dentro de los límites de la pantalla.Cuentas para la inserción de la interfaz gráfica.

  • Escribir paralelo

    Devuelve la ubicación y profundidad de una pantalla Datatype.Vector3``worldPoint y si este punto está dentro de los límites de la pantalla.No tiene en cuenta la inserción de la interfaz gráfica.

  • ZoomToExtents(boundingBoxCFrame : CFrame,boundingBoxSize : Vector3):()
Métodos heredados de PVInstance

Propiedades

CFrame

Leer paralelo

Esta propiedad es la CFrame de la Camera, que define su posición y orientación en el mundo 3D.Tenga en cuenta que algunas transformaciones, como la rotación de la cabeza al usar dispositivos VR, no se reflejan en esta propiedad, por lo que debe usar GetRenderCFrame() para obtener el "verdadero" CFrame de la cámara.

Puedes mover la cámara estableciendo esta propiedad. Sin embargo, los scripts de cámara predeterminados también lo establecen, por lo que deberías:

  • Configura la cámara para que los guiones de cámara predeterminados no actualicen el de la cámara.Este método es más simple y se recomienda en la mayoría de los casos.

  • Reemplazar completamente los scripts de la cámara predeterminada con alternativas.Este enfoque solo se recomienda si no necesita ninguna funcionalidad de cámara predeterminada.

La manera más intuitiva de posicionar y orientar el Camera es usando el constructor CFrame.lookAt().En el siguiente ejemplo, el Camera está posicionado en Vector3.new(0, 10, 0) y está orientado a mirar hacia Vector3.new(10, 0, 0) .


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)

Aunque la cámara se puede colocar de la manera demostrada anteriormente, es posible que desees animarla a moverse suavemente de una a otra.Para esto, puedes elegir:

  • Establece la posición/orientación de la cámara en cada marco con RunService:BindToRenderStep() y el método CFrame:Lerp().

  • Crea y reproduce un Tween que anime la posición/orientación de la cámara:


    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

Leer paralelo

CameraSubject acepta una variedad de Instances . Los scripts de cámara predeterminados responden de manera diferente a las configuraciones disponibles:

  • Por defecto, los scripts de la cámara siguen el estado actual del personaje local y del humanoide.

  • Cuando se establece en un BasePart, los scripts de la cámara siguen su posición, con un desplazamiento vertical en el caso de VehicleSeats .

CameraSubject no se puede configurar como nil. Al intentar hacerlo se revertirá a su valor anterior.

Para restaurar CameraSubject a su valor predeterminado, establecerlo al valor del personaje local Humanoid :


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

Leer paralelo

Los scripts de cámara predeterminados de Roblox tienen varios comportamientos integrados.Establecer esta propiedad alterna entre los diversos comportamientos Enum.CameraType.Tenga en cuenta que algunos tipos de cámara requieren un válido CameraSubject para funcionar correctamente.

Los scripts de cámara predeterminados no se moverán o actualizarán la cámara si CameraType está configurado como Enum.CameraType.Scriptable.Para obtener más información sobre la colocación y orientación de la cámara manualmente, consulte CFrame .

Para todas las configuraciones settings excepto , la propiedad representa el objeto cuya posición la cámara está configurada para.

DiagonalFieldOfView

No replicado
Leer paralelo

Establece cuántos grados en la dirección diagonal (desde un lado de la ventana al ángulo opuesto) puede vistala cámara.Vea FieldOfView para una explicación más general del campo de vista.

Tenga en cuenta que DiagonalFieldOfView representa el campo de visión que es visible por el renderizado de Camera en el área completa de la pantalla que puede ser oculta por notas o recortes de pantalla en algunos dispositivos.Vea ViewportSize para más información.

FieldOfView

Leer paralelo

La propiedad FieldOfView establece cuántos grados en la dirección vertical puede vistala cámara.Esta propiedad está restringida entre 1 y 120 grados y predeterminada en 70 .Los campos de visión muy bajos o muy altos no se recomiendan ya que pueden ser desorientadores para los jugadores.

Tenga en cuenta que se aplica la escala uniforme, lo que significa que el campo de visión vertical y horizontal siempre está relacionado con la relación de aspecto de la pantalla.

Los usos recomendados para FieldOfView incluyen:

  • Reducir el FOV para dar la impresión de magnificación, por ejemplo, al usar binoculares.
  • Aumentar el FOV cuando el jugador está "corriendo" para dar la impresión de una falta de control.

Tenga en cuenta que FieldOfView representa el campo de visión que es visible por el renderizado de Camera en el área completa de la pantalla que puede ser oculta por notas o recortes de pantalla en algunos dispositivos.Vea ViewportSize para más información.

FieldOfViewMode

Leer paralelo

La cámara de FieldOfView (FOV) debe actualizarse para reflejar ViewportSize cambios.El valor de FieldOfViewMode determina qué valor de FOV se mantendrá constante.

Por ejemplo, cuando esta propiedad se establece en Enum.FieldOfViewMode.Vertical, el campo de visión horizontal se actualiza cuando el tamaño de la ventana cambia, pero el campo de visión vertical se mantiene constante.Si esta propiedad se establece en Enum.FieldOfViewMode.Diagonal, tanto el campo de visión horizontal como vertical podría cambiarse para mantener el campo de visión diagonal constante.

Focus

Leer paralelo

Ciertas operaciones gráficas que realiza el motor, como actualizar iluminación, pueden tomar tiempo o esfuerzo de cálculo para completarse.La propiedad Focus de la cámara le dice al motor qué área en el espacio 3D priorizar al realizar tales operaciones.Por ejemplo, la iluminación dinámica de objetos como PointLights puede no renderizarse a distancias lejanas del enfoque.

Los scripts de cámara predeterminados de Roblox configuran automáticamente Focus para seguir el CameraSubject (normalmente un Humanoid ).Sin embargo, no se actualizará automáticamente cuando esté configurado como o cuando los scripts de cámara predeterminados no se estén utilizando.En estos casos, deberías actualizar Focus cada marco, usando el método RunService:BindToRenderStep() en la prioridad Enum.RenderPriority.Camera.

Focus no tiene nada que ver con la posición o orientación de la cámara; véase CFrame para esto.

HeadLocked

Leer paralelo

Alterna si la cámara rastreará automáticamente el movimiento de la cabeza de un jugador usando un dispositivo VR.Cuando true (por defecto), el motor combina CFrame con el Enum.UserCFrame de la cabeza del usuario para renderizar la vista del jugador con seguimiento de cabeza factoreado.La vista se renderizará en el siguiente CFrame :


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
-- Esto será equivalente a Camera:GetRenderCFrame()
local renderCFrame = camera.CFrame * headCFrame

Se recomienda no desactivar esta propiedad por las siguientes razones:

  • Los jugadores pueden experimentar mareo si no se agrega una solución de seguimiento de cabeza equivalente.
  • El motor de Roblox realiza optimizaciones de latencia cuando HeadLocked es verdadero.
Ver también

HeadScale

Leer paralelo

HeadScale es la escala de la perspectiva del usuario del mundo al usar VR.

El tamaño de 1 stud en VR es 0.3 meters / HeadScale , lo que significa que los valores más grandes de HeadScale se equivalen al mundo que parece más pequeño desde la perspectiva del usuario al usar dispositivos VR.Por ejemplo, una parte que es 1 estudio alto parece ser de 0,6 metros de altura para un jugador VR con un HeadScale de 0.5 .

Esta propiedad se controla automáticamente por VRService.AutomaticScaling para alinear la perspectiva del jugador con el tamaño de su avatar.Si tienes la intención de controlar HeadScale a ti mismo o usar caracteres personalizados, alterna VRService.AutomaticScaling a Enum.VRScaling.Off .

Esta propiedad no debe confundirse con Humanoid.HeadScale que es un padre NumberValue a un Humanoid para controlar su escalado.

MaxAxisFieldOfView

No replicado
Leer paralelo

La propiedad MaxAxisFieldOfView establece cuántos grados a lo largo del eje de visión más largo la cámara puede vista.

Cuando el eje más largo es el eje vertical, esta propiedad se comportará de manera similar a la propiedad FieldOfView.Este es generalmente el caso cuando un dispositivo está en una orientación de retrato.En una orientación de paisaje, el eje más largo será el eje horizontal; en este caso, la propiedad describe el campo de visión horizontal del Camera .

NearPlaneZ

Solo lectura
No replicado
Leer paralelo

La propiedad NearPlaneZ describe qué tan lejos está el plano de recorte cerca de la cámara, en studs.El avión de recorte cercano es un avión geométrico que se sienta delante del CFrame de la cámara.Cualquier cosa entre este avión y la cámara no se Renderizar, creando una vista de recorte al ver objetos a distancias muy cortas.El valor de NearPlaneZ varía entre diferentes plataformas y actualmente siempre está entre -0.1 y -0.5.

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

VRTiltAndRollEnabled

Leer paralelo

Esta propiedad alterna si se aplica inclinación y giro desde la propiedad CFrame mientras el jugador está usando un dispositivo VR.

Para evitar el mareo por movimiento, el horizonte debe permanecer nivelado.Inclinar y hacer girar la vista del jugador mientras usa un dispositivo VR puede causar una desconexión entre el espacio físico del jugador y el espacio virtual que está viendo.Cambiar la dirección aparente hacia abajo puede causar que los jugadores pierdan el equilibrio o experimenten mareos.

Por estas razones, generalmente es recomendable dejar esta propiedad deshabilitada, a menos que hayas probado extensamente tu experiencia para estos efectos.Incluso con la inclinación y la rotación habilitadas, es posible que desees asegurarte de que el jugador siempre tenga un marco de referencia estable, como el interior de un vehículo o un suelo que pueda ayudar al jugador a aterrizar en su espacio físico.

ViewportSize

Solo lectura
No replicado
Leer paralelo

ViewportSize devuelve las dimensiones de la zona segura del dispositivo en la pantalla actual.Esta área es un rectángulo que incluye el área de la barra superior de Roblox, pero no incluye ningún espacio para dispositivos o recortes de pantalla.Las unidades de ViewportSize son unidades de desplazamiento de la interfaz de usuario de Roblox que pueden ser diferentes de los píxeles de visualización nativos.

Mobile device screen with cutout showing device safe area.

Como se observó anteriormente, ViewportSize no es igual al tamaño de la zona de la pantalla completa en los displays con cortes o ranuras.Para obtener el tamaño del área de pantalla completa en todos los displays, puedes consultar la propiedad AbsoluteSize de un ScreenGui con ScreenInsets establecido a None .Vea Enum.ScreenInsets para obtener más información sobre cómo se definen las áreas de la pantalla.

Por último, tenga en cuenta que ViewportSize no es el tamaño de ventana real que usa la cámara para renderizar (la cámara se renderiza en el área de pantalla completa).Además, las propiedades FieldOfView y DiagonalFieldOfView se basan en el área de pantalla completa, no en ViewportSize.

Actualizaciones de la cámara

Solo el Camera actualmente referido por Workspace.CurrentCamera tiene su ViewportSize actualizado en cada marco durante el paso PreRender.El ViewportSize de todas las otras cámaras en tu experiencia no se actualizará, incluidas las utilizadas para ViewportFrames.

Métodos

GetPartsObscuringTarget

Instances

Este método devuelve un array de BaseParts que están ocultando las líneas de visión entre las posiciones CFrame y Vector3 de la cámara en el matriz/listacastPoints.Cualquier Instances incluido en el array ignoreList se ignorará, junto con sus descendientes.

El parámetro castPoints se da como un array de Vector3 posiciones.Tenga en cuenta que el array de BaseParts devuelto está en un orden arbitrario, y no se proporciona ningún dato adicional de raycast.Si necesita datos como la posición de golpe, el material de golpe o la normalidad de la superficie, debería optar por el método WorldRoot:Raycast().


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)

Si oscurece un punto de lanzamiento, oscureciendo el punto de lanzamiento entre el punto de lanzamiento oscuro y el punto de lanzamiento no se devolverá.

Parámetros

castPoints: Array

Un array de Vector3 posiciones de puntos de lanzamiento.

Valor predeterminado: ""
ignoreList: Instances

Un array de Instances que debe ignorarse, junto con sus descendientes.

Valor predeterminado: ""

Devuelve

Instances

Un array de BaseParts que oscurece las líneas de visión entre la cámara de CFrame y la de castPoints.

GetRenderCFrame

Este método devuelve el actual CFrame de la Camera como se muestra, incluyendo el impacto de VR (las transformaciones de cabeza de VR no se aplican a la propiedad CFrame , por lo que es mejor práctica usar GetRenderCFrame() para obtener el "verdadero" CFrame de la vista de un jugador).

Por ejemplo, al usar VR, el Camera se renderiza en realidad en el siguiente CFrame :


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

El renderizado de la cámara CFrame solo se cambiará para tener en cuenta la cabeza cuando la propiedad HeadLocked sea verdadera.


Devuelve

El CFrame el Camera se está renderizando en.

GetRoll

Este método devuelve, en radianes, el rollo actual aplicado al Camera usando SetRoll() .Roll se define como rotación alrededor del eje Z de la cámara.

Este método solo devuelve el rollo aplicado usando el método SetRoll().El giro manual aplicado a la cámara CFrame no se tiene en cuenta.Para obtener el rollo actual del Camera , incluido el rollo aplicado manualmente, puedes usar el siguiente fragmento:


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

Devuelve

El rodillo actual aplicado por SetRoll() , en radianes.

Muestras de código

Este ejemplo, cuando se utiliza en un LocalScript, recuperará el rollo actual de la cámara en grados.Entonces, si el ángulo de giro de la cámara no es de 20 grados, el ángulo de giro de la cámara se establece en 20 grados.

Cámara:GetRoll

local currentRoll = math.deg(workspace.CurrentCamera:GetRoll()) -- Obtiene el rollo actual de la cámara en grados.
if currentRoll ~= 20 then
workspace.CurrentCamera:SetRoll(math.rad(20)) -- Si la cámara no está a 20 grados de rotación, la rotación se establece en 20 grados.
end

ScreenPointToRay

Escribir paralelo

Este método crea una unidad Ray desde una posición de 2D en la pantalla (definida en píxeles), que cubre la inserción de la interfaz gráfica.El Ray proviene del Vector3 equivalente de la posición 2D en el mundo a la profundidad dada (en studs) lejos del Camera .

Como este método reconoce el inserto de la interfaz gráfica, se tiene en cuenta el desplazamiento aplicado a los elementos de la interfaz gráfica (como desde la barra superior).Esto significa que la posición de la pantalla especificada comenzará en la esquina superior izquierda debajo de la barra superior.Para un método idéntico de otro modo que no tenga en cuenta el desplazamiento de la interfaz gráfica, use ViewportPointToRay() .

Como el Ray creado es un rayo de unidad, solo tiene una longitud de perno. Para crear un rayo más largo, puedes hacer lo siguiendo:


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)

Este método solo funciona para la cámara actual Workspace.Otras cámaras, como las que creas para un ViewportFrame , tienen un tamaño de ventana inicial de (1, 1) y solo se actualizan después de que las configures a Workspace.CurrentCamera .La desigualdad en el tamaño de la ventana hace que la cámara devuelva un rayo con un error Ray.Direction .

Parámetros

La posición en el eje X , en píxeles, del punto de la pantalla en el que originar el Ray. Esta posición representa el inserto de la interfaz gráfica.

Valor predeterminado: ""

La posición en el eje Y de la pantalla, en píxeles, del punto de la pantalla en el que se origina el Ray. Esta posición representa el inserto de la interfaz gráfica.

Valor predeterminado: ""
depth: number

La profundidad desde el Camera , en studs, desde la cual desviar el origen del Ray .

Valor predeterminado: 0

Devuelve

Una unidad Ray , que proviene de la posición mundial equivalente Vector3 de las coordenadas de la pantalla dada a una profundidad dada lejos de la Camera .Este rayo está orientado en la dirección del Camera .

SetRoll

()

Este método está obsoleto y ya no se considera mejor práctica.

Este método establece el rollo actual, en radianes, del Camera .El rodillo se aplica después del CFrame y representa la rotación alrededor del eje Z de la cámara.

Por ejemplo, lo siguiente invertiría el Camera :


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

SetRoll no tiene efecto en cualquier roll aplicado usando la propiedad CFrame.El rodillo aplicado usando SetRoll no se refleja en la propiedad CFrame sino que se refleja en el CFrame devuelto por GetRenderCFrame() .

Este método solo se puede usar cuando el CameraType está configurado como Scriptable, independientemente de si se están utilizando los scripts de cámara predeterminados.Si se usa con cualquier otro CameraType se da una advertencia en la Salida.

Cualquier rollo aplicado usando este método se perderá cuando el CameraType se cambie de Scriptable.

Para obtener el conjunto de roles usando este método, use GetRoll() .

Como este método está obsoleto, se le aconseja aplicar roll a la Camera en lugar de usar la propiedad CFrame. Por ejemplo:


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

Parámetros

rollAngle: number

El ángulo de giro, en radianes, para aplicar al Camera .

Valor predeterminado: ""

Devuelve

()

ViewportPointToRay

Escribir paralelo

Este método crea una unidad Ray desde una posición de 2D en las coordenadas de vista segura del dispositivo, definidas en píxeles.El rayo se origina en el equivalente de la posición 2D en el mundo a la profundidad dada (en studs) lejos del .

Como se ilustra a continuación, (0, 0) se corresponde con el punto superior izquierdo de la barra superior de Roblox.Esto significa que la posición de entrada de 2D no hace no cuenta por el CoreUISafeInsets inserto, pero sí cubre cualquier DeviceSafeInsets.

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

Tenga en cuenta que las instancias de interfaz de usuario usan un sistema de coordenadas diferente ( usa el sistema de coordenadas de la ventana mientras que este método usa el sistema de coordenadas de la ventana).Si desea especificar la posición en las coordenadas de la interfaz de usuario principal, utilice ScreenPointToRay() .

Tenga en cuenta también que este método solo funciona para la cámara Workspace.CurrentCamera .Otras cámaras, como las que creas para un ViewportFrame , tienen un tamaño de ventana inicial de (1, 1) y solo se actualizan después de que las configures a CurrentCamera .La desigualdad en el tamaño de la ventana hace que la cámara devuelva un rayo con un error Ray.Direction .

Este método se puede utilizar en conjunción con la propiedad ViewportSize para crear un rayo desde el centro de la pantalla, por ejemplo:


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

Como el Ray creado es un rayo de unidad, solo tiene una longitud de perno. Para crear un rayo más largo, puedes hacer lo siguiendo:


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)

Parámetros

La posición en el eje X , en píxeles, del punto de vista en el que originar el Ray, en coordenadas de área segura del dispositivo.

Valor predeterminado: ""

La posición en el eje Y de la posición, en píxeles, del punto de vista en el que originar el Ray, en coordenadas de área segura del dispositivo.

Valor predeterminado: ""
depth: number

La profundidad desde el Camera , en studs, desde la cual desviar el origen del Ray .

Valor predeterminado: 0

Devuelve

Una unidad Ray , que proviene de la posición mundial equivalente Vector3 de la coordenada de visor dada a una profundidad dada lejos del Camera .Este rayo está orientado en la dirección del Camera .

WorldToScreenPoint

Escribir paralelo

Este método devuelve la ubicación y profundidad de la pantalla de un Datatype.Vector3``worldPoint y si este punto está dentro de las dimensiones de la pantalla.

Este método tiene en cuenta la inserción de la interfaz de usuario actual, como el espacio ocupado por la barra superior, lo que significa que la posición 2D devuelta está en el mismo término que las posiciones de la interfaz de usuario y se puede utilizar para colocar elementos de interfaz de usuario.Para un método idéntico de otro modo que ignore la inserción de la interfaz gráfica, vea 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

Tenga en cuenta que este método no realiza ningún lanzamiento de rayos y el booleano que indica si worldPoint está dentro de los límites de la pantalla será true independientemente de si el punto está oculto por BaseParts o Terrain .

Parámetros

worldPoint: Vector3

La posición mundial Vector3 .

Valor predeterminado: ""

Devuelve

Un túnel que contiene, en orden:

  • Un Vector3 cuyos componentes X y Y representan el desplazamiento del worldPoint desde la esquina superior izquierda de la pantalla, en píxeles.El componente Vector3 Z representa la profundidad del worldPoint desde la pantalla (en studs).

  • Un booleano que indica si el worldPoint está dentro de los límites de la pantalla.

WorldToViewportPoint

Escribir paralelo

Este método devuelve la ubicación y profundidad de la pantalla de un Datatype.Vector3``worldPoint y si este punto está dentro de las dimensiones de la pantalla.

Este método no tiene en cuenta la inserción de la interfaz de usuario actual, como el espacio ocupado por la barra superior, lo que significa que la posición 2D devuelta se toma desde la esquina superior izquierda de la ventanilla.A menos que estés usando ScreenGui.IgnoreGuiInset, esta posición no es apropiada para colocar elementos de interfaz gráfica.

Para un método idéntico de otro modo que cubra la inserción de la interfaz gráfica, vea 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

Tenga en cuenta que este método no realiza ningún lanzamiento de rayos y el booleano que indica si worldPoint está dentro de los límites de la pantalla será true independientemente de si el punto está oculto por BaseParts o Terrain .

Parámetros

worldPoint: Vector3

La posición mundial Vector3 .

Valor predeterminado: ""

Devuelve

Un túnel que contiene, en orden:

  • Un Vector3 cuyos componentes X y Y representan el desplazamiento de la worldPoint desde la esquina superior izquierda de la ventanilla, en píxeles.El componente Vector3 Z representa la profundidad del worldPoint desde la pantalla (en studs).

  • Un booleano que indica si el worldPoint está dentro de los límites de la pantalla.

ZoomToExtents

()

Parámetros

boundingBoxCFrame: CFrame
Valor predeterminado: ""
boundingBoxSize: Vector3
Valor predeterminado: ""

Devuelve

()

Eventos

InterpolationFinished

Este evento se activa cuando el Camera ha terminado de interpolar usando el método Camera:Interpolate().No disparará si un preadolescente se interrumpe debido a que se llame de nuevo Camera:Interpolate().

Se le aconseja usar TweenService para animar el Camera en lugar, ya que es más confiable y proporciona más opciones para aliviar los estilos.