Camera

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Bez replikacji

Obiekt Kamera określa widok na świat 3D. W bieżącym doświadczeniu każdy klient ma własny obiekt Kamera, który mieszka w lokalnym Workspace , do którego można uzyskać dostęp poprzez właściwość 2>Class.Workspace.CurrentCamera2>.

Najważniejsze właściwości kamery to:

  • Camera.CFrame , która представляет pozycję i orientację kamery.

  • Camera.CameraType , który jest czytany przez skrypciki kamery doświadczenia i określa, jak kamera powinna aktualizować każdą klatkę kamerą.

  • Camera.CameraSubject , który jest czytany przez skrypcje kamery doświadczenia i określa, któremu obiekt powinien obserwować.

  • Camera.FieldOfView która reprezentuje widoczną skalę świata.

  • Camera.Focus , która представляет punkt, na który kamerka patrzy. W重要ne jest ustawiaćtej właściwości, ponieważ niektóre wizualizacje będą bardziej szczegółowe i będą aktualizować się częściej w zależności od tego, jak blisko są one punktu fokusa.

Zobacz Dostosowywanie kamery po więcej informacji na temat tego, jak dostosować i dostosować zachowanie kamery.

Podsumowanie

Właściwości

  • Odczyt równoległy

    Datatype.CFrame Class.Camera , określając jego pozycję i orientację w świecie 3D.

  • Odczyt równoległy

    Class.Humanoid lub BasePart, które jest przedmiotem Camera.

  • Odczyt równoległy

    Określa Enum.CameraType , aby zostać przeczytany przez skrypty kamery.

  • Bez replikacji
    Odczyt równoległy

    Zdefiniowuje kąt pola widzenia kamery.

  • Odczyt równoległy

    Zdefiniowuje kąt pionowego pola widzenia kamery.

  • Określa wartość pola widzenia Camera, która jest niezależna od zmian rozmiaru okienka widoku.

  • Odczyt równoległy

    Ustawia obszar w przestrzeni 3D, który jest priorytetowany przez systemy graficzne Roblox.

  • Odczyt równoległy

    Przełącza czy kamera będzie automatycznie śledzić ruch głowy gracza za pomocą urządzenieVR.

  • Odczyt równoległy

    Ustawia skalę perspektywy użytkownika świata, gdy używasz VR.

  • Bez replikacji
    Odczyt równoległy

    Ustawia kąt pola widzenia kamery wzdłuż najdłuższego osi widoku.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje ujemny Z odchód, w studsach, od kamery w pobliżu kamery.

  • Odczyt równoległy

    Przełącza, czy należy stosować korytarz i kółko rolowe z właściwości Camera.CFrame, gdy gracz używa urządzenieVR.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Wymiary obszaru bezpieczeństwa urządzenia na klienta Roblox.

Metody

Właściwości

CFrame

Odczyt równoległy

Ta właściwość jest CFrame Class.Camera , określając jego pozycję i orientację w świecie 3D. Uwaga, że niektóre transformacje, takie jak obrót głowy przy użyciu urządzeń VR, nie są odzwierciedlone w tej właściwości, więc powin

Możesz poruszyć kamerę ustawiając tę właściwość. Domyślne wskrypty kamer również to ustawiają, więc powinieneś:

  • Ustaw kamerę Camera.CameraType na Enum.CameraType.Scriptable, aby domyślne skrypty kamer nie aktualizowały kamerki CFrame . Ta metoda jest najprostsza i zalecana w większości przypadków.

  • Całkowicie zastąp standardowe skrypty kamery alternatywami. Ten podejście jest rekomendowane tylko w przypadku, gdy nie potrzebujesz żadnej funkcjonalności kamery domyślnej.

Najbardziej intuicyjny sposób na umieszczenie i orientację Camera jest użyciem konstruktora CFrame.lookAt(). W następnym przykładzie Camera jest umieszczona w 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)

Chociaż kamera może być umieszczona w sposób pokazany powyżej, możesz również chcieć animować ją, aby płynnie przesuwała się z jednego CFrame do drugiego. Dla tego możesz:

  • Ustaw pozycję/orientację kamery w każdym kadrze z użyciem RunService:BindToRenderStep() i metodą CFrame:Lerp().

  • Utwórz i zagraj Tween, która animuje pozycję/orientację kamery:


    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

