Orta seviye öğreticiler

Kullanıcının kamerasını kontrol et

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

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.

Birinci Şahıs Kamerası
Klasik Roblox Kamerası

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.

  1. StarterPlayer'ı seçin.

    alt

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

    alt

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

alt

Kamerayı betimleme

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

    alt

  2. 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.LocalPlayer
  3. updateCamera 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.LocalPlayer
    local function updateCamera()
    end
  4. Fonksiyon 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.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

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.

  1. FindFirstChild kullanarak HumanoidRootPart'ı alın ve var olup olmadığını bir if ifadesi ile kontrol edin.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. HumanoidRootPart'ı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.LocalPlayer
    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)
    end
    end
    end

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.
  1. 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.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
    RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 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.

alt

Konum ve görünümü değiştirme

  1. Önceki örnekteki kodu kullanarak, cameraPosition'ı tüm 3 boyuta aynı miktarı ekleyecek şekilde değiştirin.

    alt


    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 = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 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.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local 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!

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.