Điều khiển Camera của người dùng

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Quan điểm của người dùng về thế giới được diễn tả bằng một đối tượng Camera . Bạn có thể thay đổi hành vi máy chủ để phù hợp với trải nghiệm của bạn bằng nhiều cách. Ví dụ, máy chủ có thể reagieren vào các sự kiện trên th

Tạo một Camera First-Person

Một máy quay trong suốt là một trải nghiệm xem nơi camera được giữ khóa với đầu nhân vật, điều này chính xác hơn cho cuộc sống thực. Nó thông thường được tìm thấy trong các trò chơi bắn súng và trải nghiệm câu chuyện nơi mục tiêu của người chơi.

Camera First Person
Camera Roblox Cổ Điển

Trong Studio, đối tượng StarterPlayer chứa một số tính năng ảnh hưởng đến máy ảnh của người dùng. Đối tượng CameraMode xác định cách máy ảnh hành xử.

  1. Chọn StarterPlayer .

  2. Đổi CameraMode thành LockFirstPerson . Điều này đảm bảo camera của người dùng không bị di chuyển khỏi đầu của họ.

  3. Chơi test để xem máy ảnh người chơi đầu tiên trong hành động.

Tạo một Camera Quay Bên

Một khung cảnh trượt tác cho phép giữ máy ảnh ở một vị trí cố định so với bên của nhân vật, tạo cảm giác hai chiều cho thế giới.

Lập trình máy ảnh

  1. Expand StarterPlayer, and in StarterPlayerScripts add a LocalScript named CameraManager .

  2. Ở trên cùng của script, sao chép và dán mẫu mã sau đây để nhận được Dịch vụ người chơi , và sau đó trong một biến mới nhận được người dùng địa phương.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. Tạo một chức năng tên là updateCamera . Đây giữ logik cần thiết để nhận và đặt một vị trí mới cho máy ảnh.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. Trong chức năng, lấy mô hình nhân vật của người dùng và kiểm tra có tồn tại bằng cách sử dụng if statement.


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

Đang chỉ vị trí Camera

Tất cả các mô hình nhân vật đều có một phần tên là HumanoidRootPart , which can be used to get the character's position in the world. This sets position the camera points at.

  1. Sử dụng FindFirstChild để lấy phần mềm HumanoidRoot và kiểm tra tồn tại của nó bằng cách sử dụng một if statement.


    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. Vị trí của HumanoidRootPart thực tế là 2 studs dưới đầu người dùng. Để sửa điều này, hãy thêm một Vector3 mới với chiều cao 2 studs đến vị trí của rễ.


    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

Cài đặt vị trí Camera

Máy ảnh cũng cần một vị trí. Để cho người dùng có một cái nhìn 2D bên trên của màn hình, máy ảnh cần phải nhìn trực tiếp vào bên cạnh của nhân vật. Đặt máy ảnh bên cạnh của người dùng bằng cách thêm sâu vào chỉ Z axis


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

Cập Nhật Camera Hiện Tại

Bây giờ các biến cho vị trí của máy ảnh và mục tiêu của máy ảnh đã sẵn sàng, đã đến lúc cập nhật vị trí của máy ảnh. Bạn có thể truy cập vào máy ảnh của người dùng thông qua đặt tính CurrentCamera của Workspace. Camera có một

Bạn có thể sử dụng CFrame.lookAt() để cập nhật máy ảnh. Nó bao gồm hai vị trí và tạo ra một CFrame được đặt ở vị trí đầu tiên hướng về phía sau. Sử dụng CFrame.lookAt() để tạ


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

Sincron Camera

Bước cuối cùng là chạy chức năng này lặp lại để giữ máy ảnh đồng bộ với người dùng. Hình ảnh mà người dùng thấy liên tục được cập nhật. Bước chia giây cần thiết để làm tất cả các bước tính toán được gọi là bước chia giây .

RunService:BindToRenderStep() làm cho việc thi hành một chức năng trên mỗi khung bằng cách chấp nhận ba tham số này:

  • name - Tên của cấu hình này, nó nên độc đáo để nó không va chạm với các chức năng cùng tên.
  • priority - Càng cao số lượng, càng cao ưu tiên. Chức năng này chạy sau khi cập nhật máy ảnh mặc định của Roblox, vì vậy ưu tiên được đặt càng cao hơn so với máy ảnh nội bộ của Roblox.
  • function - Chức năng để liên kết với bước render.
  1. Sử dụng RunService:BindToRenderStep() để liên kết chức năng updateCamera với bước thiết kế.


    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. Thử nghiệm mã của bạn. Sử dụng các AD keys để di chuyển nhân vật của bạn từ bên này sang bên kia.

Tạo một Camera Isometric

Cấu trúc cơ bản để nhận vị trí của người dùng và cập nhật vị trí của máy ảnh mỗi khung hình có thể được tùy chỉnh cho nhiều kiểu máy ảnh khác nhau, chẳng hạn như một máy ảnh isometrica . Một máy ảnh isometrica là một 3D view point đang đi xuống một góc n

Điều chỉnh vị trí và tầm nhìn

  1. Sử dụng mã từ ví dụ trước, chỉnh sửa cameraPosition để thêm số lượng tương tự cho tất cả 3 chiều.


    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. Đổi đặt định FieldOfView của máy ảnh sim hồi chỉnh nó thu nhỏ và lớn hơn, giúp cho view có vẻ như là một góc nhìn. Thử đặt nó vào giá trị 20 để zoom vào, và tăng khoảng cách máy ảnh từ người dùng để


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

Bằng cách thay đổi cách máy ảnh hành xử, bạn có thể tạo ra một diện mạo hoàn toàn mới cho trải nghiệm của bạn. Xem xét nếu bạn có thể thay đổi cameraPosition để có được một máy ảnh trên cả hai chân dưới cùng một kịch bản. Thử điều chỉnh cài đặt để có kết quả bạn mu