Kontroluj kamerę użytkownika

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Widok użytkownika na świat jest reprezentowany przez obiekt Camera. Możesz zmienić zachowanie kamery, aby dostosować je do swojej gry na różne sposoby. Na przykład, kamera może reagować na wydarzenia w świecie, takie jak drżenie, gdy obok przechodzi potwór, lub być zablokowana z boku postaci użytkownika, jak w grze typu side-scroller.

Utwórz kamerę pierwszoosobową

Kamera pierwszoosobowa to widok, w którym kamera pozostaje zablokowana z głową postaci, co jest bardziej zgodne z rzeczywistością. Jest to powszechne w grach strzelankach i fabularnych, gdzie celem jest sprawienie, aby użytkownik poczuł się zanurzony w świecie.

Kamera Pierwszoosobowa
Klasyczna Kamera Roblox

W Studio obiekt StarterPlayer zawiera szereg właściwości, które wpływają na kamerę użytkownika. Właściwość CameraMode określa, jak zachowuje się kamera.

  1. Wybierz StarterPlayer.

    alt

  2. Zmień CameraMode na LockFirstPerson. To zapewnia, że kamera użytkownika nie oddala się od jego głowy.

    alt

  3. Przetestuj grę, aby zobaczyć kamerę pierwszoosobową w akcji.

Utwórz kamerę przewijającą z boku

Widok przewijający z boku utrzymuje kamerę w stałej pozycji względem boku postaci, nadając światu dwuwymiarowy charakter.

alt

Zapisz skrypt kamery

  1. Rozwiń StarterPlayer, a w StarterPlayerScripts dodaj LocalScript o nazwie CameraManager.

    alt

  2. Na początku skryptu skopiuj i wklej następujący fragment kodu, aby uzyskać usługę Players, a następnie w nowej zmiennej uzyskaj lokalnego użytkownika.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Utwórz funkcję o nazwie updateCamera. Ta funkcja zawiera logikę potrzebną do uzyskania i ustawienia nowej pozycji kamery.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. Wewnątrz funkcji uzyskaj model postaci użytkownika i sprawdź, czy istnieje, używając instrukcji if.

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

Wskazanie kamery

Wszystkie modele postaci zawierają część o nazwie HumanoidRootPart, która może być używana do uzyskania pozycji postaci w świecie. To ustawia pozycję, na którą kamera patrzy.

  1. Użyj FindFirstChild, aby uzyskać HumanoidRootPart i sprawdź, czy istnieje, używając instrukcji 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. Pozycja HumanoidRootPart jest w rzeczywistości 2 study poniżej głowy użytkownika. Aby to naprawić, dodaj nowy Vector3 z wysokością 2 study do pozycji 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

Ustaw pozycję kamery

Kamera również potrzebuje pozycji. Aby nadać widokowi użytkownika dwuwymiarowy wygląd przewijania z boku, kamera musi patrzeć bezpośrednio na bok postaci. Umieść kamerę z boku użytkownika, dodając głębokość tylko do osi Z pozycji kamery, używając 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

Zaktualizuj CurrentCamera

Teraz, gdy zmienne dla pozycji kamery i celu kamery są gotowe, czas zaktualizować pozycję kamery. Możesz uzyskać dostęp do kamery użytkownika przez właściwość CurrentCamera w Workspace. Kamera ma właściwość CFrame, aby określić swoją pozycję.

Możesz użyć CFrame.lookAt(), aby zaktualizować kamerę. Przyjmuje dwie pozycje i tworzy CFrame znajdujący się w pierwszej pozycji, skierowany w stronę drugiej. Użyj CFrame.lookAt(), aby stworzyć CFrame, który jest umiejscowiony w cameraPosition i skierowany w stronę 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

Synchronizuj kamerę

Ostatnim krokiem jest wielokrotne uruchamianie tej funkcji, aby utrzymać kamerę w synchronizacji z użytkownikiem. Obraz, który widzi użytkownik, jest stale odświeżany. Ułamek sekundy, który zajmuje wykonanie wszystkich niezbędnych obliczeń, nazywa się render step.

RunService:BindToRenderStep() ułatwia wykonanie funkcji w każdej klatce, akceptując te trzy parametry:

  • name - Nazwa tego powiązania, która powinna być unikalna, aby nie kolidowała z innymi funkcjami o tej samej nazwie.
  • priority - Im wyższa liczba, tym wyższy priorytet. Ta funkcja powinna działać po domyślnej aktualizacji kamery Roblox, więc priorytet jest ustawiony na 1 poziom wyżej niż RenderPriority wewnętrznej kamery.
  • function - Funkcja, która ma być powiązana z krokiem renderowania.
  1. Użyj RunService:BindToRenderStep(), aby powiązać funkcję updateCamera z krokiem renderowania.

    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. Przetestuj swój kod. Użyj klawiszy A i D, aby poruszać swoją postacią z boku na bok.

Utwórz kamerę izometryczną

Podstawowa struktura uzyskiwania pozycji użytkownika i aktualizowania pozycji kamery w każdej klatce może być dostosowana do wielu innych stylów kamer, takich jak kamera izometryczna. Kamera izometryczna to widok 3D skierowany lekko w dół pod stałym kątem w stronę postaci użytkownika.

alt

Zmodyfikuj pozycję i widok

  1. Używając kodu z poprzedniego przykładu, zmodyfikuj cameraPosition, aby dodać tę samą wartość do wszystkich 3 wymiarów.

    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. Zmiana właściwości FieldOfView kamery symuluje przybliżanie i oddalanie, co może nadać widokowi płaski wygląd. Spróbuj ustawić ją na wartość 20, aby przybliżyć, a następnie zwiększ odległość kamery od użytkownika, aby to zrekompensować.

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

Zmieniając sposób, w jaki zachowuje się kamera, możesz osiągnąć zupełnie nowy wygląd dla swojej gry. Sprawdź, czy możesz zmienić cameraPosition, aby uzyskać kamerę z widokiem z góry, używając tego samego skryptu. Spróbuj dostosować ustawienia, aby uzyskać rezultat, który Ci się podoba!

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.