Odczyt równoległy

CameraSubject akceptuje różnorodne Instances . Domyślne skrypty kamer reagują różnie na dostępne ustawienia:

  • Domyślnie skrypty kamery podążają za lokalnym postacią Humanoid, uwzględniając stan bieżącego ludoidu i Humanoid.CameraOffset.

  • Gdy ustawiony na BasePart, skrypty kamery podążają za jego pozycją, z odległością wertykalną w przypadku VehicleSeats .

CameraSubject nie może być ustawiony na nil . Spróbuj użyć go, aby przenieść go do jego poprzedniej wartości.

Aby przywrócić CameraSubject do jego domyślnej wartości, ustaw go na lokalnym znaku znaku 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

Odczyt równoległy

Domyślne wbudowane skrypcje kamery Roblox mają kilka zintegrowanych zachowań. Ustawienie tego właściwości przełącza się między różnymi Enum.CameraType zachowaniami. Uwaga, że niektóre rodzaje kamery wymagają ważnego Camera.CameraSubject , aby prawidłowo działały.

Domyślne skrypty kamery nie będą przesuwać lub aktualizować kamery, jeśli KameraTypu ustawiono na Enum.CameraType.Scriptable. Dla więcej informacji o pozycjonowaniu i orientacji kamery ręcznie, zobacz Camera.CFrame .

Dla wszystkich ustawień CameraType z wyjątkiem Class.Camera.CameraSubject|CameraSubject , właściwość Enum.CameraType.Scriptable reprezentuje obiekt, który ma pozycję, którą ustawiono 1> Class.Camera.Focus1> .

DiagonalFieldOfView

Bez replikacji
Odczyt równoległy

Ustawia, ile stopni w kierunku poziomym (z jednego kąta widoku do jego przeciwnego kąta) może widzieć kamera. Zobacz FieldOfView dla bardziej ogólnej wyjaśnienia pola widzenia.

Uwaga, że DiagonalFieldOfView reprezentuje pole widzenia, które jest widoczne dla renderowania Camera na pełnowidokowym obszarze, który może być zaciemiony przez narożniki lub cięcia na niektórych urządzeniach. Zobacz Class. Camera.ViewportSize|ViewportSize dla więcej informacji.

FieldOfView

Odczyt równoległy

Właściwość FieldOfView ustawia, ile stopni w kierunku pionowym kamerę może wyświetlić. Ta właściwość jest skręcona między 1 a 120 stopni i domyślnie jest ustawiona na 70. Bardzo niskie lub bardzo wysokie pola widzenia nie są rekomendowane, ponieważ mogą one być odblaskujące dla graczy.

Uwaga, że skalowanie uniforme jest wymuszone, co oznacza, że wysokie i poziome pole widzenia zawsze są powiązane przez proporcje aspektu ekranu.

Zalecane użycia dla Pole widzenia (FOV) obejmują:

  • Redukcja FOV, aby dać wrażenie powiększenia, na przykład gdy używasz binaurów.
  • Zwiększanie FOV, gdy gracz jest "biegnący", aby dać wrażenie braku kontroli.

Uwaga, że FieldOfView reprezentuje pola widzenia, które są widoczne dla renderowania Camera na obszarze pełnoekranowym, który może być zaciemiony przez narożniki lub cięcia na niektórych urządzeniach. Zobacz Class.Camera. ViewportSize|ViewportSize dla więcej informacji.

FieldOfViewMode

Odczyt równoległy

Pole widzenia kamery (FOV) musi zostać zaktualizowane, aby odzwierciedlić zmiany ViewportSize. Wartość FieldOfViewMode określa, która wartość FOV zostanie utrzymana konstytucyjnie.

Na przykład, gdy ta właściwość jest ustawiona na Enum.FieldOfViewMode.Vertical, wysokość pola widzenia jest aktualizowana, gdy wysokość pola widzenia jest zmieniana, ale wysokość pola widzenia jest utrzymywana konstytucyjna. Jeśli ta właściwość jest ustawiona na Enum.FieldOfViewMode.Diagonal, zarówno wysokość pola widzenia, jak i wysokość pol

