Camera

แสดงที่เลิกใช้งานแล้ว

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

ไม่ซ้ำ

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

คุณสมบัติกล้องที่สำคัญที่สุดคือ:

  • Camera.CFrame ซึ่งเป็นตัวแทนตำแหน่งและการจัดเรียงของกล้อง

  • Camera.CameraType ซึ่งอ่านโดยสคริปต์กล้องของประสบการณ์และกำหนดวิธีการที่กล้องควรอัปเดตแต่ละเฟรม

  • Camera.CameraSubject ซึ่งอ่านโดยสคริปต์กล้องของประสบการณ์และกำหนดว่าต้องให้กล้องติดตามวัตถุใด

  • Camera.FieldOfView ซึ่งเป็นตัวแทนของขอบเขตที่มองเห็นได้ของโลก

  • Camera.Focus ซึ่งแทนที่จุดที่กล้องมองไป สิ่งนี้มีความสำคัญเนื่องจากวิดีโอบางอันจะมีรายละเอียดมากขึ้นและอัปเดตบ่อยขึ้นขึ้นอยู่กับว่าใกล้จุดโฟกัสมากแค่ไหน

ดู การปรับแต่งกล้อง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการปรับแต่งและปรับแต่งพฤติกรรมของกล้อง

สรุป

คุณสมบัติ

  • อ่านพร้อมๆ กัน

    Datatype.CFrame ของ Camera กำหนดตำแหน่งและการจัดตำแหน่งในโลก 3D

  • อ่านพร้อมๆ กัน

    Class.Humanoid หรือ BasePart ที่เป็นเรื่อง Camera

  • อ่านพร้อมๆ กัน

    ระบุ Enum.CameraType ที่จะอ่านโดยสคริปต์กล้อง

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ตั้งค่ามุมมองของมุมมองด้านข้างของกล้อง

  • อ่านพร้อมๆ กัน

    ตั้งค่ามุมมองแนวตั้งของกล้อง

  • อ่านพร้อมๆ กัน

    กำหนดค่า FOV ของ Camera ที่คงที่ภายใต้การเปลี่ยนแปลงขนาดของ viewport

  • อ่านพร้อมๆ กัน

    ตั้งค่าพื้นที่ใน 3D ที่มีความสำคัญสูงสุดโดยระบบกราฟิกของ Roblox

  • อ่านพร้อมๆ กัน

    เปิด/ปิดการติดตามการเคลื่อนไหวหัวของผู้เล่นโดยอัตโนมัติโดยใช้อุปกรณ์ VR

  • อ่านพร้อมๆ กัน

    ตั้งค่าขนาดของมุมมองของผู้ใช้เมื่อใช้ VR

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ตั้งค่ามุมมองของสายตากล้องตามแกนด้านข้างที่ยาวที่สุด

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายค่าเท่าทวีประมาณ Z ที่เป็นบวกของกล้องใกล้เคียงกับเครื่องตัดภาพ

  • อ่านพร้อมๆ กัน

    เปิด/ปิดการใช้งานการเอียงและการหมุนจากสมบัติสมบัติ Camera.CFrame ขณะที่ผู้ใช้กำลังใช้อุปกรณ์ VR

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ขนาดของพื้นที่ปลอดภัยของอุปกรณ์บนอุปกรณ์ Roblox

