Camera
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
The Camera nesnesi 3B dünyanın bir görünümünü tanımlar.Çalışan bir deneyimde, her bir müşterinin kendi Camera nesnesi vardır, bu müşterinin yerel Workspace 'sinde bulunur ve Workspace.CurrentCamera özelliği aracılığıyla erişilebilir.
En önemli kamera özellikleri şunlardır:
CFrame kameranın konumunu ve yönünü temsil eden,
CameraType deneyimin kamerası tarafından okunan ve kameranın her kareyi nasıl güncellemesi gerektiğini belirleyen, deneyimin kamerası tarafından okunan kameradır.
CameraSubject deneyimin kamerası tarafından okunan ve kamera'nın takip etmesi gereken nesneyi belirleyen, deneyimin kamerası tarafından okunan.
FieldOfView görünen dünyanın görülebilir ölçeğini temsil eden,
Focus kameranın baktığı noktayı temsil eden, ki bu nokta kameranın görüş alanıdır.Bu özellik ayarlanmalıdır, çünkü bazı görüntüler daha ayrıntılı olacak ve odak noktasına ne kadar yakın olduklarına bağlı olarak daha sık güncellenecektir.
Kamera davranışını nasıl ayarlayacağınız ve özelleştireceğiniz konusunda daha fazla bilgi için Kamera özelleştirilmesini görün.
Birden Fazla Kamera Depolama
Workspace.CurrentCamera yi yeni bir Camera 'ye değiştirirken, diğer tüm Cameras doğrudan Workspace 'dan düşecek ve yok edilecektir.Birden fazla kamera depolamak ve talep üzerine bunlar arasında değişmek gerekiyorsa, bunları veya içinde saklamanız önerilir, böylece değiştirildiğinde bile kalacaklar.
Özet
Özellikler
3B dünyada konumunu ve yönünü tanımlayan CFrame , konumunu ve yönünü tanımlayan Camera
Kameranın senaryoları tarafından okunacak Enum.CameraType belirtir.
Kameranın diyagonal görüş alanının açısını ayarlar.
Kameranın dikey görüş alanının açısını ayarlar.
Görüş alanı değişiklikleri altında değişmez olan Camera değerinin FOV değerini belirler
Roblox'un grafik sistemleri tarafından öncelik verilen 3B alanı ayarlar.
Kamera, bir oyuncunun VR cihazı kullanarak baş hareketini otomatik olarak izleyip izlemeyeceğini değiştirir.
VR'yi kullanırken kullanıcının dünyayla ilgili perspektifinin ölçeğini ayarlar.
En uzun görüş aksı boyunca kamera görüş alanının açısını ayarlar.
Kameranın yakın kırpma uçağındaki negatif Z ofsetini, çivilerle açıklar.
Oyuncu bir VR cihazı kullanırken CFrame özelliğinden eğilme ve yuvarlanma uygulanıp uygulanmayacağını değiştirir.
Roblox istemcisindeki cihaz güvenli alanın boyutları.
Yöntemler
Kameranın CFrame ve atış noktaları arasındaki görüş çizgilerini engelleyen bir dizi BaseParts döndürür
Gerçek CFrame nerede Camera render ediliyor, uygulanan herhangi bir ruloyu ve VR cihazların etkisini hesaba katıyor, hesaplanıyor
Mevcut ruloyu veya kameranın Z ekseninde dönüşünü radyandan geri döndürür, Camera kullanarak SetRoll() .
Ekranda bir pozisyondan bir birim oluşturur (piksellerde), kameranın yönüne yönlendirilen belirli bir derinlikte.GUI'nin yerleştirilmesi hesapları.
Kameranın Z ekseninde uygulanan mevcut dönüşü ayarlar.
Bakış açısındaki bir pozisyondan Ray bir birim oluşturur (piksellerde), belirli bir derinlikten Camera , kameranın yönüne doğru yönlendirilir.CoreUISafeInsets böceğini hesaba katmaz.
Bir Datatype.Vector3``worldPoint ekran konumunu ve derinliğini ve bu noktanın ekran sınırları içinde olup olmadığını döndürür.GUI'nin yerleştirilmesi hesapları.
Bir Datatype.Vector3``worldPoint ekran konumunu ve derinliğini ve bu noktanın ekran sınırları içinde olup olmadığını döndürür.GUI'nin yerleştirilmesini hesaba katmaz.
Bir PVInstance 'nin merkezini alır.
Dönüştürür PVInstance tüm altındaki PVInstances ile birlikte pivotun şimdi belirtilen CFrame 'de yer aldığını, böylece dönüşüm aşağıdaki gibi gerçekleşir:
Etkinlikler
Camera kullanarak yer değiştirme işlemi bitirildiğinde ateş edildi Interpolate() .
Özellikler
CFrame
Bu özellik, 3B dünyada konumunu ve yönünü tanımlayan , konumunu ve yönünü tanımlar.Not that some transformations, such as the rotation of the head when using VR devices, are not reflected in this property, so you should use GetRenderCFrame() to obtain the "true" CFrame of the camera.
Bu özelliği ayarlayarak kamerayı hareket ettirebilirsiniz. Ancak, varsayılan kamerasız kodlar da bunu ayarlar, bu yüzden şunlardan birini yapmalısınız:
Varsayılan kamera senaryoları kameranın 'sını güncellemeyecek şekilde kamerayı 'ya ayarlayın.Bu yöntem en basit ve çoğu durumda önerilir.
Varsayılan kamera senaryolarını alternatiflerle tamamen değiştirin.Bu yaklaşım yalnızca varsayılan kamera işlevine ihtiyacınız yoksa önerilir.
Camera konumlandırmak ve yönlendirmek için en mantıklı yol, CFrame.lookAt() yapıcıyı kullanmaktır.Aşağıdaki örnekte, Class.Camera``Datatype.Vector3.new(0, 10, 0) 'e yerleştirilmiştir ve Vector3.new(10, 0, 0) 'e doğru bakmak üzere yönlendirilmiştir.
local Workspace = game:GetService("Workspace")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)
Kamera yukarıda gösterilen şekilde yerleştirilebilir olsa da, birinden diğerine sorunsuz bir şekilde hareket etmesi için onu animasyon yapmak isteyebilirsiniz.Bunun için, şu seçeneklerden birini kullanabilirsiniz:
Kameranın konumunu/yönünü her karede RunService:BindToRenderStep() ve CFrame:Lerp() yöntemi ile ayarlayın.
Kameranın konumunu/yönünü animasyonlaştıran bir Tween oluştur ve oyna:
local Players = game:GetService("Players")local TweenService = game:GetService("TweenService")local Workspace = game:GetService("Workspace")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 çeşitli Instances kabul eder.Varsayılan kamera senaryoları mevcut ayarlara farklı şekilde yanıt verir:
Varsayılan olarak, kamerasının senaryoları yerel karakterin Humanoid 'ini takip eder ve insansızın mevcut durumunu ve Humanoid.CameraOffset 'ini dikkate alır.
Bir BasePart olarak ayarlanırsa, kamerasının kodları onun konumuna uyacak ve VehicleSeats durumunda yatay bir ofset izleyecektir.
, önceki değerine döndürülür. Bunu yapmaya çalışmak, önceki değerine geri döndürecektir.
CameraSubject varsayılan değerine geri yüklemek için, yerel karakterin Humanoid 'ine ayarlayın:
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
Varsayılan Roblox kamerası senaryoları birkaç yerleşik davranışa sahiptir.Bu özelliği ayarlamak, çeşitli Enum.CameraType davranışlar arasında geçiş yapar.Bazı kamera türlerinin doğru çalışması için geçerli bir CameraSubject gerektirdiğini unutmayın.
Varsayılan kamera senaryoları, CameraType kameraya taşınmayacak veya güncellenmeyecek, eğer Enum.CameraType.Scriptable kameraya ayarlanırsa.Kamerayı manuel olarak konumlandırma ve yönlendirme ile ilgili daha fazla bilgi için bakın CFrame .
Tüm CameraType ayarlarına rağmen hariç Enum.CameraType.Scriptable , kameranın CameraSubject konumuna ayarlanan nesneyi temsil eden Focus özellik özelliktir.
DiagonalFieldOfView
Kameranın dikey yönde (görüş alanının bir köşesinden diğer köşesine) kaç derece görebileceğini ayarlar.Görüş alanının daha genel bir açıklaması için FieldOfView bakın.
Not that bazı cihazlarda çentikler veya ekran kesintileri tarafından engellenebilecek bütün ekrana renderleme alanını temsil ediyor göz önünde bulundurun.Daha fazla bilgi için ViewportSize bakın.
FieldOfView
The FieldOfView (FOV) özelliği, kamera'nın dikey yönde kaç derece görebileceğini belirler.Bu özellik 1 ve 120 dereceleri arasında sıkıştırılır ve 70 'de varsayılan değerlerdir.Oyunculara yönlendirici olabilen çok düşük veya çok yüksek görüş alanları önerilmez.
Üniformal ölçeklendirmenin uygulandığını unutmayın, yani dikey ve yatay görüş alanı daima ekranın açısal oranıyla ilişkilidir.
FieldOfView için önerilen kullanımlar şunları içerir:
- Örneğin, bir büyütme izlenimi vermek için FOV'yi azaltmak, örneğin binokül kullanırken.
- Oyuncu kontrolsüz bir izlenim vermek için "koşarken" FOV'yi artırmak.
Not that bazı cihazlarda çentikler veya ekran kesintileri tarafından engellenebilecek bütün ekrana renderleme alanını temsil ediyor göz önünde bulundurun.Daha fazla bilgi için ViewportSize bakın.
FieldOfViewMode
Kameranın FieldOfView (FOV) değişiklikleri yansıtacak şekilde güncellenmesi gerekir ViewportSize .FieldOfViewMode değeri, hangi FOV değerinin sabit kalacağını belirler.
Örneğin, bu özellik Enum.FieldOfViewMode.Vertical olarak ayarlanırsa, görüntü boyutlandırıldığında yatay FOV güncellenir, ancak dikey FOV sabit tutulur.Bu özellik Enum.FieldOfViewMode.Diagonal olarak ayarlanırsa, hem dikey hem de yatay FOV değiştirilebilir ve diyagonal FOV sabit tutulur.
Focus
Işıklandırma güncellemesi gibi motorun gerçekleştirdiği bazı grafik işlemler, tamamlanması için zaman veya hesaplama çabası gerektirebilir.Kameranın Focus özelliği, motorun böyle işlemler yaparken 3B uzayda hangi alanı önceliklendirmesi gerektiğini söyler.Örneğin, PointLights gibi nesnelerden gelen dinamik aydınlatma, odakla uzak mesafelerde görüntülenmeyebilir.
Varsayılan Roblox kamerası senaryoları otomatik olarak (genellikle bir ) izlemeye ayarlanır.Bununla birlikte, otomatik olarak güncellenmeyecek çünkü veya varsayılan kamera senaryoları kullanılmıyor olduğunda.Bu durumlarda, her çerçeveyi Focus öncelikte RunService:BindToRenderStep() yöntemi kullanarak güncellemelisiniz, öncelik Enum.RenderPriority.Camera ta.
Focus kameranın konumuna veya yönüne bir etkisi yok; bunun için CFrame bakın.
HeadLocked
Kamera, bir oyuncunun VR cihazı kullanarak baş hareketini otomatik olarak izleyip izlemeyeceğini değiştirir.When true (varsayılan), motor kullanıcının başının CFrame ile birleştirilmesini sağlayarak oyuncunun görüşünü kafa takibi ile birleştirir Enum.UserCFrame ve kafa takibi ile birleştirilmiş görüşü görüntülerGörüntü aşağıdaki CFrame 'de renderlenecektir:
local UserInputService = game:GetService("UserInputService")local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale-- Bu, Kamera:GetRenderCFrame() ile eşdeğer olacaktırlocal renderCFrame = camera.CFrame * headCFrame
Bunu devre dışı bırakmanız önerilir çünkü şu nedenlerden dolayı bu özellik:
- Eşdeğer bir baş izleme çözümü eklenmediğinde oyuncular hareket hastalığı yaşayabilir.
- Roblox Motoru, HeadLocked doğru olduğunda gecikme optimizasyonları yapar.
Ayrıca bakın
- VRService:GetUserCFrame() başın CFrame kazanılması için kullanılabilecek olan.
- VRService:RecenterUserHeadCFrame() Başı mevcut VR cihazının konumuna ve yönüne yeniden yerleştirmek için kullanılan.
- Kullanıcının başının GetRenderCFrame() ile birleştirildiği CFrame yöntemi, kullanıcının başının CFrame ile birleştirildiği
HeadScale
HeadScale VR'yi kullanırken kullanıcının dünyayla ilgili perspektifinin ölçeğidir.
VR'de 1 çivi boyutu 0.3 meters / HeadScale , daha büyük HeadScale değerlerinin VR cihazları kullanırken kullanıcının perspektifinden daha küçük görünen dünyaya eşit olduğu anlamına gelir.Örneğin, 1 santim yüksek bir parça, HeadScale ile bir VR oyuncusuna 0.6 metre yüksek görünüyor 0.5 .
Bu özellik, oyuncunun perspektifini avatarlarının boyutuyla eşleştirmek için otomatik olarak VRService.AutomaticScaling tarafından kontrol edilir.Kendinizi kontrol etmeyi veya özel karakterler kullanmayı planlıyorsanız, HeadScale ile VRService.AutomaticScaling 'e geçin Enum.VRScaling.Off .
Bu özellik, ölçeklenmesini kontrol etmek için bir ile karıştırılmamalıdır, ki bu bir bir ebeveyn tarafından kontrol edilir ve ölçeklenmesini kontrol eder.
MaxAxisFieldOfView
The MaxAxisFieldOfView özelliği, kameranın en uzun görüntü ekseninde kaç derece görebileceğini belirler.
En uzun eksen dikey eksen olduğunda, bu özellik FieldOfView özelliğine benzer davranacaktır.Bu genellikle bir cihaz portre yönünde olduğunda olan durumdur.Manzara yönünde, en uzun eksen yatay eksen olacaktır; bu durumda, özellik Camera 'in yatay görüş alanını tanımlar.
NearPlaneZ
The NearPlaneZ özelliği, kameranın yakın kesme uçağının ne kadar uzakta olduğunu, milimetre olarak tanımlar.Yakın kırpma uçağı, kameranın önünde oturan geometrik bir uçaktır CFrame .Bu uçağın ve kameranın arasında herhangi bir şey görüntülenmeyecek ve çok kısa mesafelerde nesneleri görüntülerken kesintisiz bir görünüm oluşturmayacak.NearPlaneZ değeri farklı platformlarda değişir ve şu anda daima -0.1 ve -0.5 arasındadır.

