Mengontrol kamera pengguna

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tampilan pengguna terhadap dunia direpresentasikan oleh objek Camera. Anda dapat mengubah perilaku kamera untuk menyesuaikan dengan permainan Anda dengan berbagai cara. Misalnya, kamera dapat bereaksi terhadap peristiwa di dunia, seperti bergetar ketika monster berjalan melewati, atau terkunci di samping karakter pengguna, seperti dalam permainan side-scroller.

Buat kamera sudut pandang pertama

Kamera sudut pandang pertama adalah tampilan di mana kamera tetap terkunci dengan kepala karakter, yang lebih akurat dengan kehidupan nyata. Ini umum dalam permainan tembak-menembak dan cerita di mana tujuannya adalah untuk membuat pengguna merasa terbenam dalam dunia.

Kamera Sudut Pandang Pertama
Kamera Roblox Klasik

Di Studio, objek StarterPlayer berisi sejumlah properti yang mempengaruhi kamera pengguna. Properti CameraMode menentukan bagaimana kamera berperilaku.

  1. Pilih StarterPlayer.

    alt

  2. Ubah CameraMode menjadi LockFirstPerson. Ini memastikan kamera pengguna tidak bergerak menjauh dari kepala mereka.

    alt

  3. Uji coba untuk melihat kamera sudut pandang pertama dalam aksi.

Buat kamera side-scrolling

Tampilan side-scrolling menjaga kamera pada posisi tetap relatif terhadap sisi karakter, memberikan dunia nuansa dua dimensi.

alt

Skrip kamera

  1. Perluas StarterPlayer, dan di StarterPlayerScripts tambahkan LocalScript bernama CameraManager.

    alt

  2. Di bagian atas skrip, salin dan tempel contoh kode berikut untuk mendapatkan layanan Players, dan kemudian dalam variabel baru dapatkan pengguna lokal.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Buat fungsi bernama updateCamera. Ini menyimpan logika yang diperlukan untuk mendapatkan dan mengatur posisi baru untuk kamera.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. Di dalam fungsi, dapatkan model karakter pengguna dan periksa apakah itu ada dengan menggunakan pernyataan if.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

Arahkan kamera

Semua model karakter mengandung bagian bernama HumanoidRootPart, yang dapat digunakan untuk mendapatkan posisi karakter di dunia. Ini mengatur posisi yang dituju kamera.

  1. Gunakan FindFirstChild untuk mendapatkan HumanoidRootPart dan periksa apakah itu ada menggunakan pernyataan if.

    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. Posisi HumanoidRootPart sebenarnya 2 stud di bawah kepala pengguna. Untuk memperbaikinya, tambahkan Vector3 baru dengan tinggi 2 stud ke posisi root.

    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

Atur posisi kamera

Kamera juga memerlukan posisi. Untuk memberikan tampilan pengguna nuansa side-scrolling 2D, kamera perlu melihat langsung ke samping karakter. Tempatkan kamera di samping pengguna dengan menambahkan kedalaman hanya pada sumbu Z dari posisi kamera menggunakan 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

Perbarui CurrentCamera

Sekarang bahwa variabel untuk posisi kamera dan target kamera sudah siap, saatnya untuk memperbarui posisi kamera. Anda dapat mengakses kamera pengguna melalui properti CurrentCamera dari Workspace. Kamera memiliki properti CFrame untuk menentukan posisinya.

Anda dapat menggunakan CFrame.lookAt() untuk memperbarui kamera. Ini mengambil dua posisi dan membuat CFrame yang terletak di posisi pertama yang mengarah ke posisi kedua. Gunakan CFrame.lookAt() untuk membuat CFrame yang diposisikan di cameraPosition dan mengarah ke rootPosition.

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

Sinkronkan kamera

Langkah terakhir adalah menjalankan fungsi ini berulang kali untuk menjaga kamera tetap sinkron dengan pengguna. Gambar yang dilihat pengguna terus-menerus diperbarui. Detik terpisah yang dibutuhkan untuk melakukan semua perhitungan yang diperlukan disebut render step.

RunService:BindToRenderStep() memudahkan untuk mengeksekusi fungsi di setiap frame dengan menerima tiga parameter ini:

  • name - Nama pengikatan ini, yang harus unik sehingga tidak bertabrakan dengan fungsi lain dengan nama yang sama.
  • priority - Semakin tinggi angkanya, semakin tinggi prioritasnya. Fungsi ini harus dijalankan setelah pembaruan kamera default Roblox, jadi prioritas diatur satu tingkat lebih tinggi dari RenderPriority internal kamera.
  • function - Fungsi yang akan diikat ke langkah render.
  1. Gunakan RunService:BindToRenderStep() untuk mengikat fungsi updateCamera ke langkah render.

    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. Uji coba kode Anda. Gunakan tombol A dan D untuk menggerakkan karakter Anda dari sisi ke sisi.

Buat kamera isometrik

Struktur dasar untuk mendapatkan posisi pengguna dan memperbarui posisi kamera setiap frame dapat diadaptasi untuk banyak gaya kamera lainnya, seperti kamera isometrik. Kamera isometrik adalah tampilan 3D yang mengarah sedikit ke bawah pada sudut tetap menuju karakter pengguna.

alt

Modifikasi posisi dan tampilan

  1. Menggunakan kode dari contoh sebelumnya, modifikasi cameraPosition untuk menambahkan jumlah yang sama ke semua 3 dimensi.

    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. Mengubah properti FieldOfView kamera mensimulasikan zoom in dan out, yang dapat memberikan tampilan yang lebih datar. Cobalah mengatur nilainya menjadi 20 untuk memperbesar, dan meningkatkan jarak kamera dari pengguna untuk mengimbangi.

    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()

Dengan mengubah cara kamera berperilaku, Anda dapat mencapai tampilan baru untuk permainan Anda. Lihat apakah Anda dapat mengubah cameraPosition untuk mencapai kamera top-down dengan skrip yang sama. Cobalah menyesuaikan pengaturan untuk mendapatkan hasil yang Anda suka!

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.