Camera

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

복제되지 않음

Camera 개체는 3D 세계의 보기를 정의합니다.실행 중인 경험에서 각 클라이언트는 해당 클라이언트의 로컬 에 있는 자체 개체를 가지며, 해당 속성을 통해 액세스할 수 있습니다.

가장 중요한 카메라 속성은 다음과 같습니다:

  • CFrame 카메라의 위치와 방향을 나타내는 것.

  • CameraType 경험의 카메라 스크립트에서 읽고 카메라가 각 프레임을 업데이트해야 하는 방법을 결정하는 것입니다.

  • CameraSubject 경험의 카메라 스크립트에서 읽고 카메라가 팔로우할 개체를 결정하는 것입니다.

  • FieldOfView 관찰 가능한 세계의 가시적 범위를 나타내는 것.

  • Focus 카메라가 바라보는 지점을 나타내는 것.특정 시각적 요소가 더 자세하고 초점 지점에 얼마나 가까이 있는지에 따라 더 자주 업데이트되기 때문에 이 속성이 설정되는 것이 중요합니다.

카메라의 동작을 조정하고 사용자 지정하는 방법에 대한 자세한 내용은 카메라 사용자 정의를 참조하십시오.

여러 카메라 저장

변경 중인 Workspace.CurrentCamera 를 새로운 Camera 로 변경하면 모든 다른 Cameras 가 직접 내려오는 Workspace 가 파괴됩니다.여러 카메라를 저장하고 요청 시 서로 교체해야 하는 경우, 또는 아래에 저장하는 것이 좋으며, 여기에서는 변경되더라도 그대로 유지됩니다.

요약

속성

속성PVInstance에서 상속되었습니다

메서드

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

    카메라의 CFrame 와 캐스트 지점 사이의 시야를 가리는 배열을 BaseParts 반환합니다.

  • 실제로 렌더링되는 CFrame 에서 Camera 를 계산하여 적용된 롤과 VR 장치의 영향을 반환합니다.

  • 반경으로 현재 롤 또는 카메라의 Z축을 따라 적용된 회전을 Camera에 사용하여 반환합니다.Returns in radians the current roll, or rotation around the camera's Z-axis, applied to the using SetRoll() .

  • 병렬 쓰기

    화면의 위치(픽셀)에서 유닛 을 설정된 깊이로 생성하여 카메라의 방향으로 향상시킵니다.GUI 삽입에 대한 계정.

  • SetRoll(rollAngle : number):()

    카메라의 Z축 주변에 적용된 현재 회전을 설정합니다.

  • 병렬 쓰기

    뷰포트(픽셀)의 위치에서 Ray에서 유닛을 생성하고, Camera의 지정된 깊이에서 카메라의 방향으로 향합니다.삽입 CoreUISafeInsets을 고려하지 않습니다.

  • 병렬 쓰기

    스크린 위치와 깊이를 반환하고 Datatype.Vector3``worldPoint 및 이 지점이 스크린의 경계 내에 있는지 여부를 반환합니다.GUI 삽입에 대한 계정.

  • 병렬 쓰기

    스크린 위치와 깊이를 반환하고 Datatype.Vector3``worldPoint 및 이 지점이 스크린의 경계 내에 있는지 여부를 반환합니다.GUI 삽입을 고려하지 않습니다.

  • ZoomToExtents(boundingBoxCFrame : CFrame,boundingBoxSize : Vector3):()
메서드PVInstance에서 상속되었습니다

속성

CFrame

병렬 읽기

이 속성은 3D 세계에서 위치와 방향을 정의하는 의 속성입니다.VR 장치를 사용할 때 머리 회전과 같은 일부 변환은 이 속성에 반영되지 않으므로 GetRenderCFrame() 을 사용하여 카메라의 "진실" CFrame 을 얻으십시오.

