Kullanıcının dünyayla ilgili görüşü bir Camera nesnesiyle temsil edilir.Kamera davranışını çeşitli şekillerde deneyiminize uyacak şekilde değiştirebilirsiniz.Örneğin, kamera dünyadaki olaylara tepki verebilir, örneğin bir canavar yürüdüğünde sarsılır veya kullanıcı karakterinin tarafına kilitlenir, bir yan kaydırıcı gibi.
İlk kişi kamerası oluştur
Birinci şahıs kamerası, kameranın karakterin kafasıyla kilitli kaldığı bir görüntüdür, ki bu gerçek hayata daha doğrudur.Hedefin kullanıcıyı dünyaya dahil etmek olduğu atışçı ve hikaye deneyimlerinde yaygındır.


Stüdyoda, StarterPlayer nesnesi kullanıcının kamerasını etkileyen bir dizi özellik içerir. Kamera Modu özelliği, kamera davranışını nasıl belirler.
Seç Başlangıç Oyuncusu .
KameraModunu İlk Kişiyi Kilitle olarak değiştirin. Bu, kullanıcının kamerasının kafasından uzaklaşmayacağını garanti eder.
İlk kişi kamerasının eylemini görmek için oyun testi yapın.
Yan tarayan bir kamerayı oluştur
Yan tarayan bir görünüm, kamerayı karakterin yanına sabit bir konuma getirir ve dünyaya iki boyutlu bir his verir.
Kamerayı kodla
Başlangıç Oyuncusunu genişletin ve Başlangıç OyuncuScriptlerinde YerelScript adında bir CameraManager.
Senaryonun üstünde, Oyuncu hizmetini almak için aşağıdaki kod örneğini kopyalayıp yapıştırın ve ardından yeni bir değişkende yerel kullanıcıyı alın.
local Players = game:GetService("Players")local player = Players.LocalPlayerupdateCamera adlı bir işlev oluşturun. Bu, kamera için yeni bir konum almak ve ayarlamak için gerekli mantığı tutar.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endİşlevin içinde, kullanıcının karakter modelini alın ve bir if ifadesi kullanarak var olup olmadığını kontrol edin.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Kamerayı işaret et
Tüm karakter modelleri, karakterin dünyadaki konumunu almak için kullanılabilecek bir parça olan HumanoidRootPart adlı bir parça içerir.Bu, kameranın nereye odaklandığını belirler.
HumanoidRootPart'i almak için FindFirstChild kullanın ve bir if ifadesi kullanarak var olup olmadığını kontrol edin.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendHumanoidRootPart'ın konumu aslında kullanıcının başının 2 santimetre altındadır.Bunu düzeltmek için, kök konumuna bir yükseklikte Vector3 yeni bir 2 çivi ekleyin.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal HEIGHT_OFFSET = 2local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)endendend
Kamera konumunu ayarla
Kamera ayrıca bir konuma ihtiyaç duyar.Kullanıcının görüşüne 2B tarayıcı görünümü vermek için, kameranın karakterin yanına doğrudan bakması gerekir.Kamerayı kullanıcının yanına yerleştirerek sadece Z ekseninin derinliğini ekleyerek kameranın konumuna Vector3.
local player = Players.LocalPlayer
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
end
end
end
Mevcut Kamerayı Güncelle
Artık kameranın konumu ve kameranın hedefi için değişkenler hazır, kameranın konumunu güncelleştirme zamanı geldi.Kullanıcının kamerasına Workspace'in CurrentCamera özelliği aracılığıyla erişebilirsiniz.Kamera, konumunu belirlemek için bir CFrame özelliğine sahiptir.
Kamerayı güncellelemek için CFrame.lookAt() kullanabilirsiniz.İki pozisyon alır ve ikinci pozisyona işaret eden ilk pozisyonda bulunan bir CFrame oluşturur.CFrame.lookAt() ile cameraPosition konumlandırılan ve rootPosition işaret eden bir CFrame oluşturmak için kullanın.
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end
Kamerayı eşitle
Son adım, kamerayı kullanıcıyla senkronize tutmak için bu işlevi tekrar tekrar çalıştırmaktır.Kullanıcının gördüğü görüntü sürekli yenileniyor.Gerekli tüm hesaplamaları yapmak için gereken saniye bölünmesine render adımı denir.
RunService:BindToRenderStep() her karede bir işlevi çalıştırmak için bu üç parametri kabul ederek her karede bir işlev çalıştırmayı basitleştirir:
- name - Bu bağlantının adı, benzersiz olması gerektiği için aynı adı taşıyan diğer işlevlerle çakışmayacaktır.
- priority - Sayı ne kadar yüksekse, öncelik o kadar yüksek olur.Bu işlev, Roblox'un varsayılan kamerasının güncellemesinden sonra çalışmalı , bu nedenle öncelik, iç kameranın RenderPriority'inden 1 seviye daha yüksek ayarlanır.
- function - Render adımına bağlanacak işlev.
RunService:BindToRenderStep() işlevini render adımına bağlamak için kullanın updateCamera fonksiyonu.
local Players = game:GetService("Players")local RunService = game:GetService("RunService")local player = Players.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 24local HEIGHT_OFFSET = 2local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)endendendRunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)kodtest edin. Karakterinizi yan yana hareket ettirmek için A ve D tuşlarını kullanın.
İzometrik bir kamera oluştur
Kullanıcının konumunu alma ve her karede kameranın konumunu güncelleme temel yapısı, bir isometrik kamera gibi birçok farklı kamera tarzına adapte edilebilir.İzometrik bir kamera, kullanıcı karakterine biraz aşağıya doğru bir sabit açıdan gösteren 3B görünümdür.
Pozisyonu ve görünümü değiştir
Önceki örneğin kodunu kullanarak, tüm 3 boyuta aynı miktar eklemek için cameraPosition'yi değiştirin.
local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)endendendRunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)Kameranın FieldOfView özelliğini değiştirmek, görüntüyü daha düz bir görünüme kavuşturabilir, ki bu da görüşü daha düzleştirebilir.Yakınlaşmak ve telafi etmek için kameranın kullanıcıdan uzaklığını 20 değerine ayarlamaya çalışın ve arttırın.
local Players = game:GetService("Players")local RunService = game:GetService("RunService")local player = Players.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 64local HEIGHT_OFFSET = 2camera.FieldOfView = 20local function updateCamera()
Kamera davranışını değiştirerek, deneyiminiz için yepyeni bir görünüm elde edebilirsiniz.Aynı senaryo ile aşağıdan yukarı bir kamera elde etmek için cameraPosition 'yi değiştirebileceğinizi görün.Beğendiğiniz bir sonuç almak için ayarları değiştirmeyi deneyin!