Camera

Artık kullanılmayanları göster

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Çoğaltılmamış

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

Şuradan alınan Özellikler: PVInstance

Yöntemler

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

    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() .

  • Paralel yaz

    Ekranda bir pozisyondan bir birim oluşturur (piksellerde), kameranın yönüne yönlendirilen belirli bir derinlikte.GUI'nin yerleştirilmesi hesapları.

  • SetRoll(rollAngle : number):()

    Kameranın Z ekseninde uygulanan mevcut dönüşü ayarlar.

  • Paralel yaz

    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.

  • Paralel yaz

    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ı.

  • Paralel yaz

    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.

  • ZoomToExtents(boundingBoxCFrame : CFrame,boundingBoxSize : Vector3):()
Şuradan alınan Yöntemler: PVInstance

Özellikler

CFrame

Paralel oku

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.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)

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.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

Paralel oku

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

Paralel oku

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

Çoğaltılmamış
Paralel oku

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

Paralel oku

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

Paralel oku

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

Paralel oku

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

Paralel oku

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.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
-- Bu, Kamera:GetRenderCFrame() ile eşdeğer olacaktır
local 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

HeadScale

Paralel oku

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

Çoğaltılmamış
Paralel oku

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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.

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

VRTiltAndRollEnabled

Paralel oku

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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.

Mobile device screen with cutout showing device safe area.

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

Instances

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.CurrentCamera
local 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

castPoints: Array

Yayın noktalarının bir dizi Vector3 pozisyonu.

Varsayılan değer: ""
ignoreList: Instances

Onların soyundakilerle birlikte göz ardı edilmesi gereken bir Instances dizi.

Varsayılan değer: ""

Dönüşler

Instances

Kameranın CFrame ve castPoints arasındaki görüş çizgilerini gizleyen bir dizi BaseParts .

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.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
renderCFrame = 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

The CFrame the Camera render ediliyor.

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

Mevcut rulo SetRoll() tarafından uygulandı, radyandalar içinde.

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.

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

Paralel yaz

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.CurrentCamera
local length = 500
local 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, (1, 1) başlangıç ​​görüş port boyutuna sahiptir ve sadece onları Workspace.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.

Parametreler

X ekseninde, piksellere göre, ekran noktasının Ray için konumu. Bu konum, GUI'nin yerleştirilmesini temsil eder.

Varsayılan değer: ""

Y ekseninde, piksellere göre, ekran noktasının Ray için konumu. Bu konum, GUI'nin yerleştirilmesini temsil eder.

Varsayılan değer: ""
depth: number

Camera 'den derinlik, çivilerden, Ray 'nin kaynağını telafi etmek için kullanılır.

Varsayılan değer: 0

Dönüşler

Bir birim Ray , verilen ekran koordinatlarının eşdeğeri Vector3 dünya konumundan kaynaklanan, verilen derinlikten uzakta Camera .Bu ışın, Camera yönünde yönlendirilir.

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.CFrame
local rollCFrame = CFrame.Angles(0, 0, roll)
Workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame

Parametreler

rollAngle: number

Yuvarlanma açısı, radyandaki, Camera 'ye uygulanacak.

Varsayılan değer: ""

Dönüşler

()

ViewportPointToRay

Paralel yaz

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.

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

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.CurrentCamera
local viewportPoint = camera.ViewportSize / 2
local 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.CurrentCamera
local length = 500
local 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.

Varsayılan değer: ""

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.

Varsayılan değer: ""
depth: number

Camera 'den derinlik, çivilerden, Ray 'nin kaynağını telafi etmek için kullanılır.

Varsayılan değer: 0

Dönüşler

Eşdeğer Ray dünya konumundan kaynaklanan bir birim Vector3 , verilen görüntü koordinatlarının verilen derinlikten uzakta olduğu Camera dünya pozisyonundan kaynaklanan bir birimBu ışın, Camera yönünde yönlendirilir.

WorldToScreenPoint

Paralel yaz

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.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

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

worldPoint: Vector3

The Vector3 dünya konumu.

Varsayılan değer: ""

Dönüşler

Sırayla içeren bir tupl:

  • Bir Vector3 'nin X ve Y bileşenleri ekranın sol üst kısmındaki worldPoint 'den ofseti temsil ediyor, piksel olarak.The Vector3 Z component represents the depth of the worldPoint from the screen (in studs).

  • içinde ekran sınırları içinde olup olmadığını gösteren bir boşluk değeri.

WorldToViewportPoint

Paralel yaz

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.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

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

worldPoint: Vector3

The Vector3 dünya konumu.

Varsayılan değer: ""

Dönüşler

Sırayla içeren bir tupl:

  • Bir Vector3 'nin X ve Y bileşenleri, görüntünün sol üst kısmındaki worldPoint ödülünü piksellerde temsil ediyor.The Vector3 Z component represents the depth of the worldPoint from the screen (in studs).

  • içinde ekran sınırları içinde olup olmadığını gösteren bir boşluk değeri.

ZoomToExtents

()

Parametreler

boundingBoxCFrame: CFrame
Varsayılan değer: ""
boundingBoxSize: Vector3
Varsayılan değer: ""

Dönüşler

()

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.