이 속성을 설정하여 카메라를 이동할 수 있습니다. 그러나 기본 카메라 스크립트도 설정하므로 다음 중 하나를 수행해야 합니다.

  • 기본 카메라 스크립트가 카메라의 를 업데이트하지 않도록 카메라를 로 설정합니다.이 메서드는 가장 간단하고 대부분의 경우 권장됩니다.

  • 기본 카메라 스크립트를 대체 스크립트로 완전히 교체합니다.이 방법은 기본 카메라 기능이 필요하지 않은 경우에만 권장됩니다.

위치와 방향을 조정하는 가장 직관적인 방법은 생성자를 사용하는 것입니다.다음 예제에서는 CameraVector3.new(0, 10, 0) 에 배치되고 Vector3.new(10, 0, 0) 를 향하도록 지향되어 있습니다.


local Workspace = game:GetService("Workspace")
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)

카메라는 위에 보여준 방식으로 배치할 수 있지만, 부드럽게 이동하도록 애니메이션을 만들 수 있습니다. although the camera can be placed in the manner demonstrated above, you may want to animate it to move smoothly from one CFrame to another.이를 위해 다음 중 하나를 수행할 수 있습니다:

  • RunService:BindToRenderStep()CFrame:Lerp() 메서드를 사용하여 프레임마다 카메라의 위치/방향을 설정합니다.

  • 카메라의 위치/방향을 애니메이션화하는 Tween를 만들고 플레이하십시오:


    local Players = game:GetService("Players")
    local TweenService = game:GetService("TweenService")
    local Workspace = game:GetService("Workspace")
    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 및 현재 상태와 Humanoid.CameraOffset 를 고려하여 휴머노이드의 상태를 따릅니다.

  • 에 설정되면 카메라 스크립트는 위치를 따르고, 경우에 따라 에 수직 오프셋이 발생합니다.

CameraSubjectnil 로 설정할 수 없습니다. 이렇게 하려고 하면 이전 값으로 되돌아갑니다.

기본값으로 복원하려면 CameraSubject 를 로컬 문자의 Humanoid 로 설정하십시오.


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

CameraType

병렬 읽기

기본 Roblox 카메라 스크립트에는 여러 내장 동작이 있습니다.이 속성을 설정하면 다양한 Enum.CameraType 동작 사이를 전환합니다.일부 카메라 유형에는 올바른 CameraSubject 작동하려면 유효한 필요합니다.

기본 카메라 스크립트는 CameraTypeEnum.CameraType.Scriptable 로 설정되어 있으면 카메라를 이동하거나 업데이트하지 않습니다.카메라를 수동으로 배치하고 조정하는 자세한 정보는 CFrame 을 참조하십시오.

모든 설정 제외 에 대해, 속성은 카메라의 위치가 설정된 개체를 나타냅니다.

DiagonalFieldOfView

복제되지 않음
병렬 읽기

카메라가 볼 수 있는 가로 방향의 각도(뷰포트의 한 모서리에서 반대 모서리까지)를 설정합니다.Sets how many degrees in the diagonal direction (from one corner of the viewport to its opposite corner) the camera can view.시야의 더 일반적인 설명은 FieldOfView에 참조하십시오.

DiagonalFieldOfView 는 일부 장치에서 누락되거나 화면 잘라내기로 차단될 수 있는 전체 화면 영역으로 뷰필드를 렌더링하는 Camera 를 나타냅니다.자세한 내용은 ViewportSize을 참조하십시오.

FieldOfView

병렬 읽기

The FieldOfView (FOV) 속성은 카메라가 수직 방향으로 볼 수 있는 정도를 나타냅니다.이 속성은 1120 도 사이에서 클램핑되고 70 에서 기본값으로 설정됩니다.매우 낮거나 매우 높은 시야는 플레이어에게 혼란을 줄 수 있으므로 권장되지 않습니다.

고정 스케일링이 적용되므로 화면의 가로 및 세로 시야는 항상 화면 비율로 관련이 있습니다.

