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

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

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

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

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

กล้องบุคคลแรก
กล้อง Roblox คลาสสิก

ในสตูดิโอ วัตถุ StarterPlayer มีคุณสมบัติหลายอย่างที่มีผลต่อกล้องของผู้ใช้คุณสมบัติ CameraMode กำหนดวิธีที่กล้องทำงาน

  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 กล้องจะต้องมองตรงที่ด้านข้างของตัวละครโดยตรงวางกล้องไว้ที่ด้านข้างของผู้ใช้โดยเพิ่มความลึกให้กับแค่ แกน Z ของตำแหน่งกล้องโดยใช้ 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

อัปเดตกล้องปัจจุบัน

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

คุณสามารถใช้ CFrame.lookAt() เพื่ออัปเดตกล้องต้องใช้ตําแหน่งสองตําแหน่งและสร้าง CFrame ที่ตั้งอยู่ที่ตําแหน่งแรกชี้ไปที่ตําแหน่งที่สองใช้ CFrame.lookAt() เพื่อสร้าง CFrame ที่ตำแหน่งที่ cameraPosition และชี้ไปที่ 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

ซิงค์กล้อง

ขั้นตอนสุดท้ายคือการดําเนินการฟังก์ชันนี้ซ้ำๆ เพื่อให้กล้องสอดคล้องกับผู้ใช้ภาพที่ผู้ใช้เห็นจะรีเฟรชอย่างต่อเนื่องการแบ่งวินาทีที่ใช้ในการทำการคำนวณทั้งหมดที่จำเป็นเรียกว่าขั้นตอนการเรนเดอร์ render RunService:BindToRenderStep() ทำให้ง่ายต่อการดําเนินการฟังก์ชันในแต่ละเฟรมโดยยอมรับพารามิเตอร์สามตัวนี้:

  • name - ชื่อของการผูกนี้ซึ่งควรเป็นเอกลักษณ์เพื่อไม่ให้ซ้อนทับกับฟังก์ชันอื่นที่มีชื่อเดียวกัน
  • priority - ยิ่งตัวเลขสูงขึ้น ความสำคัญก็จะยิ่งสูงขึ้นฟังก์ชันนี้ควรทำงานหลังจากที่อัปเดตกล้องเริ่มต้นของ Roblox แล้ว ดังนั้นความสำคัญจะถูกตั้งเป็นระดับสูงกว่า 1 ระดับจากความสำคัญของการเรนเดอร์ของกล้องภายใน
  • 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 เพื่อย้ายตัวละครของคุณจากด้านหนึ่งไปยังอีกด้านหนึ่ง

สร้างกล้อง isometric

โครงสร้างพื้นฐานของการรับตำแหน่งของผู้ใช้และอัปเดตตำแหน่งของกล้องในแต่ละเฟรมสามารถปรับเปลี่ยนได้หลายรูปแบบกล้องอื่น ๆ เช่น กล้อง isometric กล้อง isometric เป็นมุมมอง 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 เพื่อให้ได้กล้องแบบข้างบนด้วยสคริปต์เดียวกันลองปรับการตั้งค่าเพื่อรับผลลัพธ์ที่คุณต้องการ!