Camera
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
วัตถุ กล้อง จะอธิบายมุมมองของโลก 3D ในประสบการณ์ที่ดำเนินอยู่ ลูกค้าแต่ละรายมีวัตถุ กล้อง ของตัวเองซึ่งอยู่ในโลกของลูกค้าที่เข้าถึงได
คุณสมบัติกล้องที่สำคัญที่สุดคือ:
Camera.CFrame ซึ่งเป็นตัวแทนตำแหน่งและการจัดเรียงของกล้อง
Camera.CameraType ซึ่งอ่านโดยสคริปต์กล้องของประสบการณ์และกำหนดวิธีการที่กล้องควรอัปเดตแต่ละเฟรม
Camera.CameraSubject ซึ่งอ่านโดยสคริปต์กล้องของประสบการณ์และกำหนดว่าต้องให้กล้องติดตามวัตถุใด
Camera.FieldOfView ซึ่งเป็นตัวแทนของขอบเขตที่มองเห็นได้ของโลก
Camera.Focus ซึ่งแทนที่จุดที่กล้องมองไป สิ่งนี้มีความสำคัญเนื่องจากวิดีโอบางอันจะมีรายละเอียดมากขึ้นและอัปเดตบ่อยขึ้นขึ้นอยู่กับว่าใกล้จุดโฟกัสมากแค่ไหน
ดู การปรับแต่งกล้อง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการปรับแต่งและปรับแต่งพฤติกรรมของกล้อง
สรุป
คุณสมบัติ
Datatype.CFrame ของ Camera กำหนดตำแหน่งและการจัดตำแหน่งในโลก 3D
ระบุ Enum.CameraType ที่จะอ่านโดยสคริปต์กล้อง
ตั้งค่ามุมมองของมุมมองด้านข้างของกล้อง
ตั้งค่ามุมมองแนวตั้งของกล้อง
กำหนดค่า FOV ของ Camera ที่คงที่ภายใต้การเปลี่ยนแปลงขนาดของ viewport
ตั้งค่าพื้นที่ใน 3D ที่มีความสำคัญสูงสุดโดยระบบกราฟิกของ Roblox
เปิด/ปิดการติดตามการเคลื่อนไหวหัวของผู้เล่นโดยอัตโนมัติโดยใช้อุปกรณ์ VR
ตั้งค่าขนาดของมุมมองของผู้ใช้เมื่อใช้ VR
ตั้งค่ามุมมองของสายตากล้องตามแกนด้านข้างที่ยาวที่สุด
อธิบายค่าเท่าทวีประมาณ Z ที่เป็นบวกของกล้องใกล้เคียงกับเครื่องตัดภาพ
เปิด/ปิดการใช้งานการเอียงและการหมุนจากสมบัติสมบัติ Camera.CFrame ขณะที่ผู้ใช้กำลังใช้อุปกรณ์ VR
ขนาดของพื้นที่ปลอดภัยของอุปกรณ์บนอุปกรณ์ Roblox
วิธีการ
กลับรายการ BaseParts ที่มีสีเข้ามาในขณะที่เส้นสายของมุมมองระหว่างกล้อง Camera.CFrame และจุดมุ่งหมาย
กลับไปที่ CFrame ที่เรนเดอร์อยู่ โดย Camera จะถูกนำมาใช้ และผลกระทบของอุปกรณ์ VR จะถูกนำมาใช้
กลับรายการโรลปัจจุบันหรือการหมุนรอบแกน Z ของกล้องที่ใช้กับ Camera โดยใช้ Camera:SetRoll()
สร้างหน่วย Ray จากตำแหน่งบนหน้าจอ (ในพิกเซล) ที่มีความลึกจาก Camera ที่ออกแบบในทิศทางของกล้อง จัดการสำหรับ GUI ในเซ็ต
ตั้งค่าการหมุนปัจจุบันที่ใช้รอบ Z ของกล้อง
สร้างหน่วย Ray จากตำแหน่งบนหน้าตาราง (ในพิกเซล) ที่มีความลึกจาก Camera ที่มีทิศทางในทิศทางของกล้อง ไม่นับรวม CoreUISafeInsets ใน
กลับตำแหน่งหน้าจอและความลึกของ Datatype.Vector3``worldPoint และว่าตำแหน่งนี้อยู่ในขอบเขตของหน้าจอหรือไม่ คำนวณ GUI ในส่วนของเครื่อง
กลับตำแหน่งหน้าจอและความลึกของ Datatype.Vector3``worldPoint และว่าจุดนี้อยู่ในขอบเขตของหน้าจอหรือไม่ ไม่นับรวม GUI ในสเต็ป
อีเวนต์
ไฟร์เมื่อ Camera ได้สิ้นสุดการดึงข้อมูลโดยใช้ Camera:Interpolate()
คุณสมบัติ
CFrame
สมบัตินี้คือ CFrame ของ Camera ซึ่งระบุตำแหน่งและทิศทางในโลก 3D โปรดทราบว่าบางการเปลี่ยนแปลง เช
คุณสามารถย้ายกล้องโดยการตั้งค่าสมบัตินี้ อย่างไรก็ตาม สคริปต์กล้องเริ่มต้นก็จะตั้งค่าเช่นกันดังนั้นคุณควรจะ:
ตั้งกล้อง Camera.CameraType เป็น Enum.CameraType.Scriptable เพื่อให้สคริปต์กล้องเริ่มต้นไม่ได้ปรับปรุง CFrame ของกล้อง วิธีนี้เป็นวิธีที่เรียบง่ายและแนะนำในกรณีส่วนให
แทนที่สคริปต์กล้องเริ่มต้นด้วยสคริปต์อื่น ๆ ทั้งหมด หากวิธีนี้ไม่ได้รับการรับรองจากคุณสมบัติการใช้งานกล้องเริ่มต้น
วิธีที่เข้าใจได้ที่สุดในการวางตำแหน่งและการจัดเรียง Camera คือการใช้ CFrame.lookAt() คอนสตรักเต
local camera = workspace.CurrentCameracamera.CameraType = Enum.CameraType.Scriptablelocal 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.CurrentCameracamera.CameraType = Enum.CameraType.Scriptablelocal player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal pos = camera.CFrame * Vector3.new(0, 20, 0)local lookAtPos = character.PrimaryPart.Positionlocal 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.CurrentCameralocal 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 ปัจจุบัน
HeadScale
HeadScale เป็นขนาดของมุมมองของผู้ใช้เมื่อใช้ VR
ขนาดของ 1 stud ใน VR คือ 0.3 meters / HeadScale ซึ่งหมายถึงว่าค่า HeadScale ที่ใหญ่ขึ้นจะเท่ากับโลกที่ดูเล็กลงจากมุมมองของผู้ใช้เมื่อใช้อ
สมบัตินี้จัดการโดยอัตโนมัติโดย VRService.AutomaticScaling เพื่อให้มุมมองของผู้เล่นเข้ากับขนาดของ อวาตาร์หากคุณตั้งใจที่จะควบคุม HeadScale ด้วยตัวเอ
คุณสมบัตินี้ไม่ควรสับสนกับ Humanoid.HeadScale ซึ่งเป็นพ่อของ NumberValue ที่มี Humanoid เพื่อควบคุมการเคลื่อนไหวของมัน
MaxAxisFieldOfView
คุณสมบัติ MaxAxisFieldOfView ตั้งค่าว่ากล้องสามารถมุมมองได้กี่องศาตามแกนมุมมองที่ยาวที่สุด
เมื่อแกนยาวที่ยาวที่สุดคือแกนแนวตั้ง, คุณสมบัตินี้จะปฏิสัมพันธ์กับคุณสมบัติ FieldOfView โดยทั่วไป ในกรณีที่อุปกรณ์อยู่ในแนวตั้ง ใน
NearPlaneZ
สมบัติ NearPlaneZ อธิบายว่ากล้องอยู่ไกลเท่าไหร่จากเครื่องบินที่กำลังเคลื่อนเข้าใกล้ ใน studs กล้องเป็นเครื่อง
VRTiltAndRollEnabled
สมบัตินี้เปิด/ปิดการใช้งานเมื่อใช้ VR อุปกรณ์ขณะที่ผู้เล่นกำลังใช้งาน
เพื่อป้องกันความประหลาดใจทางกายภาพ เขตมุ่งหมายควรเหลือระดับ การเอียงและการหมุนของมุมมองของผู้เล่นในขณะที่ใช้ VR อุปกรณ์สามารถทำให้เกิดความแตกต่างระหว่างพื้นที่กายภาพ
ด้วยเหตุผลเหล่านี้จึงเป็นไปได้อย่างมากที่จะปิดการใช้งานสมบัติสินค้านี้ยกเว้นคุณจะทดสอบประสบการณ์ของคุณอย่างละเอียดแล้วเท่านั้น แม้ว่าจะเปิดใช้งานการลอกและเลื่อน
ViewportSize
ViewportSize กลับขนาดของพื้นที่ปลอดภัยของอุปกรณ์บนหน้าจอปัจจุบัน พื้นที่นี้เป็นรูปสี่เหลี่ยมผืนผ้าที่รวมถึงพื้นที่ Roblox สูงสุด
ตามที่อธิบายไว้ข้างต้น, ViewportSize ไม่เท่ากับขนาดพื
สุดท้าย, หมายเหตุว่า ViewportSize ไม่ใช่ขนาดหน้าตารางที่กล้องใช้สำหรับการเรนเดอร์ (กล้องเรนเดอร์ในพื้นที
การอัปเดตกล้อง
เฉพาะ Camera ที่ได้รับการอ้างอิงโดย Class.Workspace. CurrentCamera เท่านั้นที่มี Class.Camera.ViewportSize|ViewportSize
วิธีการ
GetPartsObscuringTarget
วิธีนี้กลับค่ารายการ BaseParts ที่ซ่อนเส้นสายของมุมมองระหว่าง Camera.CFrame และ Vector3
ตัวแปร castPoints ให้เป็นรายการของตำแหน่ง Vector3 ตัวอย่าง หมายเหตุว่าตัวอย่างของ BaseParts ที่กลับมาให้นั้น
local camera = workspace.CurrentCameralocal castPoints = {Vector3.new(0, 10, 0),Vector3.new(0, 15, 0)}local ignoreList = {}local partsObscuringTarget = camera:GetPartsObscuringTarget(castPoints, ignoreList)
หาก Terrain ปิดบังจุดโค้งของคาสต์ BaseParts ปิดบังจุดโค้งของคาสต์ระหว่างการปิดบัง Terrain และการปิดบังจะไม่ถูกส่งกลับ
พารามิเตอร์
รายการ Instances ที่ควรได้รับการเพิกเฉยร่วมกับบุตรหลานของพวกเขา
ส่งค่ากลับ
รายการของ BaseParts ที่มอบให้เห็นเส้นสายของมุมมองระหว่างกล้องของ Camera.CFrame และ castPoints
ตัวอย่างโค้ด
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.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScalerenderCFrame = camera.CFrame * headCFrame
การเรนเดอร์ของกล้อง CFrame จะเปลี่ยนแปลงเฉพาะส่วนหัวเมื่อค่า Camera.HeadLocked เป็นจริง
ส่งค่ากลับ
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() ในรัศมี
ตัวอย่างโค้ด
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.CurrentCameralocal length = 500local unitRay = camera:ScreenPointToRay(100, 100)local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)
คุณสมบัตินี้ใช้ได้เฉพาะกล้อง Workspace ปัจจุบัน กล้องอื่น ๆ เช่นกล้องที่คุณสร้างสำหรับ ViewportFrame มีขนาด viewport เริ่มต้นของ
พารามิเตอร์
ตําแหน่งในแกน X ในพิกเซลของจุดหน้าจอที่ต้องการจะเริ่มต้น Ray นี้ ตําแหน่งนี้จัดการสําหรับ GUI ในเซ็ต
ตําแหน่งในแกน Y ในพิกเซลของจุดหน้าจอที่ต้องการจะเริ่มต้น Ray นี้ ตําแหน่งนี้จะนับรวม GUI ในเซ็ต
ส่งค่ากลับ
SetRoll
คุณสมบัตินี้อาจไม่ได้รับการปรับปรุงแล้วและไม่ได้ถือเป็นมาตรฐานที่ดีที่สุดแล้ว
ฟังก์ชันนี้ตั้งค่ารอลล์ปัจจุบันในรัศมี, ในรัศมี, ของ 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.CFramelocal rollCFrame = CFrame.Angles(0, 0, roll)workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame
พารามิเตอร์
ส่งค่ากลับ
ViewportPointToRay
ฟังก์ชันนี้สร้างหน่วย Ray จากตำแหน่ง 2D ใน viewport ที่ปลอดภัย ตามที่กำหนดในพิกเซล รังสีมาจาก Vector3 เทียบเท่าของตำแหน่ง 2D ในโลกที
ตามที่ปรากฏด้านล่าง, (0, 0) ตรงกับตรงกับจุดด้านบนซ้ายของ Roblox บาร์ด้านบน นี่หมายความว่าตำแหน่ง 2D ไม่ได้ ไม่
หมายเหตุว่า UI ติดตั้งใช้ระบบจุดสองมิติที่แตกต่างกัน ( GuiObject.AbsolutePosition ใช้ระบบจุดสองมิติของ CoreUISafeInsets ในข
โปรดทราบว่าคุณสมบัตินี้ใช้ได้เฉพาะกล้อง Class.Workspace. CurrentCamera เท่านั้น กล้องอื่น ๆ เช่นกล้องที่คุณส
คุณสมบัตินี้สามารถใช้ร่วมกับคุณสมบัติ ViewportSize เพื่อสร้างลำแสงจากศูนย์กลางของหน้าจอ, ตัวอย่างเช่น:
local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal viewportPoint = camera.ViewportSize / 2local unitRay = camera:ViewportPointToRay(viewportPoint.X, viewportPoint.Y, 0)
เนื่องจาก Ray ที่สร้างเป็นเครื่องยนต์ มีความยาวเพียงหนึ่งช่อง เพื่อสร้างเครื่องยนต์ยาว กำลังติดตาม:
local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal length = 500local unitRay = camera:ScreenPointToRay(100, 100)local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)
พารามิเตอร์
ตําแหน่งในแกน X ในพิกเซลของจุดมุ่งหมายของ viewport ที่จะเริ่มต้น Ray ในเขตพื้นที่ปลอดภัยของอุปกรณ์
ตําแหน่งในแกน Y ในพิกเซลของจุดมุ่งหมายของ viewport ที่จะเริ่มต้น Ray ในเขตพื้นที่ปลอดภัยของอุปกรณ์
ส่งค่ากลับ
WorldToScreenPoint
ฟังก์ชันนี้กลับตำแหน่งหน้าจอและความลึกของ Vector3 และว่าจุดนี้อยู่ในขอบเขตของหน้าหรือไม่
ฟังก์ชันนี้จะนำเข้า GUI ปัจจุบันที่อยู่ในขณะนี้ เช่น พื้นที่ที่ได้รับการเปลี่ยนแปลงโดยแถบด้านบน ซึ่งหมายถึงตำแหน่ง 2D ที่กลับมาจะอยู่ในเงื่อนไขเดียวกั
local camera = workspace.CurrentCameralocal 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 ไม่ว่าจะเป็นว่าจุดอยู่ภายใต้การ
พารามิเตอร์
ส่งค่ากลับ
WorldToViewportPoint
ฟังก์ชันนี้กลับตำแหน่งหน้าจอและความลึกของ Vector3 และว่าจุดนี้อยู่ในขอบเขตของหน้าหรือไม่
ฟังก์ชันนี้ไม่ได้พิจารณาประตูเมนูปัจจุบันที่อยู่ในตำแหน่งด้านบนของแถบด้านบน เช่นพื้นที่ที่ไม่ได้ใช้งานแสดงผลจากมุมมองด้านซ้ายบน หากคุณไม่ได้ใช้ Class.ScreenGui.Ignore
สำหรับหน้าตารางอื่นที่เป็นตัวแทนของ GUI ในเกม, ดู Camera:WorldToScreenPoint() .
local camera = workspace.CurrentCameralocal 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 ไม่ว่าจะเป็นว่าจุดอยู่ภายใต้การ
พารามิเตอร์
ส่งค่ากลับ
อีเวนต์
InterpolationFinished
เหตุการณ์นี้จะเกิดขึ้นเมื่อ Camera ได้สรุปการใช้งานโดยใช้ฟังก์ชัน Camera:Interpolate()
เหตุการณ์นี้จะไม่เกิดขึ้นหาก tween ถูกขัดขวางด้วย Camera:Interpolate() โดยเรียกอีเวนต์นี้อีกครั้ง
คุณจะได้รับคำแนะนำให้ใช้ TweenService เพื่ออนิเมชัน Class.Camera แทนซึ่งเป็นไซต์ที่น่าเชื่อถือมากขึ้นและมีตัวเลือกมากขึ้นสำหรับการปรับแต่งสไตล์