วิธีการ

  • GetPartsObscuringTarget(castPoints : Array,ignoreList : Instances):Instances

    กลับรายการ BaseParts ที่มีสีเข้ามาในขณะที่เส้นสายของมุมมองระหว่างกล้อง Camera.CFrame และจุดมุ่งหมาย

  • กลับไปที่ CFrame ที่เรนเดอร์อยู่ โดย Camera จะถูกนำมาใช้ และผลกระทบของอุปกรณ์ VR จะถูกนำมาใช้

  • กลับรายการโรลปัจจุบันหรือการหมุนรอบแกน Z ของกล้องที่ใช้กับ Camera โดยใช้ Camera:SetRoll()

  • เขียนพร้อมๆ กัน

    สร้างหน่วย Ray จากตำแหน่งบนหน้าจอ (ในพิกเซล) ที่มีความลึกจาก Camera ที่ออกแบบในทิศทางของกล้อง จัดการสำหรับ GUI ในเซ็ต

  • SetRoll(rollAngle : number):void

    ตั้งค่าการหมุนปัจจุบันที่ใช้รอบ Z ของกล้อง

  • เขียนพร้อมๆ กัน

    สร้างหน่วย Ray จากตำแหน่งบนหน้าตาราง (ในพิกเซล) ที่มีความลึกจาก Camera ที่มีทิศทางในทิศทางของกล้อง ไม่นับรวม CoreUISafeInsets ใน

  • เขียนพร้อมๆ กัน

    กลับตำแหน่งหน้าจอและความลึกของ Datatype.Vector3``worldPoint และว่าตำแหน่งนี้อยู่ในขอบเขตของหน้าจอหรือไม่ คำนวณ GUI ในส่วนของเครื่อง

  • เขียนพร้อมๆ กัน

    กลับตำแหน่งหน้าจอและความลึกของ Datatype.Vector3``worldPoint และว่าจุดนี้อยู่ในขอบเขตของหน้าจอหรือไม่ ไม่นับรวม GUI ในสเต็ป

  • ZoomToExtents(boundingBoxCFrame : CFrame,boundingBoxSize : Vector3):void

คุณสมบัติ

CFrame

อ่านพร้อมๆ กัน

สมบัตินี้คือ CFrame ของ Camera ซึ่งระบุตำแหน่งและทิศทางในโลก 3D โปรดทราบว่าบางการเปลี่ยนแปลง เช

คุณสามารถย้ายกล้องโดยการตั้งค่าสมบัตินี้ อย่างไรก็ตาม สคริปต์กล้องเริ่มต้นก็จะตั้งค่าเช่นกันดังนั้นคุณควรจะ:

  • ตั้งกล้อง Camera.CameraType เป็น Enum.CameraType.Scriptable เพื่อให้สคริปต์กล้องเริ่มต้นไม่ได้ปรับปรุง CFrame ของกล้อง วิธีนี้เป็นวิธีที่เรียบง่ายและแนะนำในกรณีส่วนให

  • แทนที่สคริปต์กล้องเริ่มต้นด้วยสคริปต์อื่น ๆ ทั้งหมด หากวิธีนี้ไม่ได้รับการรับรองจากคุณสมบัติการใช้งานกล้องเริ่มต้น

วิธีที่เข้าใจได้ที่สุดในการวางตำแหน่งและการจัดเรียง Camera คือการใช้ CFrame.lookAt() คอนสตรักเต


local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
local pos = Vector3.new(0, 10, 0)
local lookAtPos = Vector3.new(10, 0, 0)
workspace.CurrentCamera.CFrame = CFrame.lookAt(pos, lookAtPos)

แม้ว่ากล้องสามารถวางได้ในลักษณะที่แสดงด้านบน คุณอาจต้องการให้มันเคลื่อนที่อย่างราบรื่นจากหนึ่ง CFrame ไปยังอื่น สำหรับสิ่งนี้ คุณสามารถเป็นอนิเมชันได้หรือไม่ก็ได้:

  • ตั้งตำแหน่งกล้องของคุณทุกเฟรมด้วย RunService:BindToRenderStep() และวิธีการ CFrame:Lerp()

  • สร้างและเล่น Tween ที่เปิดใช้งานตำแหน่ง/การจัดเรียงของกล้อง:


    local Players = game:GetService("Players")
    local TweenService = game:GetService("TweenService")
    local camera = workspace.CurrentCamera
    camera.CameraType = Enum.CameraType.Scriptable
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local pos = camera.CFrame * Vector3.new(0, 20, 0)
    local lookAtPos = character.PrimaryPart.Position
    local targetCFrame = CFrame.lookAt(pos, lookAtPos)
    local tween = TweenService:Create(camera, TweenInfo.new(2), {CFrame = targetCFrame})
    tween:Play()

CameraSubject

อ่านพร้อมๆ กัน

CameraSubject ยอมรับการเปลี่ยนแปลงที่หลากหลายของ Instances สคริปต์กล้องเริ่มต้นจะตอบสนองต่อการตั้งค่าที่พร้อมใช้งานได้อย่างแตกต่างกัน:

  • โดยปกติสคริปต์กล้องจะติดตามสถานะของตัวละครท้องถิ่นและ Humanoid ของกล้อง

  • เมื่อตั้งค่าเป็น BasePart คะแนนตำแหน่งกล้องจะติดตามตำแหน่งของมันโดยมีค่าเฉลี่ยในกรณีของ VehicleSeats