Focus

Odczyt równoległy

Niektóre graficzne operacje wykonuje silnik, takie jak aktualizacja oświetlenia, może to zająć czas lub wysiłek kalkulacyjny do zakończenia. Właściwość Fokus kamery mówi silnikowi, która obszar w przestrzeni 3D będzie priorytetować podczas wykonywania takich operacji. Na przykład, dynamiczne oświetlenie z obiektów takich jak

Domyślne skrypty kamery Roblox automatycznie ustawiają Fokus

Focus nie ma wpływu na pozycję lub orientację kamery; zobacz Camera.CFrame dla tego.

HeadLocked

Odczyt równoległy

Przełącza czy kamera będzie automatycznie śledzić ruch głowy gracza za pomocą urządzenieVR. Gdy true (domyślnie), silnik łączy Camera.CFrame z Enum.UserCFrame głowy użytkownika, aby renderować widok gracza z użyciem


local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
-- Będzie to równoznaczne z Camera:GetRenderCFrame()
local renderCFrame = camera.CFrame * headCFrame

Rekomendujemy użyć nie włączać tej właściwości z następującego powodu:

  • Gracze mogą doświadczyć choroby ruchowej, jeśli nie dodano równivalentnej śledzenia głowy.
  • Silnik Roblox wykonuje optymalizacje czasu opóźnienia, gdy Zablokowano głowę jest prawdą.

Zobacz również

HeadScale

Odczyt równoległy

HeadScale to skala perspektywy użytkownika świata, gdy używasz VR.

Rozmiar 1 stud w VR wynosi 0.3 meters / HeadScale, co oznacza, że większe wartości HeadScale odpowiadają światu, wydając się mniejsze z punktu widzenia użytkownika, gdy używasz urządzeń VR. Na przykład, część o wysokości 1 metra wygląda na 0,6 metra dla gracza VR z roz

Właściwość ta jest automatycznie kontrolowana przez VRService.AutomaticScaling, aby dostosować perspektywę gracza do rozmiarów jego awatara. Jeśli chcesz kontrolować HeadScale sam lub używać niestandardowych postaci, przełącz VRService.AutomaticScaling na 2>Enum.VRScaling.Off2>.

Ta właściwość nie powinna być mylona z Humanoid.HeadScale, które jest NumberValue rodzicem do Humanoid do kontroli jego skalowania.

MaxAxisFieldOfView

Bez replikacji
Odczyt równoległy

Właściwość MaxAxisFieldOfView ustawia, ile stopni wzdłuż najdłuższego osi widoku kamerze można widzieć.

Gdy najdłuższy osi jest osią wertykalną, ta właściwość zachowa się podobnie do właściwości FieldOfView. Jest to ogólnie w przypadku, gdy urządzenie jest w orientacji portretowej. W orientacji krajobrazowej najdłuższy osi będzie osią wertykalną; w tym przypadku właściwość opisuje poziom poziomu widzenia poziomu

NearPlaneZ

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość NearPlaneZ opisuje, jak daleko jest kamera w pobliżu samolotu, w studs. W pobliżu samolotu jest samolot, który jest samolotem geometrycznym, który siedzi przed kameryjnym Camera.CFrame . Cokolwiek między tym samolotem a kamera

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

VRTiltAndRollEnabled

Odczyt równoległy

Ta właściwość przełącza się, czy należy stosować nachylenie i role z właściwości Camera.CFrame podczas gdy gracz używa urządzenieVR.

Aby zapobiec chorobie ruchowej, horyzont powinien pozostać poziomy. Używanie VR urządzenia do obrócenia i zatrzymania widoku gracza może powodować rozłąkę między fizyczną przestrzenią gracza a wirtualną przestrzenią, którą widzą. Zmiana widocznego kierunku w dół może powodować, że gracze tracą równowagę lub doświadczają bólu głowy.

