Kullanıcının dünyayı görüşü Camera nesnesi tarafından temsil edilir. Kamera davranışını deneyiminize uygun hale getirmek için çeşitli yollarla değiştirebilirsiniz. Örneğin, kamera dünyadaki olaylara tepki verebilir, bir canavar yanından geçerken titreyebilir 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 kilitlendiği bir görünüm olup, gerçek hayata daha yakın bir deneyim sunar. Bu, kullanıcıyı dünyaya daldırmayı amaçlayan nişancı ve hikaye deneyimlerinde 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ı aksiyon halindeyken görmek için oyununuzu test edin.
Yan kaydırma kamerası oluşturma
Bir yan kaydırma görünümü, karakterin yanına göre sabit bir konumda kamerayı tutarak dünyaya iki boyutlu bir his verir.

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

Script'in en üstüne, Players servisini almak için aşağıdaki kod örneğini kopyalayın ve yapıştırın, 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 fonksiyon, kameranın yeni bir konumunu almak ve ayarlamak için gereken mantığı içerir.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endFonksiyon içinde, kullanıcının karakter modelini alın ve var olup olmadığını kontrol etmek için bir if ifadesi kullanın.
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Kamerayı yönlendirin
Tüm karakter modelleri, karakterin dünyadaki konumunu almak için kullanılabilen HumanoidRootPart adlı bir parçayı içerir. Bu, kameranın baktığı konumu ayarlamak için kullanılır.
FindFirstChild kullanarak HumanoidRootPart'ı alın ve var olup olmadığını bir if ifadesi ile 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 stud altında yer almaktadır. Bunu düzeltmek için, kökün konumuna yükseklik olarak 2 stud ekleyen 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 ayarlayın
Kameranın ayrıca bir konuma ihtiyacı vardır. Kullanıcının görüşüne 2D yan kaydırma görünümü vermek için, kamera karakterin yanına doğrudan bakmalıdır. Kamerayı kullanıcıdan sadece Z eksenine derinlik ekleyerek konumlandırı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
end
CurrentCamera'ı güncelleyin
Kameranın konumu ve hedefi için değişkenler hazır olduğuna göre, kameranın konumunu güncelleyebilirsiniz. Kullanıcının kamerasına Workspace'in CurrentCamera özelliği üzerinden erişebilirsiniz. Kameranın bir CFrame özelliği vardır ve bu, konumunu belirler.
Kamerayı güncellemek için CFrame.lookAt() fonksiyonunu kullanabilirsiniz. Bu, iki konum alır ve ilk konumda, ikinciye bakarak bir CFrame oluşturur. cameraPosition'da konumlu ve rootPosition'a yönlendirilmiş bir CFrame oluşturmak için CFrame.lookAt() kullanabilirsiniz.
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ı senkronize edin
Son adım, bu fonksiyonu sürekli olarak çalıştırmak ve kamerayı kullanıcı ile senkronize tutmaktır. Kullanıcının gördüğü görüntü sürekli olarak yenilenmektedir. Tüm gerekli hesaplamaları yapmak için geçen kısa zaman dilimi, render adımı olarak adlandırılır.
RunService:BindToRenderStep() her çerçevede bir fonksiyonu yürütmeyi basit hale getirir ve bu üç parametreyi kabul eder:
- name - Bu bağlamanın adı, benzersiz olmalıdır, böylece aynı isimdeki diğer fonksiyonlarla çakışmaz.
- priority - Sayı ne kadar yüksekse, önceliği de 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 yanlara hareket ettirmek için A ve D tuşlarını kullanın.
İzometrik kamera oluşturma
Kullanıcının konumunu alıp her çerçevede kameranın konumunu güncelleme temel yapısını birçok farklı kamera tarzına uyarlayabilirsiniz, örneğin izometrik kamera. İzometrik kamera, 3D bir görünüm olup, kullanıcı karakterine hafif bir açıyla aşağı doğru bakan bir görünüm sunar.

Konum 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, onu 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 kameradan uzaklığını artırarak bunu dengeleyin.
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, deneyiminiz için tamamen yeni bir görünüm elde edebilirsiniz. Aynı script ile bir üstten bakış kamerası elde etmek için cameraPosition'ı değiştirip değiştiremeyeceğinizi görün. Beğendiğiniz bir sonuç almak için ayarları denemeyi deneyin!