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.
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ử.
Chọn StarterPlayer .
Đổ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ọ.
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
Expand StarterPlayer, and in StarterPlayerScripts add a LocalScript named CameraManager .
Ở 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.LocalPlayerTạ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.LocalPlayerlocal function updateCamera()endTrong 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.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
Đ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.
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.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendVị 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.LocalPlayerlocal HEIGHT_OFFSET = 2local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)endendend
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.
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.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 24local HEIGHT_OFFSET = 2local function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal 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)endendendRunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)Thử nghiệm mã của bạn. Sử dụng các A và D 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
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.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenlocal 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)endendendRunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)Đổ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.LocalPlayerlocal camera = workspace.CurrentCameralocal CAMERA_DEPTH = 64local HEIGHT_OFFSET = 2camera.FieldOfView = 20local 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