กล้องสามารถตั้งได้ที่ nil ไม่สามารถตั้งได้ที่ nil ต้องการที่จะทำเช่นนี้จะย้อนกลับไปยังมูลค่าก่อนหน้าของมัน

เพื่อกู้คืน เครื่องมือกล้อง ไปยังค่าเริ่มต้นของมัน, ตั้งค่าให้กับตัวละครท้องถิ่นของคุณ Humanoid :


local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
local function resetCameraSubject()
if workspace.CurrentCamera and localPlayer.Character then
local humanoid = localPlayer.Character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
workspace.CurrentCamera.CameraSubject = humanoid
end
end
end

CameraType

อ่านพร้อมๆ กัน

สคริปต์กล้อง Roblox เริ่มต้นมีสามสิ่งที่เป็นสมบัติอยู่ การตั้งค่าค่านี้จะเปลี่ยนแปลงระหว่างสิ่งเหล่านี้ เมื่อการตั้งค่าค่านี้เปิดใช้งาน สิ่งต่อไปนี้จะไม่ทำงานอย่างถูกต้อ

สคริปต์กล้องเริ่มต้นจะไม่เคลื่อนที่หรือปรับปรุงกล้องหาก CameraType กำหนดเป็น Enum.CameraType.Scriptable สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตําแหน่งและการจัดเรียงกล้องโดยใช้คลาส

สำหรับทุกการตั้งค่า CameraType ยกเว้น Class.Camera.CameraSubject|CameraSubject สมบัติรูป Enum.CameraType.Scriptable จะแทนที่ตัวอันใดของสมบัติรูปที่กล้องของคุณติดตั้งไว้

DiagonalFieldOfView

ไม่ซ้ำ
อ่านพร้อมๆ กัน

ตั้งค่าจำนวนองศาในแนวทาง (จากมุมหนึ่งของหน้าต่างไปยังมุมหนึ่งที่ตรงข้าม) ที่กล้องสามารถมองเห็นได้ ดูที่ FieldOfView สำหรับคำอธิบายทั่วไปเกี่ยวกับพื้นที่มุมมอง

หมายเหตุว่า DiagonalFieldOfView เป็นตัวแทนของพื้นที่มุมมองที่มองเห็นได้โดย Camera การเรนเดอร์เป็นพื้นที่เต็มขนาดซึ่งอาจถูกปิดกั้นโดยห่องหรือการตั

FieldOfView

อ่านพร้อมๆ กัน

สมบัติ FieldOfView ระบุว่ากล้องสามารถมุมมองได้กี่องศาในแนวตั้ง สมบัตินี้ถูกแนบมาระหว่าง 1 และ 120 องศา และเริ่มต้นที่ 70 สมบัติที่ต่ำมากหรือสูงเกินไปจะไม่แนะนำให้กั

หมายเหตุว่าการปรับแต่งขนาดเครื่องแบบถูกบังคับ ซึ่งหมายถึงว่ามุมมองแนวตั้งและแนวนอนของสกรีนเสมอเกี่ยวข้องกับอัตราส่วนทางด้านหน้าจอ

การใช้งานที่แนะนำสำหรับ FieldOfView (FOV) รวมถึง:

  • ลด FOV เพื่อให้ประสบการณ์ของการซูม เช่นเมื่อใช้แว่นส่องทางไกล
  • เพิ่ม FOV เมื่อผู้เล่น "วิ่งเร็ว" เพื่อให้ประสบการณ์เหมือนขาดการควบคุม

หมายเหตุว่า FieldOfView เป็นตัวแทนของสนามมุมที่มองเห็นได้ซึ่งปรากฏบนพื้นหน้าจอที่อาจถูกปิดกั้นโดยห่องหรือการตัดหน้าจอบางอุปกรณ์ ดู Class.Camera. ViewportSize|

FieldOfViewMode

อ่านพร้อมๆ กัน

สายตาของกล้อง (FOV) ต้องปรับให้เป็นปัจจุบันเพื่อสะท้อนการเปลี่ยนแปลง ViewportSize เมื่อสายตาของ FieldOfViewMode จะได้รับการเปลี่ยนแปลง สายตาของ FieldOfView จะได้รับการเปลี่ย