FieldOfView에 대한 제안된 사용 방법에는 다음이 포함됩니다:

  • 예를 들어 망원경을 사용할 때 FOV를 줄여 확대 효과를 주는 것입니다.
  • 플레이어가 "질주"하여 통제 부족 인상을 주려면 FOV를 늘리는 것입니다.

FieldOfView 는 일부 장치에서 누락되거나 화면 잘라내기로 차단될 수 있는 전체 화면 영역으로 뷰필드를 렌더링하는 Camera 를 나타냅니다.자세한 내용은 ViewportSize을 참조하십시오.

FieldOfViewMode

병렬 읽기

카메라의 (FOV)가 변경 사항을 반영하도록 업데이트해야 합니다.FieldOfViewMode의 값은 어떤 FOV 값이 상수로 유지될지 결정합니다.

예를 들어, 이 속성이 Enum.FieldOfViewMode.Vertical 로 설정되면 시점이 크기를 변경할 때 가로 시야가 업데이트되지만 세로 시야는 유지됩니다.이 속성이 Enum.FieldOfViewMode.Diagonal 로 설정되면 가로 및 세로 시야가 모두 변경되어 가로 시야가 상수로 유지될 수 있습니다.

Focus

병렬 읽기

조명 업데이트와 같은 엔진에서 수행하는 일부 그래픽 작업은 완료하는 데 시간이나 계산 작업이 필요할 수 있습니다.카메라의 Focus 속성은 엔진에 3D 공간에서 이러한 작업을 수행할 때 우선 순위를 지정할 영역을 알립니다.예를 들어, PointLights와 같은 개체의 동적 조명은 초점과 멀리 떨어진 거리에서 렌더링되지 않을 수 있습니다.

기본 Roblox 카메라 스크립트는 자동으로 (일반적으로 )를 따르도록 설정합니다.그러나, 는 자동으로 업데이트되지 않을 것입니다 또는 기본 카메라 스크립트가 사용되지 않을 때 설정되면 또는 기본 카메라 스크립트가 사용되지 않을 때.이 경우 우선순위 에서 메서드를 사용하여 모든 프레임을 업데이트해야 합니다.

Focus는 카메라의 위치나 방향에 영향을 주지 않습니다; 이에 대해서는 CFrame를 참조하십시오.

HeadLocked

병렬 읽기

VR 기기사용하여 플레이어의 머리 움직임을 자동으로 추적하는지 여부를 전환합니다.When true (기본값)에서 엔진은 사용자의 머리의 CFrameEnum.UserCFrame 를 결합하여 플레이어의 뷰를 렌더링하고 헤드 트래킹 요소가 고려됩니다.뷰는 다음 CFrame에 렌더링됩니다:


local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
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 엔진은 지연 최적화를 수행하며 HeadLocked가 true이면 지연이 발생합니다.
또한 참조하세요

HeadScale

병렬 읽기

HeadScale는 VR을 사용할 때 사용자의 세계 관점의 규모입니다.

VR에서 1스터드의 크기는 0.3 meters / HeadScale , 즉 더 큰 HeadScale 값은 VR 장치를 사용할 때 사용자의 관점에서 더 작아 보이는 세계와 동일합니다.예를 들어, 1스터드 높이의 부품은 HeadScale0.5 와 VR 플레이어에게 0.6m 높이로 보이는 것 같습니다.

이 속성은 VRService.AutomaticScaling에 의해 자동으로 제어되어 플레이어의 시점을 아바타의 크기와 맞춥니다.자신을 제어하거나 사용자 지정 문자를 사용하려는 경우 HeadScale 를 토글하여 VRService.AutomaticScaling 에서 Enum.VRScaling.Off 으로 전환합니다.

이 속성은 스케일링을 제어하기 위해 부모로 지정된 Humanoid.HeadScale 와 혼동되어서는 안됩니다. NumberValue 에 대한 부모가 Humanoid 인 경우.

MaxAxisFieldOfView

