Camera
*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.
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
Datatype.CFrame Class.Camera , określając jego pozycję i orientację w świecie 3D.
Określa Enum.CameraType , aby zostać przeczytany przez skrypty kamery.
Zdefiniowuje kąt pola widzenia kamery.
Zdefiniowuje kąt pionowego pola widzenia kamery.
Określa wartość pola widzenia Camera, która jest niezależna od zmian rozmiaru okienka widoku.
Ustawia obszar w przestrzeni 3D, który jest priorytetowany przez systemy graficzne Roblox.
Przełącza czy kamera będzie automatycznie śledzić ruch głowy gracza za pomocą urządzenieVR.
Ustawia skalę perspektywy użytkownika świata, gdy używasz VR.
Ustawia kąt pola widzenia kamery wzdłuż najdłuższego osi widoku.
Opisuje ujemny Z odchód, w studsach, od kamery w pobliżu kamery.
Przełącza, czy należy stosować korytarz i kółko rolowe z właściwości Camera.CFrame, gdy gracz używa urządzenieVR.
Wymiary obszaru bezpieczeństwa urządzenia na klienta Roblox.
Metody
Zwraca BaseParts, które są nieprzezroczyste między Camera.CFrame a punktami kastingu.
Zwraca aktualny CFrame, gdzie Camera jest renderowany, uwzględniając wszystkie zastosowane role i wpływ urządzeń VR.
Wyświetla obecną rolę lub obrót wokół osi Z kamery, zastosowany do Camera przy użyciu Camera:SetRoll() .
Tworzy jednostkę Ray z pozycji na ekranie (w pikselach), w określonej głębokości od Camera orientowanej w kamerze. Licz GUI wkład.
Ustawia obecną rotację zastosowaną wokół oси Z kamery.
Tworzy jednostkę Ray z pozycji na oknie (w pikselach), w określonej głębokości z Camera , orientowanej w kierunku kamery. Nie uwzględnia wkładu CoreUISafeInsets w kamerze.
Powoduje, że lokalizacja ekranu i głębokość Datatype.Vector3``worldPoint i czy ten punkt jest w obszarze ekranu. Licz w GUI wstawki.
Powoduje, że lokalizacja ekranu i głębokość Datatype.Vector3``worldPoint i czy ten punkt jest w obszarze ekranu. Nie uwzględnia GUI wset.
Zdarzenia
Wystrzelono, gdy Camera zakończyło interpolację używając Camera:Interpolate() .
Właściwości
CFrame
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.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)
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.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 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
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
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
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
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
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
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.CurrentCameralocal 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ż
- VRService:GetUserCFrame() Który można użyć do uzyskania CFrame głowy.
- VRService:RecenterUserHeadCFrame() , który służy do ostreżenia głowy w obecnej pozycji i orientacji urządzenieVR.
HeadScale
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
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
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
VRTiltAndRollEnabled
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
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
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
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.CurrentCameralocal 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
Materiały Instances, które należy ignorować, wraz z ich potomstwem.
Zwroty
Materiały BaseParts, które zaciemniają linie wzroku między kameryjnym Camera.CFrame a castPoints.
Przykłady kodu
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.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScalerenderCFrame = camera.CFrame * headCFrame
Render kamery CFrame będzie zmieniony tylko do ujęcia głowy, gdy właściwość Camera.HeadLocked jest prawdziwa.
Zwroty
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
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
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.CurrentCameralocal length = 500local 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.
Zwroty
SetRoll
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.CFramelocal rollCFrame = CFrame.Angles(0, 0, roll)workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame
Parametry
Zwroty
ViewportPointToRay
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>
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.CurrentCameralocal viewportPoint = camera.ViewportSize / 2local 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.CurrentCameralocal length = 500local 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.
Zwroty
WorldToScreenPoint
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.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
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
Zwroty
WorldToViewportPoint
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.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
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
Zwroty
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.