เช่นเมื่อค่านี้กำหนดเป็น Enum.FieldOfViewMode.Vertical จะปรับปรุง FOV แนวตั้งเมื่อขนาดตัวอ่านเปลี่ยนแปลง แต่จะไม่เปลี่ยนแปลง FOV แนวตั้ง หากค่านี้กำหนดเป็น

Focus

อ่านพร้อมๆ กัน

การดำเนินการทางกราฟิกบางอย่างที่เครื่องประมวลผลทำ เช่น การปรับแต่งการจัดแสง อาจใช้เวลาหรือความพยายามทางคอมพิวเตอร์เพื่อสำเร็จ สิ่งนี้สามารถ

สคริปต์กล้อง Roblox เริ่มต้นจะต

โฟกัส ไม่มีผลต่อตำแหน่งหรือตำแหน่งของกล้อง; ดู Camera.CFrame สำหรับสิ่งนี้

HeadLocked

อ่านพร้อมๆ กัน

เปิด/ปิดการติดตามหัวของผู้ใช้โดยอัตโนมัติโดยใช้ VR อุปกรณ์เมื่อ true (ปกติ) ผู้เล่น Class.Camera.CFrame กับ


local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
-- นี่จะเท่ากับ Camera:GetRenderCFrame()
local renderCFrame = camera.CFrame * headCFrame

มันเป็นการแนะนำให้ ไม่ ปิดใช้งานสมบัติสินค้านี้ด้วยเหตุผลต่อไปนี้:

  • ผู้เล่นอาจเผชิญปัญหาสุขภาพจากการเคลื่อนไหวหากไม่มีวิธีการติดตามหัวที่เทียบเท่าไม่ได้
  • เครื่องมือ Roblox ปรับปรุงความแลคเมื่อ เฮดล็อค เป็นจริง

ดูเพิ่มเติม

  • VRService:GetUserCFrame() ซึ่งสามารถใช้เพื่อรับ CFrame ของหัว
  • VRService:RecenterUserHeadCFrame() ซึ่งใช้ในการเรียกใช้หัวให้อยู่ในตำแหน่งและตำแหน่งของอุปกรณ์ VR ปัจจุบัน
  • การใช้งาน Camera:GetRenderCFrame() ซึ่งกลับมาในรูปแบบ Camera.CFrame รวมกับ CFrame ของหัวผู้ใช้

HeadScale

อ่านพร้อมๆ กัน

HeadScale เป็นขนาดของมุมมองของผู้ใช้เมื่อใช้ VR

ขนาดของ 1 stud ใน VR คือ 0.3 meters / HeadScale ซึ่งหมายถึงว่าค่า HeadScale ที่ใหญ่ขึ้นจะเท่ากับโลกที่ดูเล็กลงจากมุมมองของผู้ใช้เมื่อใช้อ

สมบัตินี้จัดการโดยอัตโนมัติโดย VRService.AutomaticScaling เพื่อให้มุมมองของผู้เล่นเข้ากับขนาดของ อวาตาร์หากคุณตั้งใจที่จะควบคุม HeadScale ด้วยตัวเอ

คุณสมบัตินี้ไม่ควรสับสนกับ Humanoid.HeadScale ซึ่งเป็นพ่อของ NumberValue ที่มี Humanoid เพื่อควบคุมการเคลื่อนไหวของมัน

MaxAxisFieldOfView

ไม่ซ้ำ
อ่านพร้อมๆ กัน

คุณสมบัติ MaxAxisFieldOfView ตั้งค่าว่ากล้องสามารถมุมมองได้กี่องศาตามแกนมุมมองที่ยาวที่สุด

เมื่อแกนยาวที่ยาวที่สุดคือแกนแนวตั้ง, คุณสมบัตินี้จะปฏิสัมพันธ์กับคุณสมบัติ FieldOfView โดยทั่วไป ในกรณีที่อุปกรณ์อยู่ในแนวตั้ง ใน

NearPlaneZ

อ่านอย่างเดียว
ไม่ซ้ำ
อ่านพร้อมๆ กัน