복제되지 않음
병렬 읽기

MaxAxisFieldOfView 속성은 카메라가 볼 수 있는 가장 긴 시점 축의 각도를 설정합니다.

가장 긴 축이 세로 축인 경우, 이 속성은 FieldOfView 속성과 유사하게 동작합니다.일반적으로 기기가 가로 방향에 있을 때 이 경우입니다.풍경 방향에서 가장 긴 축은 가로 축이고, 이 경우 속성은 Camera의 가로 시야 필드를 설명합니다.

NearPlaneZ

읽기 전용
복제되지 않음
병렬 읽기

NearPlaneZ 속성은 카메라의 근접 클립 평면이 스터드 떨어져 있는 정도를 설명합니다.근접 클립 평면은 카메라의 CFrame 앞에 있는 기하학적 평면입니다.이 평면과 카메라 사이의 모든 것은 렌더링되지 않으며, 매우 짧은 거리에서 개체를 보면 절단된 뷰가 생성됩니다.NearPlaneZ 의 값은 다양한 플랫폼에서 다르며 현재는 항상 -0.1-0.5 사이에 있습니다.

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

VRTiltAndRollEnabled

병렬 읽기

이 속성은 플레이어가 VR 기기사용하는 동안 CFrame 속성에서 기울기와 회전을 적용할지 여부를 전환합니다.

운동 증상을 방지하려면 수평으로 유지되어야 합니다.VR 장치를 사용하는 동안 플레이어의 시점을 기울이고 롤링하면 플레이어의 실제 공간과 뷰하는 가상 공간 사이의 연결이 끊어질 수 있습니다.명백한 하향 방향을 변경하면 플레이어가 균형을 잃거나 현기증을 경험할 수 있습니다.

이러한 이유로 이 속성을 이러한 효과에 대해 광범위하게 테스트하지 않은 경우가 아니면 일반적으로 비활성화하는 것이 좋습니다.기울기와 롤이 활성화되어 있더라도 플레이어가 항상 안정적인 참조 프레임, 예를 들어 차량의 내부나 플레이어가 물리적 공간에서 스스로 땅을 칠 수 있는 바닥을 가지고 있는지 확인하고 싶을 수 있습니다.

ViewportSize

읽기 전용
복제되지 않음
병렬 읽기

ViewportSize 현재 화면의 장치 안전 영역 차원을 반환합니다.이 영역은 Roblox 상단 표시줄 영역을 포함하지만 장치 노트 또는 화면 잘라내기를 포함하지 않는 직사각형입니다.ViewportSize의 단위는 Roblox UI 오프셋 단위로, 기본 표시 픽셀과 다를 수 있습니다.

Mobile device screen with cutout showing device safe area.

위에서 언급한 대로, ViewportSize 는 커팅이나 노치가 있는 디스플레이의 전체 화면 영역 크기와 같지 않습니다.모든 디스플레이에서 전체 화면 영역 크기를 얻으려면 AbsoluteSize 속성을 쿼리하여 ScreenGuiScreenInsets 을 설정하고 None 로 전환합니다.화면 영역이 정의되는 방법에 대한 자세한 정보는 Enum.ScreenInsets

마지막으로, ViewportSize 는 카메라가 렌더링에 사용하는 실제 뷰포트 크기가 아니라는 점에 유의하십시오(카메라는 전체화면 영역에서 렌더링합니다).또한, FieldOfViewDiagonalFieldOfView 속성은 전체화면 영역을 기반으로 하지만, ViewportSize 는 아닙니다.

카메라 업데이트

현재 Camera 에서 참조하는 유일한 Workspace.CurrentCamera 는 단계 PreRender 동안 각 프레임에서 ViewportSize 업데이트됩니다.경험의 모든 다른 카메라의 ViewportSize 는 포함하여 사용된 모든 카메라의 ViewportFrames 가 업데이트되지 않습니다.

메서드

GetPartsObscuringTarget

