Kullanıcının dünyayı görme şekli, bir Camera nesnesi ile temsil edilir. Oyununuza uygun şekilde kameranın davranışını çeşitli yollarla değiştirebilirsiniz. Örneğin, kamera, bir canavar yanından geçerken sarsılmak gibi dünyadaki olaylara tepki verebilir veya bir yan kaydırıcıda olduğu gibi kullanıcı karakterinin yanına kilitlenebilir.
Birinci şahıs kamerası oluşturma
Birinci şahıs kamerası, kameranın karakterin başı ile kilitli kaldığı bir görünüm olup, gerçek hayata daha yakındır. Kullanıcının dünyaya tamamen dalmasını sağlamak için, nişancı ve hikaye oyunlarında yaygındır.


Studio'da, StarterPlayer nesnesi, kullanıcının kamerasını etkileyen bir dizi özellik içerir. CameraMode özelliği, kameranın nasıl davrandığını belirler.
StarterPlayer'ı seçin.

CameraMode'u LockFirstPerson olarak değiştirin. Bu, kullanıcının kamerasının başından uzaklaşmamasını sağlar.

Birinci şahıs kamerasını görmek için oyunu test edin.
Yan kaydırma kamerası oluşturma
Yan kaydırma görünümü, kamerayı karakterin yanına göre sabit bir konumda tutarak dünyaya iki boyutlu bir his verir.

Kamerayı betimleme
StarterPlayer'ı genişletin ve StarterPlayerScripts'e CameraManager adında bir LocalScript ekleyin.

Script'in en üstüne, Players servisini 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 adında bir fonksiyon oluşturun. Bu, kameranın yeni bir konumunu almak ve ayarlamak için gereken mantığı tutar.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endFonksiyonun 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ı yönlendirme
Tüm karakter modelleri, karakterin dünyadaki konumunu almak için kullanılabilecek HumanoidRootPart adında bir parçayı içerir. Bu, kameranın baktığı konumu ayarlar.
FindFirstChild kullanarak HumanoidRootPart'ı 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 thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendHumanoidRootPart'ın konumu aslında kullanıcının başının 2 birim altında. Bunu düzeltmek için, kökün konumuna 2 birim yüksekliğinde yeni bir Vector3 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
Kameranın konumunu ayarlama
Kameranın ayrıca bir konuma ihtiyacı vardır. Kullanıcının görünümüne 2D yan kaydırma görünümü vermek için, kamera karakterin yanına doğrudan bakmalıdır. Kamerayı kullanıcının yanına yerleştirmek için, kameranın konumunun sadece Z eksenine derinlik ekleyin ve bir Vector3 kullanın.
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
endCurrentCamera'ı güncelleme
Artık kameranın konumu ve kameranın hedefi için değişkenler hazır olduğuna göre, kameranın konumunu güncelleme zamanı. Kullanıcının kamerasına, Workspace'in CurrentCamera özelliği aracılığıyla erişebilirsiniz. Kameranın konumunu belirlemek için bir CFrame özelliği vardır.
Kamerayı güncellemek için CFrame.lookAt() kullanabilirsiniz. Bu, iki konum alır ve ilk konumda ikinciye doğru bakan bir CFrame oluşturur. cameraPosition'da konumlandırılmış ve rootPosition'a doğru bakan bir CFrame oluşturmak için CFrame.lookAt() 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
endKamerayı senkronize etme
Son adım, bu fonksiyonu sürekli çalıştırarak kamerayı kullanıcının hareketiyle senkronize tutmaktır. Kullanıcının gördüğü görüntü sürekli yenilenmektedir. Tüm gerekli hesaplamaları yapmak için geçen kısa süreye render step denir.
RunService:BindToRenderStep() her karede bir fonksiyonu çalıştırmayı basit hale getirir ve bu üç parametreyi kabul eder:
- name - Bu bağlamanın adı, benzersiz olmalıdır, böylece aynı adı taşıyan diğer fonksiyonlarla çakışmaz.
- priority - Sayı ne kadar yüksekse, öncelik o kadar yüksektir. Bu fonksiyon, Roblox'un varsayılan kamera güncellemesinden sonra çalışmalıdır, bu nedenle öncelik, iç kameranın RenderPriority'sinden 1 seviye daha yüksek olarak ayarlanır.
- function - Render adımına bağlanacak fonksiyon.
RunService:BindToRenderStep() kullanarak updateCamera fonksiyonunu render adımına bağlayın.
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)Kodunuzu test edin. Karakterinizi yan yana hareket ettirmek için A ve D tuşlarını kullanın.
İzometrik kamera oluşturma
Kullanıcının konumunu alıp kameranın konumunu her karede güncelleme temel yapısı, izometrik kamera gibi birçok diğer kamera stiline uyarlanabilir. İzometrik kamera, kullanıcı karakterine doğru hafif aşağı bakan sabit bir açıya sahip 3D bir görünüm sunar.

Konumu ve görünümü değiştirme
Önceki örnekteki kodu kullanarak, cameraPosition'ı tüm 3 boyuta aynı miktarı ekleyecek şekilde 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, kamerayı içeri ve dışarı zoom yapıyormuş gibi simüle eder, bu da görünümü daha düz bir hale getirebilir. Zoom yapmak için 20 değerine ayarlamayı deneyin ve kullanıcının uzaklığını artırarak telafi edin.
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()
Kameranın davranışını değiştirerek, oyununuz için tamamen yeni bir görünüm elde edebilirsiniz. Aynı script ile bir üstten görünüm kamerası elde etmek için cameraPosition'ı değiştirmeyi deneyin. Beğendiğiniz bir sonuç almak için ayarları değiştirmeyi deneyin!