สมบัติ NearPlaneZ อธิบายว่ากล้องอยู่ไกลเท่าไหร่จากเครื่องบินที่กำลังเคลื่อนเข้าใกล้ ใน studs กล้องเป็นเครื่อง

Diagram showing how the NearPlaneZ clips (does not render) 3D content between the plane and the camera.

VRTiltAndRollEnabled

อ่านพร้อมๆ กัน

สมบัตินี้เปิด/ปิดการใช้งานเมื่อใช้ VR อุปกรณ์ขณะที่ผู้เล่นกำลังใช้งาน

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

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

ViewportSize

อ่านอย่างเดียว
ไม่ซ้ำ
อ่านพร้อมๆ กัน

ViewportSize กลับขนาดของพื้นที่ปลอดภัยของอุปกรณ์บนหน้าจอปัจจุบัน พื้นที่นี้เป็นรูปสี่เหลี่ยมผืนผ้าที่รวมถึงพื้นที่ Roblox สูงสุด

Mobile device screen with cutout showing device safe area.

ตามที่อธิบายไว้ข้างต้น, ViewportSize ไม่เท่ากับขนาดพื

สุดท้าย, หมายเหตุว่า ViewportSize ไม่ใช่ขนาดหน้าตารางที่กล้องใช้สำหรับการเรนเดอร์ (กล้องเรนเดอร์ในพื้นที

การอัปเดตกล้อง

เฉพาะ Camera ที่ได้รับการอ้างอิงโดย Class.Workspace. CurrentCamera เท่านั้นที่มี Class.Camera.ViewportSize|ViewportSize

วิธีการ

GetPartsObscuringTarget

Instances

วิธีนี้กลับค่ารายการ BaseParts ที่ซ่อนเส้นสายของมุมมองระหว่าง Camera.CFrame และ Vector3

ตัวแปร castPoints ให้เป็นรายการของตำแหน่ง Vector3 ตัวอย่าง หมายเหตุว่าตัวอย่างของ BaseParts ที่กลับมาให้นั้น


local camera = workspace.CurrentCamera
local castPoints = {
Vector3.new(0, 10, 0),
Vector3.new(0, 15, 0)
}
local ignoreList = {}
local partsObscuringTarget = camera:GetPartsObscuringTarget(castPoints, ignoreList)

หาก Terrain ปิดบังจุดโค้งของคาสต์ BaseParts ปิดบังจุดโค้งของคาสต์ระหว่างการปิดบัง Terrain และการปิดบังจะไม่ถูกส่งกลับ

พารามิเตอร์

castPoints: Array

รายการของ Vector3 ตำแหน่งของคะแนนส่วนตรี

ignoreList: Instances

รายการ Instances ที่ควรได้รับการเพิกเฉยร่วมกับบุตรหลานของพวกเขา


ส่งค่ากลับ

Instances

รายการของ BaseParts ที่มอบให้เห็นเส้นสายของมุมมองระหว่างกล้องของ Camera.CFrame และ castPoints

ตัวอย่างโค้ด

X-Ray Function

local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local function XRay(castPoints, ignoreList)
ignoreList = ignoreList or {}
local parts = camera:GetPartsObscuringTarget(castPoints, ignoreList)
for _, part in parts do
part.LocalTransparencyModifier = 0.75
for _, child in pairs(part:GetChildren()) do
if child:IsA("Decal") or child:IsA("Texture") then
child.LocalTransparencyModifier = 0.75
end
end
end
end
XRay({ Vector3.new() })

GetRenderCFrame

ฟังก์ชันนี้กลับค่า CFrame ของ Camera ในขณะที่มันเรนเดอร์รวมถึงผลกระทบของ VR (การเปลี่ยนแปลงห

เช่นเมื่อใช้ VR จะมีการเรนเดอร์ Camera จริงๆ ใน CFrame ต่อไปนี้:


local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)
headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale
renderCFrame = camera.CFrame * headCFrame

การเรนเดอร์ของกล้อง CFrame จะเปลี่ยนแปลงเฉพาะส่วนหัวเมื่อค่า Camera.HeadLocked เป็นจริง


ส่งค่ากลับ

The CFrame the Camera กำลังถูกเรนเดอร์ที่นี่

GetRoll

ฟังก์ชันนี้กลับมาในรูปอินทาเรียนตามที่ใช้กับ Camera โดยใช้ Camera:SetRoll() รีลเป็นการหมุนรอบ Z ของกล้อง

ฟังก์ชันนี้เฉพาะการกลับมาเท่านั้นที่ใช้ฟังก์ชัน Camera:SetRoll() เท่านั้น การกลับมาโดยการกลับมาโดยตรงไปยัง Camera.CFrame ของกล้องไม่ได้รับการนับ


local function getActualRoll()
local camera = workspace.CurrentCamera
local trueUp = Vector3.new(0, 1, 0)
local cameraUp = camera:GetRenderCFrame().upVector
return math.acos(trueUp:Dot(cameraUp))
end

ส่งค่ากลับ

การเลื่อนที่ใช้ปัจจุบันโดย Camera:SetRoll() ในรัศมี

ตัวอย่างโค้ด

Camera:GetRoll

local currentRoll = math.deg(workspace.CurrentCamera:GetRoll()) -- Gets the current roll of the camera in degrees.
if currentRoll ~= 20 then
workspace.CurrentCamera:SetRoll(math.rad(20)) -- If the camera isn't at 20 degrees roll, the roll is set to 20 degrees.
end

ScreenPointToRay

เขียนพร้อมๆ กัน

ฟังก์ชันนี้สร้างหน่วย Ray จากตำแหน่ง 2D บนหน้าจอ (กำหนดในพิกเซล) โดยคำนวณ GUI ใส่ตัว ฟังก์ชันนี้เริ่มต้นจาก Datatype.Vector

เนื่องจากฟังก์ชันนี้ยอมรับการติดตั้ง GUI ในตัว, ค่าเริ่มต้นที่ประมาณ GUI องค์ประกอบ (เช่นจากแถบด้านบน) จะถูกนับ. นี่หมายความว่าตำแหน่งหน้าจอที่กำหนดจะเร

เนื่องจาก Ray ที่สร้างเป็นเครื่องยนต์ มีความยาวเพียงหนึ่งช่อง เพื่อสร้างเครื่องยนต์ยาว กำลังติดตาม:


local camera = workspace.CurrentCamera
local length = 500
local unitRay = camera:ScreenPointToRay(100, 100)
local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)