Instances

이 메서드는 카메라의 BasePartsCFrame 위치와 Vector3 배열의 시야선을 가리는 배열의 배열을 반환합니다. castPoints 배열에서. 배열에 포함된 모든 것은 그 자손을 포함하여 무시됩니다.

castPoints 매개 변수는 배열로 Vector3 위치로 제공됩니다.반환된 BaseParts 배열이 임의의 순서로 있고 추가 레이캐스트 데이터가 제공되지 않는다는 점에 유의하십시오.히트 위치, 히트 재료 또는 표면 정상과 같은 데이터가 필요한 경우 WorldRoot:Raycast() 방법을 선택해야 합니다.


local Workspace = game:GetService("Workspace")
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

카메라의 BasePartsCFrame 간의 시선 라인을 가리는 배열의 castPoints .

GetRenderCFrame

이 메서드는 VR(VR 머리 변환이 플레이어의 뷰의 "진짜"를 얻기 위해 적용되지 않으므로 플레이어의 뷰의 "진짜"를 얻기 위해 을 사용하는 것이 가장 좋습니다)의 영향을 포함하여 실제 를 반환합니다.

예를 들어, VR을 사용할 때, Camera 는 실제로 다음 CFrame에 렌더링됩니다:


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

카메라의 렌더링 CFrame 은 속성 HeadLocked 가 참여할 때만 변경되어 머리를 계산합니다.


반환

The CFrame the Camera 가 렌더링되고 있습니다.

GetRoll

이 메서드는 라디안으로, Camera에 적용된 현재 롤을 SetRoll()를 사용하여 반환합니다.롤은 카메라의 Z축을 중심으로 회전하는 것으로 정의됩니다.

이 메서드는 SetRoll() 메서드를 사용하여 적용된 롤만 반환합니다.카메라의 롤을 수동으로 적용하면 CFrame 가 계산되지 않습니다.롤을 수동으로 적용한 실제 롤을 얻으려면 다음 스니펫을 사용할 수 있습니다: To obtain the actual roll of the Camera , including roll manually applied, you can use the following snippet:


local Workspace = game:GetService("Workspace")
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

반환

현재 롤은 SetRoll()에 의해 적용되었으며, 라디안으로.

코드 샘플

이 예제는 LocalScript에서 사용되면 카메라의 현재 롤을 도 단위로 검색합니다.그런 다음, 카메라 롤 각도가 20도가 아니면 카메라 롤 각도가 20도로 설정됩니다.

카메라:GetRoll

local currentRoll = math.deg(workspace.CurrentCamera:GetRoll()) -- 카메라의 현재 롤을 도 단위로 가져옵니다.
if currentRoll ~= 20 then
workspace.CurrentCamera:SetRoll(math.rad(20)) -- 카메라가 20도 롤에 있지 않으면 롤이 20도로 설정됩니다.
end

ScreenPointToRay

병렬 쓰기

이 메서드는 화면(픽셀로 정의)의 2D 위치에서 유닛 Ray 을 생성하여 GUI 삽입을 계산합니다. 는 주어진 깊이(스터드)에서 세계의 2D 위치에 해당하는 동일한 것으로부터 발생합니다( ).

이 메서드는 GUI 삽입을 인식하므로, 상단 표시줄에서와 같이 GUI 요소에 적용된 오프셋이 계산됩니다.즉, 지정된 화면 위치가 상단 바 아래의 왼쪽 상단 모서리에서 시작됩니다.GUI 오프셋을 고려하지 않는 동일한 메서드의 경우 ViewportPointToRay()를 사용하십시오.

만들어진 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)

이 메서드는 현재 Workspace 카메라에만 작동합니다.ViewportFrame 에 대해 만든 다른 카메라와 같이, 초기 뷰포트 크기가 (1, 1) 이고 단지 Workspace.CurrentCamera 에 설정한 후 업데이트됩니다.뷰포트 크기의 불일치로 인해 카메라가 잘못된 Ray.Direction 광선을 반환합니다.