VRTiltAndRollEnabled
Bu özellik, oyuncu bir VR cihaz kullanırken eğilme ve yuvarlanma uygulanıp uygulanmayacağını değiştirir CFrame özelliği.
Hareket hastalığını önlemek için, ufuk seviyesinde kalmalıdır.VR cihazı kullanırken oyuncunun görüşünü eğip yuvarlamak, oyuncunun fiziksel alanı ve gördüğü sanal alan arasında bir bağlantı kopmasına neden olabilir.Görünüşte aşağı yön değiştirmek oyuncuların denge kaybetmesine veya sersemlemesine neden olabilir.
Bu nedenlerden dolayı, bu özellik genellikle bu etkiler için deneyiminizi geniş ölçüde test etmedikçe devre dışı bırakmak tavsiye edilir.Eğilme ve yuvarlanma etkinleştirilmiş olsa bile, oyuncunun daima sabit bir referans çerçevesine sahip olduğundan emin olmak isteyebilirsiniz, örneğin bir aracın içi veya oyuncunun kendi fiziksel alanında kendini yerleştirmesine yardımcı olabilecek bir zemin.
ViewportSize
ViewportSize mevcut ekranda cihazın güvenli alanının boyutlarını döndürür.Bu alan, Roblox üst çubuk alanını içeren bir dikdörtgen, ancak herhangi bir cihaz notu veya ekran kesintisi içermiyor.ViewportSize birimleri, yerli görüntü pikselinden farklı olabilecek Roblox UI ofset birimleridir.