คุณสมบัตินี้ใช้ได้เฉพาะกล้อง Workspace ปัจจุบัน กล้องอื่น ๆ เช่นกล้องที่คุณสร้างสำหรับ ViewportFrame มีขนาด viewport เริ่มต้นของ

พารามิเตอร์

ตําแหน่งในแกน X ในพิกเซลของจุดหน้าจอที่ต้องการจะเริ่มต้น Ray นี้ ตําแหน่งนี้จัดการสําหรับ GUI ในเซ็ต

ตําแหน่งในแกน Y ในพิกเซลของจุดหน้าจอที่ต้องการจะเริ่มต้น Ray นี้ ตําแหน่งนี้จะนับรวม GUI ในเซ็ต

depth: number

ความลึกจาก Camera ใน studs เพื่อออเซ็ตต้นกำเนิดของ Ray

ค่าเริ่มต้น: 0

ส่งค่ากลับ

หน่วย Ray ซึ่งมีต้นกำเนิดจากตำแหน่งโลก Vector3 ที่ให้ได้ในส่วนของหน้าจอที่ให้ได้ในความลึก Camera นี้ รังสีนี้ออกแนวในทิศทางของ

SetRoll

void

คุณสมบัตินี้อาจไม่ได้รับการปรับปรุงแล้วและไม่ได้ถือเป็นมาตรฐานที่ดีที่สุดแล้ว

ฟังก์ชันนี้ตั้งค่ารอลล์ปัจจุบันในรัศมี, ในรัศมี, ของ Camera รอลล์ถูกประยุกต์หลังจาก Camera.CFrame และเป็นตัวแทนการหมุนรอบ ๆ กล้อง Z-axis ของกล้อง

เช่น, ต่อไปนี้จะย้อนกลับ Camera :


workspace.CurrentCamera:SetRoll(math.pi) -- math.pi radians = 180 degrees

ไม่มีผลกระทบต่อการเลื่อนใด ๆ ที่ประยุกต์โดยใช้คุณสมบัติ Camera.CFrame รอลที่ใช้งานโดยใช้ SetRoll ไม่สะท้อนในสมบัติ Camera.CFrame ที่กลับมา แ