매개 변수

X축의 위치, 픽셀로, 화면 포인트에서 생성될 의 위치입니다. 이 위치는 GUI 삽입을 위해 사용됩니다.

기본값: ""

Y축의 위치, 픽셀로, 화면 지점에서 생성하는 데이터. 이 위치는 GUI 삽입을 위해 사용됩니다.

기본값: ""
depth: number

Camera 에서 스터드 단위의 깊이로, Ray 의 원본을 상쇄할 수 있습니다.

기본값: 0

반환

유닛 , 지정된 깊이에서 지정된 화면 좌표의 동일한 세계 위치에서 발생하며 에서 멀리 떨어져 있습니다.이 광선은 Camera 방향으로 향합니다.

SetRoll

()

이 메서드는 오래되었으며 더 이상 최선의 방법으로 간주되지 않습니다.

이 메서드는 Camera의 현재 롤, 라디안으로 설정합니다.롤은 CFrame 이후에 적용되며 카메라의 Z축 주위에서 회전을 나타냅니다.

예를 들어, 다음은 Camera를 반전합니다:


local Workspace = game:GetService("Workspace")
Workspace.CurrentCamera:SetRoll(math.pi) -- math.pi radians = 180 degrees

SetRoll은 CFrame 속성을 사용하여 적용된 모든 롤에 영향을 주지 않습니다.SetRoll을 사용하여 적용된 롤은 속성 에 반영되지 않지만 에서 반환된 속성에 반영됩니다.

이 메서드는 기본 카메라 스크립트가 사용되는지 여부에 관계없이 CameraTypeScriptable 로 설정된 경우에만 사용할 수 있습니다.다른 CameraType 와 함께 사용되는 경우 출력에 경고가 표시됩니다.

이 메서드를 사용하여 적용된 모든 롤은 CameraType 에서 Scriptable 로 변경될 때 사라집니다.

이 방법을 사용하여 롤 세트를 얻으려면 GetRoll()를 사용하십시오.

이 메서드가 오래되었으므로, 대신 Camera 속성을 사용하여 CFrame 롤을 적용하는 것이 좋습니다. 예:


local Workspace = game:GetService("Workspace")
local currentCFrame = Workspace.CurrentCamera.CFrame
local rollCFrame = CFrame.Angles(0, 0, roll)
Workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame

매개 변수

rollAngle: number

롤 각도, 라디안으로, Camera에 적용할 예정입니다.

기본값: ""

반환

()

ViewportPointToRay

병렬 쓰기

이 메서드는 픽셀로 정의된 디바이스 안전 뷰포트 좌표에서 2D 위치에서 유닛 Ray를 생성합니다.레이는 2D 위치의 세계에서 지정된 깊이(스터드)에서 약 에 해당하는 세계의 2D 위치에서 발생합니다.

아래 그림과 같이 (0, 0)는 Roblox 상단 바의 왼쪽 상단 지점에 해당합니다.즉, 입력 2D 위치가 삽입을 고려하지 않지만 모든 을 고려합니다.

Diagram showing the origin of the device safe area viewport coordinate system.

UI 인스턴스는 다른 좌표 시스템을 사용합니다(는 이 메서드가 보기 좌표 시스템을 사용하는 동안 는 보기 좌표 시스템을 사용합니다).코어 UI 좌표에서 위치를 지정하려면 ScreenPointToRay()를 사용하십시오.

또한 이 메서드는 Workspace.CurrentCamera 카메라에만 작동합니다. 에 대해 만든 다른 카메라는 초기 뷰포트 크기가 이고 설정한 후에만 업데이트됩니다.뷰포트 크기의 불일치로 인해 카메라가 잘못된 Ray.Direction 광선을 반환합니다.

이 메서드는 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)

매개 변수

