การควบคุมกล้องของผู้ใช้

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

มุมมองของผู้ใช้โลกได้แทนที่โดยวัตถุ Camera คุณสามารถเปลี่ยนการตอบสนองของกล้องเพื่อให้เหมาะกับประสบการณ์ของคุณในหลากหลายวิธี เช่น กล้องสามารถตอบส

การสร้างกล้องมุมที่หนึ่ง

กล้องบุคคลแรกเป็นมุมมองที่กล้องอยู่ล็อคกับหัวของตัวละครซึ่งเป็นเรื่องแม่นยำมากขึ้นสำหรับโลกแห่งความเป็นจริง มันเป็นที่รู้จักในเกมยิงและประสบการณ์เรื่องราวที่เน้นให้ผู้ใช้รู้สึกเ

กล้องมุมที่หนึ่ง
กล้อง Roblox คลาสสิก

ใน Studio วัตถุ StarterPlayer มีสมาชิกต่างๆ ที่เกี่ยวข้องกับกล้องของผู้ใช้ สมาชิก การเปลี่ยนแปลงการมุมมองกล้อง จะกำหนดวิธีการที่กล้องปฏิสัมพันธ์

  1. เลือก StarterPlayer

  2. เปลี่ยนโหมดกล้องเป็น ล็อคคนแรก นี่จะรับประกันว่ากล้องของผู้ใช้ไม่ได้เคลื่อนไหวออกจากหัวของพวกเขา

  3. แอ็คชัน

การสร้างกล้องมุมสูง

มุมมองข้างหน้าจะเลื่อนไว้ข้างหน้าของตัวละคร ให้กล้องอยู่ในตำแหน่งที่แน่นอน เพื่อให้โลกมีมิติสองมิติ

การเขียนสคริปต์กล้อง

  1. ขยาย StarterPlayer และใน StarterPlayerScripts เพิ่ม LocalScript ที่มีชื่อว่า CameraManager

  2. ในด้านบนของสคริปต์, คัดลอกและวางตัวอย่างโค้ดต่อไปนี้เพื่อรับ บริการผู้เล่น แล้วในตัวแปรใหม่ รับผู้ใช้ท้องถิ่น


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. สร้างฟังก์ชันที่เรียกว่า updateCamera ระบบนี้มีระบบประสาทที่จำเป็นสำหรับการรับและการตั้งตำแหน่งใหม่สำหรับกล้อง


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. ในตัวฟังก์ชัน รับรุ่นตัวละครของผู้ใช้และตรวจสอบว่ามีอยู่โดยใช้ if สถานะ


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

ชี้กล้อง

โมเดลตัวละครทั้งหมดมีส่วนที่มีชื่อว่า HumanoidRootPart ซึ่งสามารถใช้เพื่อรับตำแหน่งของตัวละครในโลกนี้ได้ นี่จะตั้งตำแหน่งที่กล้องมุ่งไปที่

  1. ใช้ FindFirstChild เพื่อรับส่วนหัวใจของมนุษย์และตรวจสอบว่ามันมีอยู่โดยใช้ 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. ตำแหน่งของ HumanoidRootPart คือจริง 2 สตัดด้านล่างของหัวของผู้ใช้ เพื่อแก้ไขสิ่งนี้ เพิ่ม Vector3 ใหม่ด้วยความสูง 2 สตัด ไปยังตำแหน่งราก


    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

ตั้งต้นตำแหน่งกล้อง

กล้องยังต้องมีตำแหน่ง เพื่อให้มุมมองของผู้ใช้มีลักษณะเหมือน 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 - ฟังก์ชันที่จะต้องผูกกับขั้นตอนการเรนเดอร์
  1. ใช้ RunService:BindToRenderStep() เพื่อผูกหน้าฟังก์ชัน updateCamera ให้เป็นขั้นตอนการเรนเดอร์


    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. รหัสใช้กุญแจ A และ D เพื่อย้ายตัวละครของคุณไปด้านข้าง

การสร้างกล้องสามมิติ

โครงสร้างพื้นฐานในการรับตำแหน่งของผู้ใช้และการปรับปรุงตำแหน่งของกล้องทุกเฟรมสามารถปรับแต่งได้หลายสไตล์กล้องเช่น กล้องอิสโมเทรีย์ กล้องอิสโมเทรีย์เป็นการดู 3D ที่

การเปลี่ยนตำแหน่งและมุมมอง

  1. โดยใช้โค้ดจากตัวอย่างก่อนหน้านี้, ปรับแต่ง cameraPosition เพื่อเพิ่มจำนวนเงินเดียวกันให้กับทุก 3 มิติ


    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. การเปลี่ยนแปลงสมบัติของกล้อง FieldOfView จะเหมือนกับการซูมมันเข้าและออก ซึ่งสามารถให้มุมมองดูดี ลองตั้งมันให้เป็นค่า 20 เพื่อซูมเข้า แ


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

โดยการเปลี่ยนวิธีที่กล้องปฏิสัมพันธ์ คุณสามารถสร้างลุคใหม่สำหรับประสบการณ์ของคุณ ดูว่าคุณสามารถเปลี่ยน cameraPosition เพื่อสร้างกล้องมุมสูงด้วยสคริปเดียวกัน ลองปรับการตั้งค่