คุณสมบัตินี้ใช้ได้เฉพาะเมื่อ Camera.CameraType กำหนดเป็น 'Scriptable' ไม่ว่าจะใช้สคริปต์กล้องปกติหรือไม่ หากใช้กับ Class.Camera.CameraType อื่น ๆ จะแสดงคำเตือนในออก

การเลื่อนใด ๆ ที่ใช้งานได้ด้วยคุณสมบัตินี้จะสูญหายเมื่อ <a href="/reference/engine/datatypes">Class.Camera.CameraType</a> เปลี่ยนจาก <a href="https://www.scribble.com/">เป็น\

เพื่อดึงรายการโรลใช้งานนี้ใช้ Camera:GetRoll()

เนื่องจากฟังก์ชันนี้ไม่ได้รับการอัปเดต คุณจึงได้รับคำแนะนำให้ใช้การลอกอินแทนไปยัง Camera โดยใช้สมบัติสมบัติ Camera.CFrame ตัวนี้ เช่น:


local currentCFrame = workspace.CurrentCamera.CFrame
local rollCFrame = CFrame.Angles(0, 0, roll)
workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame

พารามิเตอร์

rollAngle: number

มุมหมุน ในรัศมี ที่จะใช้กับ Camera


ส่งค่ากลับ

void

ViewportPointToRay

เขียนพร้อมๆ กัน

ฟังก์ชันนี้สร้างหน่วย Ray จากตำแหน่ง 2D ใน viewport ที่ปลอดภัย ตามที่กำหนดในพิกเซล รังสีมาจาก Vector3 เทียบเท่าของตำแหน่ง 2D ในโลกที

ตามที่ปรากฏด้านล่าง, (0, 0) ตรงกับตรงกับจุดด้านบนซ้ายของ Roblox บาร์ด้านบน นี่หมายความว่าตำแหน่ง 2D ไม่ได้ ไม่ Diagram showing the origin of the device safe area viewport coordinate system.

หมายเหตุว่า UI ติดตั้งใช้ระบบจุดสองมิติที่แตกต่างกัน ( GuiObject.AbsolutePosition ใช้ระบบจุดสองมิติของ CoreUISafeInsets ในข

โปรดทราบว่าคุณสมบัตินี้ใช้ได้เฉพาะกล้อง Class.Workspace. CurrentCamera เท่านั้น กล้องอื่น ๆ เช่นกล้องที่คุณส

คุณสมบัตินี้สามารถใช้ร่วมกับคุณสมบัติ ViewportSize เพื่อสร้างลำแสงจากศูนย์กลางของหน้าจอ, ตัวอย่างเช่น:


local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local viewportPoint = camera.ViewportSize / 2
local unitRay = camera:ViewportPointToRay(viewportPoint.X, viewportPoint.Y, 0)

เนื่องจาก Ray ที่สร้างเป็นเครื่องยนต์ มีความยาวเพียงหนึ่งช่อง เพื่อสร้างเครื่องยนต์ยาว กำลังติดตาม:


local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local length = 500
local unitRay = camera:ScreenPointToRay(100, 100)
local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)

พารามิเตอร์

ตําแหน่งในแกน X ในพิกเซลของจุดมุ่งหมายของ viewport ที่จะเริ่มต้น Ray ในเขตพื้นที่ปลอดภัยของอุปกรณ์

ตําแหน่งในแกน Y ในพิกเซลของจุดมุ่งหมายของ viewport ที่จะเริ่มต้น Ray ในเขตพื้นที่ปลอดภัยของอุปกรณ์

depth: number

ความลึกจาก Camera ใน studs เพื่อออเซ็ตต้นกำเนิดของ Ray

ค่าเริ่มต้น: 0

ส่งค่ากลับ

หน่วย Ray ซึ่งมีต้นกำเนิดจากตำแหน่งโลก Vector3 ที่ให้ความลึกออกไปจาก Camera นี้ เส้นรัศมีนี้ออกไปในทิศทางของ 1> Class.Camera1> นี้

WorldToScreenPoint

เขียนพร้อมๆ กัน

ฟังก์ชันนี้กลับตำแหน่งหน้าจอและความลึกของ Vector3 และว่าจุดนี้อยู่ในขอบเขตของหน้าหรือไม่

