Kullanıcının kamera kontrolü

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

İlk Kişi Kamerası
Klasik Roblox Kamerası

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.

  1. Seç Başlangıç Oyuncusu .

  2. KameraModunu İlk Kişiyi Kilitle olarak değiştirin. Bu, kullanıcının kamerasının kafasından uzaklaşmayacağını garanti eder.

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

  1. Başlangıç Oyuncusunu genişletin ve Başlangıç OyuncuScriptlerinde YerelScript adında bir CameraManager.

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

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.

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

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

  1. Ö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.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, 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.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local 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!