Z tych powodów ogólnie rzecz biorąc należy tą właściwość wyłączyć, chyba że masz w pełni przetestowaną swoją wrażliwość dla tych efektów. Nawet z włączoną opcją nachylenia i roleowania możesz chcieć upewnić się, że gracz zawsze ma stabilny ramek referencji, tak jak wnętrze pojazdu lub podłoga, która może pomóc graczowi w ich przestrzeni fizycznej.

ViewportSize

Tylko do odczytu
Bez replikacji
Odczyt równoległy

ViewportSize wraca rozmiary obszaru bezpieczeństwa urządzenia na bieżązym ekranie. Ta obszar jest prostopadłościem, który obejmuje obszar Roblox Top Bar, ale nie zawiera żadnych urazów lub cięć ekranu. Jedyne jednostki Class.Camera.ViewportSize|ViewportSize są jednostkami przecięcia Roblo

Mobile device screen with cutout showing device safe area.

Jak wskazano powyżej, ViewportSize nie jest równy rozmiarze obszaru ekranu z cięciami lub ozdobami. Aby uzys

Wreszcie, zauważ, że ViewportSize to nie jest rzeczywista wielkość ekranu, którą kamera używa do renderowania (kamera renderuje w obszarze ekranu w pełnym obszarze). A także właściwości Camera.FieldOfView i

Aktualizacje kamery

Tylko Camera aktualnie określony przez Class.Workspace. CurrentCamera ma swoją ViewportSize zaktualizowaną w każdym klatku klatki podczas kroku 2>Class

Metody

GetPartsObscuringTarget

Instances

Ten metod returnuje BaseParts, które są nieprzezroczyste linie wzroku między Camera.CFrame i Vector3 pozycjami w 1> castPoints1> массиwie. Każde 4> Class.Instance

Parametr castPoints jest podany jako maszyna Vector3 pozycji. Uwaga, że maszyna BaseParts zwracająca wynik jest w dowolnym porządku i nie zostanie dostarczony dodatkowy danych raycast. Jeśli potrzebujesz danych, takich jak pozycja trafienia, mater


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

Jeśli Terrain zasłania punkt odczytu, BaseParts zasłania punkt odczytu pomiędzy zasłaniem Terrain i zasłaniem nie zostanie zwrócone.

Parametry

castPoints: Array

Materiały pozycji Vector3 pozycji rzęsów.

ignoreList: Instances

Materiały Instances, które należy ignorować, wraz z ich potomstwem.


Zwroty

Instances

Materiały BaseParts, które zaciemniają linie wzroku między kameryjnym Camera.CFrame a castPoints.

Przykłady kodu

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