ฟังก์ชันนี้จะนำเข้า GUI ปัจจุบันที่อยู่ในขณะนี้ เช่น พื้นที่ที่ได้รับการเปลี่ยนแปลงโดยแถบด้านบน ซึ่งหมายถึงตำแหน่ง 2D ที่กลับมาจะอยู่ในเงื่อนไขเดียวกั


local camera = workspace.CurrentCamera
local worldPoint = Vector3.new(0, 10, 0)
local vector, onScreen = camera:WorldToScreenPoint(worldPoint)
local screenPoint = Vector2.new(vector.X, vector.Y)
local depth = vector.Z

หมายเหตุว่าคุณสมบัตินี้ไม่ได้ประมาณรังสีและตัวแปรที่ระบุว่า worldPoint อยู่ภายในขอบเขตของหน้าจอจะเป็น true ไม่ว่าจะเป็นว่าจุดอยู่ภายใต้การ

พารามิเตอร์

worldPoint: Vector3

ตําแหน่งโลก Vector3


ส่งค่ากลับ

ลำดับที่ประกอบด้วย:

  • A Vector3 ซึ่ง X และ Y ส่วนประกอบแทนที่ความเคลื่อนไหวของ worldPoint จากมุมมองด้านบนซ้ายของหน้าจอในพิกเซล ส่วนประกอบ Datatype.Vector3

  • บูลีนที่ระบุว่า worldPoint อยู่ภายในขอบเขตของหน้าจอ

WorldToViewportPoint

เขียนพร้อมๆ กัน

ฟังก์ชันนี้กลับตำแหน่งหน้าจอและความลึกของ Vector3 และว่าจุดนี้อยู่ในขอบเขตของหน้าหรือไม่

ฟังก์ชันนี้ไม่ได้พิจารณาประตูเมนูปัจจุบันที่อยู่ในตำแหน่งด้านบนของแถบด้านบน เช่นพื้นที่ที่ไม่ได้ใช้งานแสดงผลจากมุมมองด้านซ้ายบน หากคุณไม่ได้ใช้ Class.ScreenGui.Ignore

สำหรับหน้าตารางอื่นที่เป็นตัวแทนของ GUI ในเกม, ดู Camera:WorldToScreenPoint() .


local camera = workspace.CurrentCamera
local worldPoint = Vector3.new(0, 10, 0)
local vector, onScreen = camera:WorldToViewportPoint(worldPoint)
local viewportPoint = Vector2.new(vector.X, vector.Y)
local depth = vector.Z

หมายเหตุว่าคุณสมบัตินี้ไม่ได้ประมาณรังสีและตัวแปรที่ระบุว่า worldPoint อยู่ภายในขอบเขตของหน้าจอจะเป็น true ไม่ว่าจะเป็นว่าจุดอยู่ภายใต้การ

พารามิเตอร์

worldPoint: Vector3

ตําแหน่งโลก Vector3


ส่งค่ากลับ

ลำดับที่ประกอบด้วย:

  • A Vector3 ซึ่งส่วนประกอบ X และ Y ของมันเป็นตัวแทนของเวลาเมื่อเวลาเมื่อเวลาเมื่อเวลาเมื่อเวลาเมื่อเวลา

  • บูลีนที่ระบุว่า worldPoint อยู่ภายในขอบเขตของหน้าจอ

ZoomToExtents

void

พารามิเตอร์

boundingBoxCFrame: CFrame
boundingBoxSize: Vector3

ส่งค่ากลับ

void

อีเวนต์

InterpolationFinished

เหตุการณ์นี้จะเกิดขึ้นเมื่อ Camera ได้สรุปการใช้งานโดยใช้ฟังก์ชัน Camera:Interpolate()

เหตุการณ์นี้จะไม่เกิดขึ้นหาก tween ถูกขัดขวางด้วย Camera:Interpolate() โดยเรียกอีเวนต์นี้อีกครั้ง

คุณจะได้รับคำแนะนำให้ใช้ TweenService เพื่ออนิเมชัน Class.Camera แทนซึ่งเป็นไซต์ที่น่าเชื่อถือมากขึ้นและมีตัวเลือกมากขึ้นสำหรับการปรับแต่งสไตล์