장치 안전 영역 좌표로 원본화할 Ray를 생성하는 뷰포인트의 X 축 위치, 픽셀로 표시 The position on the X axis, in pixels, of the viewport point at which to originate the , in device safe area coordinates.

기본값: ""

장치 안전 영역 좌표로 원본화할 Ray 지점의 위치를 픽셀로 나타낸 Y 축 위치.

기본값: ""
depth: number

Camera 에서 스터드 단위의 깊이로, Ray 의 원본을 상쇄할 수 있습니다.

기본값: 0

반환

동일한 세계 위치의 지정된 뷰포트 좌표에서 출발하는 유닛 , 주어진 깊이에서 멀리 떨어진 지정된 뷰포트 좌표의 원본 .이 광선은 Camera 방향으로 향합니다.

WorldToScreenPoint

병렬 쓰기

이 메서드는 화면 위치와 깊이 및 Datatype.Vector3``worldPoint 이 지점이 화면의 경계 내에 있는지 여부를 반환합니다.

이 메서드는 상단 바가 차지하는 공간과 같은 현재 GUI 삽입을 고려하여 반환된 2D 위치가 GUI 위치와 동일하고 GUI 요소를 배치하는 데 사용할 수 있습니다.GUI 삽입을 무시하는 동일한 메서드의 경우, 참조하십시오 WorldToViewportPoint().


local Workspace = game:GetService("Workspace")
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 에 의해 가려져 있는지 여부에 관계없이 BaseParts 또는 Terrain 됩니다.

매개 변수

worldPoint: Vector3

Vector3 세계 위치.

기본값: ""

반환

순서대로 포함된 튜플:

  • A 의 X 및 Y 구성 요소는 화면 왼쪽 상단 모서리의 오프셋을 픽셀로 나타냅니다.Vector3 Z 구성 요소는 화면(스터드)에서의 worldPoint 깊이를 나타내며

  • worldPoint가 화면 범위 내에 있는지를 나타내는 부울입니다.

WorldToViewportPoint

병렬 쓰기

이 메서드는 화면 위치와 깊이 및 Datatype.Vector3``worldPoint 이 지점이 화면의 경계 내에 있는지 여부를 반환합니다.

이 메서드는 상단 바의 공간과 같이 현재 GUI 삽입을 고려하지 않으므로 반환된 2D 위치가 뷰포트의 왼쪽 상단 모서리에서 가져옵니다.ScreenGui.IgnoreGuiInset를 사용하지 않는 한, 이 위치는 GUI 요소를 배치하기에 적합하지 않습니다.

GUI 삽입을 위한 동일한 메서드가 아닌 경우, 참조하십시오 WorldToScreenPoint() .


local Workspace = game:GetService("Workspace")
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 에 의해 가려져 있는지 여부에 관계없이 BaseParts 또는 Terrain 됩니다.

매개 변수

worldPoint: Vector3

Vector3 세계 위치.

기본값: ""

반환

순서대로 포함된 튜플:

  • A 의 X 및 Y 구성 요소는 뷰포트의 왼쪽 상단 모서리에서 오프셋을 나타내며, 픽셀로 표시됩니다.Vector3 Z 구성 요소는 화면(스터드)에서의 worldPoint 깊이를 나타내며

  • worldPoint가 화면 범위 내에 있는지를 나타내는 부울입니다.

ZoomToExtents

()

매개 변수

boundingBoxCFrame: CFrame
기본값: ""
boundingBoxSize: Vector3
기본값: ""

반환

()

이벤트

InterpolationFinished

이 이벤트는 Camera 메서드를 사용하여 인터폴레이션을 완료한 후 Camera:Interpolate() 메서드로 발생합니다.Camera:Interpolate() 다시 호출되어 십대가 중단되면 발사되지 않습니다.

대신 더 신뢰할 수 있고 스타일 완화를 위한 더 많은 옵션을 제공하기 때문에 TweenService를 사용하여 애니메이션을 Camera로 전환하는 것이 좋습니다.