มุมมองของผู้ใช้โลกได้แทนที่โดยวัตถุ Camera คุณสามารถเปลี่ยนการตอบสนองของกล้องเพื่อให้เหมาะกับประสบการณ์ของคุณในหลากหลายวิธี เช่น กล้องสามารถตอบส
การสร้างกล้องมุมที่หนึ่ง
กล้องบุคคลแรกเป็นมุมมองที่กล้องอยู่ล็อคกับหัวของตัวละครซึ่งเป็นเรื่องแม่นยำมากขึ้นสำหรับโลกแห่งความเป็นจริง มันเป็นที่รู้จักในเกมยิงและประสบการณ์เรื่องราวที่เน้นให้ผู้ใช้รู้สึกเ
ใน Studio วัตถุ StarterPlayer มีสมาชิกต่างๆ ที่เกี่ยวข้องกับกล้องของผู้ใช้ สมาชิก การเปลี่ยนแปลงการมุมมองกล้อง จะกำหนดวิธีการที่กล้องปฏิสัมพันธ์
เลือก StarterPlayer
เปลี่ยนโหมดกล้องเป็น ล็อคคนแรก นี่จะรับประกันว่ากล้องของผู้ใช้ไม่ได้เคลื่อนไหวออกจากหัวของพวกเขา
แอ็คชัน
การสร้างกล้องมุมสูง
มุมมองข้างหน้าจะเลื่อนไว้ข้างหน้าของตัวละคร ให้กล้องอยู่ในตำแหน่งที่แน่นอน เพื่อให้โลกมีมิติสองมิติ
การเขียนสคริปต์กล้อง
ขยาย StarterPlayer และใน StarterPlayerScripts เพิ่ม LocalScript ที่มีชื่อว่า CameraManager
ในด้านบนของสคริปต์, คัดลอกและวางตัวอย่างโค้ดต่อไปนี้เพื่อรับ บริการผู้เล่น แล้วในตัวแปรใหม่ รับผู้ใช้ท้องถิ่น
local Players = game:GetService("Players")local player = Players.LocalPlayerสร้างฟังก์ชันที่เรียกว่า updateCamera ระบบนี้มีระบบประสาทที่จำเป็นสำหรับการรับและการตั้งตำแหน่งใหม่สำหรับกล้อง
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()endในตัวฟังก์ชัน รับรุ่นตัวละครของผู้ใช้และตรวจสอบว่ามีอยู่โดยใช้ if สถานะ
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenendend
ชี้กล้อง
โมเดลตัวละครทั้งหมดมีส่วนที่มีชื่อว่า HumanoidRootPart ซึ่งสามารถใช้เพื่อรับตำแหน่งของตัวละครในโลกนี้ได้ นี่จะตั้งตำแหน่งที่กล้องมุ่งไปที่
ใช้ FindFirstChild เพื่อรับส่วนหัวใจของมนุษย์และตรวจสอบว่ามันมีอยู่โดยใช้ if สถานะ
local Players = game:GetService("Players")local player = Players.LocalPlayerlocal function updateCamera()local character = player.Characterif character thenlocal root = character:FindFirstChild("HumanoidRootPart")if root thenendendendตำแหน่งของ HumanoidRootPart คือจริง 2 สตัดด้านล่างของหัวของผู้ใช้ เพื่อแก้ไขสิ่งนี้ เพิ่ม Vector3 ใหม่ด้วยความสูง 2 สตัด ไปยังตำแหน่งราก
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
ตั้งต้นตำแหน่งกล้อง
กล้องยังต้องมีตำแหน่ง เพื่อให้มุมมองของผู้ใช้มีลักษณะเหมือน 2D ด้านข้าง กล้องจึงต้องมองตรงไปยังด้านข้างของตัวละคร วางกล้องให้อยู่ที่ด้านข้างของผู้
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
อัปเดตกล้องปัจจุบัน
ตอนนี้เมื่อแป้นสำหรับตำแหน่งกล้องและเป้าหมายของกล้องพร้อมแล้ว ก็ถึงเวลาอัปเดตตำแหน่งของกล้อง คุณสามารถเข้าถึงกล้องผ่านทางโปรประสิทธิภาพ CurrentCamera ของ
คุณสามารถใช้ CFrame.lookAt() เพื่ออัปเดตกล้อง มันใช้ตำแหน่งสองตำแหน่งและสร้าง CFrame ที่ตั้งอยู่ที่ตำแหน่งแรกที่ชี้ไปที่ตำแหน่งที่สอง
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() ทำให้เป็นเรื่องง่ายที่จะดำเนินการฟังก์ชันในแต่ละเฟรมโดยการยอมรับสามประการนี้:
- name - ชื่อของการผูกนี้ซึ่งควรเป็นเอกลักษณ์เพื่อให้ไม่สามารถชนกับระเบียบาลอื่น ๆ ของชื่อเดียวกัน
- priority - ยิ่งตัวเลขสูงเท่าไหร่ความสูงเท่านั้น อัปเดตRoblox ดังนั้นความสูงจึงตั้งไว้สูงกว่าเป้าหมายของกล้องภายใน
- function - ฟังก์ชันที่จะต้องผูกกับขั้นตอนการเรนเดอร์
ใช้ RunService:BindToRenderStep() เพื่อผูกหน้าฟังก์ชัน updateCamera ให้เป็นขั้นตอนการเรนเดอร์
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)รหัสใช้กุญแจ A และ D เพื่อย้ายตัวละครของคุณไปด้านข้าง
การสร้างกล้องสามมิติ
โครงสร้างพื้นฐานในการรับตำแหน่งของผู้ใช้และการปรับปรุงตำแหน่งของกล้องทุกเฟรมสามารถปรับแต่งได้หลายสไตล์กล้องเช่น กล้องอิสโมเทรีย์ กล้องอิสโมเทรีย์เป็นการดู 3D ที่
การเปลี่ยนตำแหน่งและมุมมอง
โดยใช้โค้ดจากตัวอย่างก่อนหน้านี้, ปรับแต่ง cameraPosition เพื่อเพิ่มจำนวนเงินเดียวกันให้กับทุก 3 มิติ
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)การเปลี่ยนแปลงสมบัติของกล้อง FieldOfView จะเหมือนกับการซูมมันเข้าและออก ซึ่งสามารถให้มุมมองดูดี ลองตั้งมันให้เป็นค่า 20 เพื่อซูมเข้า แ
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()
โดยการเปลี่ยนวิธีที่กล้องปฏิสัมพันธ์ คุณสามารถสร้างลุคใหม่สำหรับประสบการณ์ของคุณ ดูว่าคุณสามารถเปลี่ยน cameraPosition เพื่อสร้างกล้องมุมสูงด้วยสคริปเดียวกัน ลองปรับการตั้งค่