Funkcja ta zwraca aktualny CFrame Class.Camera jako renderowany, w tym wpływ VR (VR head transformations nie są zastosowane do właściwości Camera, więc najlepiej jest używać Camera.CFrame, aby

Na przykład, gdy używasz VR, Camera jest w rzeczywistości renderowana na następującym CFrame :


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

Render kamery CFrame będzie zmieniony tylko do ujęcia głowy, gdy właściwość Camera.HeadLocked jest prawdziwa.


Zwroty

Datatype.CFrameCamera jest renderowana.

GetRoll

Funkcja ta zwraca, w radianach, obecną rolę zastosowaną do Camera używając Camera:SetRoll() . Roll jest zdefiniowany jako obroty wokół Z-osi kamery.

Funkcja ta tylko zwraca zrolowanie zastosowane przy użyciu funkcji Camera:SetRoll(). Roll ręcznie zastosowany do Camera.CFrame nie jest brany pod uwagę. Aby uzyskać rzeczywisty roll Class.Camera , w tym ręcznie zastosowany, można użyć następującego kawałka kodu:


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

Zwroty

Obecny roll zastosowany przez Camera:SetRoll() , w radiansach.

Przykłady kodu

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

Zapis równoległy

Funkcja ta tworzy Ray z pozycji 2D na ekranie (zdefiniowane w pikselach), odpowiadając za insercję GUI. Ray pochodzi z równowartości Vector3 ze znanej głębokości (w studs) od 2> Class.Camera2>.

Ponieważ ta funkcja uznaje wkład GUI, to odchód zastosowany do elementów GUI (takich jak z górnej paski) jest uwzględniony. Oznacza to, że pozycja ekranu określona jest w lewym górnym rogu poniżej górnej barwy. Dla innych identycznych funkcji, które nie uwzględniają odchętu GUI, użyj Camera:ViewportPointToRay() .

Jako że stworzony jest Ray jednostkowy promień, jest tylko jeden metr długości. Aby stworzyć dłuższy promień, możesz zrobić obserwuje:


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

Funkcja ta działa tylko dla obecnej kamery Workspace. Inne kamery, takie jak te, które tworzysz dla ViewportFrame, mają początkowy rozmiar widoku (1, 1) i są aktualizowane tylko po ustawieniu ich na Workspace.CurrentCamera . Rozbieżność w rozmiarze

Parametry

Pozycja na osi X, w pikselach, punktu ekranu, z którego pochodzi Ray. Ta pozycja stanowi wkład w wstawkę GUI.

Pozycja na osi Y, w pikselach, punktu ekranu, z którego pochodzi Ray. Ta pozycja stanowi wkład w wstawkę GUI.

depth: number

Głębokość z Camera , w studs, z której można odejść od źródła Ray .

Wartość domyślna: 0

Zwroty

Jednostka Ray, pochodząca z równivalentnej pozycji świata Vector3 w danej głębi od danej głębi od danej głębi Camera. Ten promień jest skierowany w kierunku 1> Class.Camera1>.

SetRoll

void

Ta funkcja jest przestarzała i nie jest już uważana za najlepszych praktyk.

Funkcja ta ustawia obecną rolę, w radianach, Camera . Rola jest zastosowana po Camera.CFrame i reprezentuje rotację wokół osi Z kamerze.

Na przykład, następujące przeciwdziałałoby Camera :


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

SetRoll nie ma wpływu na dowolny roll zastosowany przy użyciu właściwości Camera.CFrame. Roll zastosowany przy użyciu właściwości SetRoll nie jest odzwierciedlony w właściwości Camera.CFrame, ale jest odzwierciedlony w właściwości CFrame, zwracanej przez 2> Class.Camera:GetRenderCFrame()2>.

Funkcja ta może być używana tylko wtedy, gdy Camera.CameraType ustawiony na 'Skryptable', niezależnie od tego, czy używane są domyślne skrypty kamery. Jeśli jest używany z jakimkolwiek innym Camera.CameraType to ostrzeżenie jest wyświetlone w wyjściu.

Każdy zrolowany przy użyciu tej funkcji zostanie stracony, gdy Camera.CameraType zostanie zmieniony z 'Skryptable' .

Aby uzyskać zestaw rol za pomocą tej funkcji użyj Camera:GetRoll() .

Ponieważ ta funkcja jest przestarzała, zaleca się zastosować rolę do Camera przy użyciu właściwości Camera.CFrame. Na przykład:


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

Parametry

rollAngle: number

Kąt obrotowy, w radianach, do zastosowania na Camera.


Zwroty

void

ViewportPointToRay

Zapis równoległy

Funkcja ta tworzy jednostkę Ray z pozycji 2D w oknie bezpieczeństwa urządzenia, zdefiniowanej w pikselach. Ray pochodzi z źródła Vector3 równivalentnego dla 2D pozycji w świecie w dystansie (w studs) od Camera.

Jak pokazano poniżej, (0, 0) odpowiada na lewą górną część górnej listy Roblox. Oznacza to, że pozycja 2D wejścia nie ma sie żadnego CoreUISafeInsets w osi, ale ma 1>sie1> każdego 4>

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

Uwaga: instancje UI używają innego systemu koordynacji ( GuiObject.AbsolutePosition używa systemu koordynacji CoreUISafeInsets podczas gdy funkcja ta używa systemu koordynacji DeviceSafeInsets . Jeśli chcesz określi

Uwaga: Ta funkcja działa tylko dla kamerki Class.Workspace. CurrentCamera. Inne kamerki, takie jak te, które tworzysz dla ViewportFrame, mają początkową wielkość widoku (1, 1) i są aktualizow

Funkcja ta może być używana wraz z właściwością ViewportSize, aby stworzyć promień z centrum ekranu, na przykład:


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

Jako że stworzony jest Ray jednostkowy promień, jest tylko jeden metr długości. Aby stworzyć dłuższy promień, możesz zrobić obserwuje:


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)

Parametry

Pozycja na osi X w pikselach punktu widzenia, z którego pochodzi Ray, w kodach bezpieczeństwa urządzenia.

Pozycja na osi Y w pikselach punktu widzenia, z którego pochodzi Ray, w kodach bezpieczeństwa urządzenia.

depth: number

Głębokość z Camera , w studs, z której można odejść od źródła Ray .

Wartość domyślna: 0

Zwroty

Jednostka Ray, pochodząca z równivalentnej pozycji świata Vector3 w danej pozycji koordynatów widoku w odległości Camera . Ten promień jest skierowany w kierunku 1> Class.Camera1>.

WorldToScreenPoint

Zapis równoległy

Funkcja ta zwraca lokalizację ekranu i głębokość Datatype.Vector3``worldPoint i czy ten punkt jest w obszarze ekranu.

Ta funkcja uwzględnia obecny wstawiony GUI, takich jak przestrzeń zajęta przez górną barę, co oznacza, że zwracany pozycja 2D jest w tym samym terminie co pozycje GUI i może być używany do umieszczenia elementów GUI. Dla innych identycznych funkcji, które ignorują GUI wставiony, zobacz 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

Uwaga funkcja ta nie wykonuje żadnego raycastingu i zmiana zmiennej worldPoint w granicach ekranu będzie true niezależnie od tego, czy punkt jest zaciemiony przez BaseParts lub 1> Class.Terrain1>.

Parametry

worldPoint: Vector3

Lokalizacja świata Vector3 w kodzie.


Zwroty

Zestaw, który zawiera, w porządku:

  • A Vector3 Które X i Y komponenty reprezentują odległość od worldPoint z lewego gónego rogu ekranu, w pikselach. Komponent Vector31> Z1> komponent representuje głębokość 4> worldPoint4> z ekranu (w studs).

  • Boolean wskazujący, czy worldPoint jest w obszarze ekranu.

WorldToViewportPoint

Zapis równoległy

Funkcja ta zwraca lokalizację ekranu i głębokość Datatype.Vector3``worldPoint i czy ten punkt jest w obszarze ekranu.

Ta funkcja nie uwzględnia obecnego wstawu GUI, takiego jak przestrzeń zajęta przez górną barę, co oznacza, że powrótowane pozycje 2D są z lewego górnego rogu widoku. Chyba że używasz ScreenGui.IgnoreGuiInset, ta pozycja nie jest odpowiednia do umieszczenia elementów GUI.

Dla innej identycznej funkcji, która odpowiada za GUI wstawiony, zobacz 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

Uwaga funkcja ta nie wykonuje żadnego raycastingu i zmiana zmiennej worldPoint w granicach ekranu będzie true niezależnie od tego, czy punkt jest zaciemiony przez BaseParts lub 1> Class.Terrain1>.

Parametry

worldPoint: Vector3

Lokalizacja świata Vector3 w kodzie.


Zwroty

Zestaw, który zawiera, w porządku:

  • A Vector3 Które X i Y składniki reprezentują przesunięcie 1> worldPoint1> z lewego góżdżu widoku, w pikselach. Komponent 4> Datatype.Vector34> 7> Z7> komponent

  • Boolean wskazujący, czy worldPoint jest w obszarze ekranu.

ZoomToExtents

void

Parametry

boundingBoxCFrame: CFrame
boundingBoxSize: Vector3

Zwroty

void

Zdarzenia

InterpolationFinished

Ten wąż pojawia się, gdy Camera ukończył interpolację używając funkcji Camera:Interpolate().

To wydarzenie nie zostanie wywołane, jeśli przerwa tween z powodu Camera:Interpolate() ponownie zostanie wezwany.

Zaleca się używać TweenService do animacji Camera zamiast tego, ponieważ jest bardziej wiarygodny i oferuje więcej opcji do łatwiejszego stylu.