Yukarıda belirtildiği gibi, ViewportSize ekranlarda kesintiler veya çuklarla bölünmüş alan boyutuna eşit değildir.Tüm ekranlarda bütün ekran alanı boyutunu almak için, AbsoluteSize özelliğinin bir ScreenGui ile ScreenInsets ayarlandığı bir None ile sorgulayabilirsiniz.Ekran alanlarının nasıl tanımlandığına dair daha fazla bilgi için Enum.ScreenInsets bakın.
Son olarak, ViewportSize 'nin render için kameranın kullandığı gerçek pencere boyutu olmadığını unutmayın (kamera, bütün ekran alanında render eder).Ayrıca, FieldOfView ve DiagonalFieldOfView özellikleri tam ekran alanına dayanmaktadır, ViewportSize değil.
Kamera Güncellemeleri
Yalnızca Camera şu anda Workspace.CurrentCamera tarafından referans edilen, her bir çerçevede ViewportSize güncellendi, PreRender adımı sırasında.Deneyiminizdeki tüm diğer kameraların ViewportSize ı, ViewportFrames için kullanılanlar da dahil olmak üzere güncellenmeyecek.
Yöntemler
GetPartsObscuringTarget
Bu yöntem, kameranın BaseParts ve CFrame pozisyonları arasındaki görüş çizgilerini örtbas eden bir dizi Vector3 döndürür castPoints matrisinde. İçinde yer alan herhangi bir dizisi, onların soyundakilerle birlikte göz ardı edilecektir.
castPoints parametresi bir dizi Vector3 pozisyon olarak verilir.BaseParts döndürülen dizinin rastgele bir sırayla olduğunu ve ekstra ışın atışı verisi sağlanmadığını unutmayın.Vuruş konumu, vuruş malzemesi veya yüzey normali gibi verilere ihtiyacınız varsa, WorldRoot:Raycast() yöntemini seçmelisiniz.
local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal castPoints = {Vector3.new(0, 10, 0),Vector3.new(0, 15, 0)}local ignoreList = {}local partsObscuringTarget = camera:GetPartsObscuringTarget(castPoints, ignoreList)
Eğer Terrain bir atış noktasını kapatırsa, BaseParts kapatılan atış noktası arasındaki atış noktasını engellemezse, Terrain atış noktası arasındaki engelleme geri verilmeyecektir.
Parametreler
Onların soyundakilerle birlikte göz ardı edilmesi gereken bir Instances dizi.
Dönüşler
GetRenderCFrame
Bu yöntem, VR'nin etkisini de dahil ederek gerçek ı geri döndürür, yani oyuncunun görüşünün "gerçek" kazanması için kullanmak en iyi uygulamadır).
Örneğin, VR'yi kullanırken, Camera aslında aşağıdaki CFrame 'de görüntülenir:
local UserInputService = game:GetService("UserInputService")local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScalerenderCFrame = camera.CFrame * headCFrame
Kameranın render'ı CFrame sadece HeadLocked özelliği doğru olduğunda başı hesaba katmak için değiştirilecektir.
Dönüşler
GetRoll
Bu yöntem, radyandaki, Camera kullanarak uygulanan mevcut ruloyu geri verir SetRoll() .Yuvarlak, kameranın Z ekseninde dönüş olarak tanımlanır.
Bu yöntem sadece SetRoll() yöntemi kullanılarak uygulanan rulo döndürür.Kameranın CFrame 'sine manuel olarak uygulanan rulo hesaba katılmaz.Manuel olarak uygulanan rulo dahil Camera 'nin gerçek rulosunu almak için aşağıdaki kesimi kullanabilirsiniz:
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
Dönüşler
Kod Örnekleri
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.
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
Bu yöntem, ekranda 2D konumdan bir birim Ray oluşturur (像定义的 GUI 插入), GUI'nin yerleştirilmesini hesaba katmak.The Ray kaynağı, verilen derinlikte dünyadaki 2D konumunun eşdeğeri olan Vector3 'den gelir (çivilerle) Camera 'den uzakta.
Bu yöntem GUI'ye yerleştirmeyi tanıdığından, GUI öğelerine (örneğin üst çubuktan) uygulanan ofsit hesaba katılır.Bu, belirtilen ekran konumunun üst çubuğun altındaki sol üst köşede başlayacağı anlamına gelir.Aksi takdirde GUI ofsetini hesaba katmayan benzer bir yöntem için, ViewportPointToRay() kullanın.
Oluşturulan Ray bir birim ışını, sadece bir metre uzunluğunda. Daha uzun bir ışın oluşturmak için takip edilenyapabilirsiniz:
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)
Bu yöntem yalnızca mevcut Workspace kamera için çalışır.Bir ViewportFrame için oluşturduğunuz diğer kameralar,
Parametreler
X ekseninde, piksellere göre, ekran noktasının Ray için konumu. Bu konum, GUI'nin yerleştirilmesini temsil eder.
Y ekseninde, piksellere göre, ekran noktasının Ray için konumu. Bu konum, GUI'nin yerleştirilmesini temsil eder.
Dönüşler
SetRoll
Bu yöntem eski ve artık en iyi uygulama olarak kabul edilmiyor.
Bu yöntem, Camera 'nin mevcut rulosunu, radyandaki, ayarlar.Rulo, CFrame sonra uygulanır ve kameranın Z ekseninde dönüşü temsil eder.
Örneğin, şu işlem Camera 'yi tersine çevirir:
local Workspace = game:GetService("Workspace")Workspace.CurrentCamera:SetRoll(math.pi) -- math.pi radians = 180 degrees
SetRoll, CFrame özelliğini kullanarak uygulanan herhangi bir rulonun üzerinde hiçbir etkiye sahip değildir.SetRoll kullanılarak uygulanan rulo, CFrame özellikte yansıtılmaz, ancak CFrame tarafından döndürülen GetRenderCFrame() tarafından yansıtılır.
Bu yöntem yalnızca varsayılan kamera senaryoları kullanılıyor olmasına bakılmaksızın sadece olarak ayarlanırsa kullanılabilir.Diğer herhangi bir CameraType ile kullanılırsa çıktıda bir uyarı verilir.
Bu yöntem kullanılarak uygulanan herhangi bir rulo, değiştirildiğinde kaybolacaktır.
Bu yöntem kullanılarak rulo setinin alınması için GetRoll() kullanın.
Bu yöntem eski olduğundan, yerine özelliğini kullanarak ruloyu uygulamanız önerilir. Örneğin:
local Workspace = game:GetService("Workspace")local currentCFrame = Workspace.CurrentCamera.CFramelocal rollCFrame = CFrame.Angles(0, 0, roll)Workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame
Parametreler
Dönüşler
ViewportPointToRay
Bu yöntem, 2D konumdan bir birim Ray oluşturur, piksellerde tanımlanan cihaz güvenli görüş alanı koordinatlarında.Işın, verilen derinlikte dünyadaki 2D konumunun eşdeğerinden kaynaklanır Vector3 uzakta (çivilerle) Camera .
Aşağıda gösterildiği gibi, (0, 0) Roblox üst çubuğunun üst sol noktasına karşılık gelir.Bu, girişin 2B pozisyonunun hesaba katmadığını CoreUISafeInsets ınset için sorumlu olmadığını, ancak herhangi bir DeviceSafeInsets için sorumlu olduğunu ifade eder.

Arayüz örneklerinin farklı bir koordinat sistemini kullandığını unutmayın ( koordinat sistemini kullanırken bu yöntem görüntü koordinasyon sistemini kullanıyor).Çekirdek UI koordinatlarında konum belirtmek istiyorsanız, lütfen ScreenPointToRay() kullanın.
Ayrıca, bu yöntemin sadece Workspace.CurrentCamera kamera için çalıştığını unutmayın.Bir ViewportFrame için oluşturduğunuz diğer kameralar, (1, 1) başlangıç görüş alanına sahiptir ve sadece onları CurrentCamera olarak ayarladıktan sonra güncellenir.Bakış açısı boyutundaki uyuşmazlık, kameranın yanlış bir Ray.Direction ı ile bir ışın döndürmesine neden olur.
Bu yöntem, örneğin ekranın merkezinden bir ışın oluşturmak için ViewportSize özelliği ile birlikte kullanılabilir:
local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal viewportPoint = camera.ViewportSize / 2local unitRay = camera:ViewportPointToRay(viewportPoint.X, viewportPoint.Y, 0)
Oluşturulan Ray bir birim ışını, sadece bir metre uzunluğunda. Daha uzun bir ışın oluşturmak için takip edilenyapabilirsiniz:
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)
Parametreler
X ekseninde, piksellere göre, görüntü noktasının Ray oluşturulması gereken noktasının, cihaz güvenli alan koordinatlarındaki pozisyonu.
Y ekseninde, piksel olarak, görüntü noktasının Ray oluşturulacağı görüş alanı koordinatlarındaki pozisyon, cihaz güvenli alan koordinatlarında.
Dönüşler
WorldToScreenPoint
Bu yöntem, bir Datatype.Vector3``worldPoint ekran konumunu ve derinliğini ve bu noktanın ekran sınırları içinde olup olmadığını dönderir.
Bu yöntem, üst çubuğun işgal ettiği alan gibi mevcut GUI araçlarını hesaba katmaktadır, böylece 2B pozisyonu GUI pozisyonlarıyla aynı sürede geri dönmektedir ve GUI elemanları yerleştirmek için kullanılabilir.GUI insertini görmezden gelen başka bir yöntem için, bakın WorldToViewportPoint() .
local Workspace = game:GetService("Workspace")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
Bu yöntem herhangi bir ışın atışı gerçekleştirmez ve worldPoint noktanın ekran sınırları içinde olup olmadığını gösteren booleen değer true ır, nokta BaseParts veya Terrain tarafından engelleniyor olsa bile.
Parametreler
Dönüşler
Sırayla içeren bir tupl:
içinde ekran sınırları içinde olup olmadığını gösteren bir boşluk değeri.
WorldToViewportPoint
Bu yöntem, bir Datatype.Vector3``worldPoint ekran konumunu ve derinliğini ve bu noktanın ekran sınırları içinde olup olmadığını dönderir.
Bu yöntem, üst çubuğun işgal ettiği alan gibi mevcut GUI yerleşimini dikkate almaz, böylece 2B pozisyonu görüntünün sol üst kısmından alınır, yani döndürülen 2D pozisyonu görüntünün sol üst kısmından alınır.ScreenGui.IgnoreGuiInset kullanmıyorsanız, bu pozisyon GUI öğelerini yerleştirmek için uygun değildir.
Aksi takdirde GUI'nin yerleştirilmesini temsil eden benzer bir yöntem için, bakın WorldToScreenPoint() .
local Workspace = game:GetService("Workspace")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
Bu yöntem herhangi bir ışın atışı gerçekleştirmez ve worldPoint noktanın ekran sınırları içinde olup olmadığını gösteren booleen değer true ır, nokta BaseParts veya Terrain tarafından engelleniyor olsa bile.
Parametreler
Dönüşler
Sırayla içeren bir tupl:
içinde ekran sınırları içinde olup olmadığını gösteren bir boşluk değeri.
Etkinlikler
InterpolationFinished
Bu olay, Camera yöntemi kullanarak yer değiştirmenin bitmesiyle ateşlenir Camera:Interpolate().Bir genç kız tekrar çağrıldığından dolayı kesintiye uğrarsa ateş etmeyecektir Camera:Interpolate().
Bunun yerine, daha güvenilir ve stilleri hafifletmek için daha fazla seçenek sağlayan kullanmanız önerilir, çünkü bu daha güvenilirdir ve stilleri hafifletmek için daha fazla seçenek sağlar.