Camera
Camera : Instance
Overview
Camera 객체는 3D 공간에서 플레이어가 바라보는 시점을 정의하는 인스턴스입니다.
실행 환경에서 각 클라이언트는 고유한 Camera를 보유하며, 이는 Workspace.CurrentCamera 속성을 통해 접근할 수 있습니다.
Camera의 속성을 수정하여 카메라의 위치와 방향을 조정하거나, 동작 방식을 변경할 수 있습니다.
Properties
CFrame
CFrame
카메라의 위치와 회전을 지정하는 속성으로, 3D 공간에서 카메라의 좌표와 바라보는 방향을 정의합니다.
이 속성을 수정하여 카메라를 직접 이동시킬 수 있으나, 기본 카메라 동작은 캐릭터에 종속되므로 CFrame을 수동으로 제어하려면 CameraType 속성을 Scriptable로 설정하여 자동 갱신을 비활성화해야 합니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
Camera.CFrame = CFrame.new(0, 150, 1000)
Focus
CFrame
현재 지원되지 않습니다.
Code Samples
FieldOfView
number
FieldOfView(FOV)는 카메라의 시야각을 정의하는 속성으로, 기본값은 90도이며 설정 가능한 범위는 1도에서 169도까지입니다.
예를 들어, 캐릭터가 전력 질주할 때 FOV 값을 높이면 시야가 확장되면서 플레이어가 제어력을 잃는 듯한 연출 효과를 줄 수 있습니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
Camera.FieldOfView = 150
ViewportSize
Vector2
현재 화면의 크기를 반환하는 속성입니다. (읽기 전용)
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
print(Camera.ViewportSize)
CameraOffset
Vector3
카메라의 상대 위치를 지정하는 속성입니다.
주로 TPS 게임에서 캐릭터를 화면 중앙에서 약간 벗어난 위치에 배치할 때 활용됩니다. 이를 통해 조준점과 캐릭터가 시각적으로 겹치지 않도록 설정할 수 있습니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
Camera.CameraOffset = Vector3.new(90, 90, -120)
CameraSubject
Instance
카메라가 초점을 맞출 피사체를 지정하는 속성입니다.
기본적으로 카메라는 로컬 캐릭터의 Humanoid를 대상으로 하며, CameraSubject가 BasePart로 설정될 경우 해당 객체를 추적합니다. 원래 동작으로 되돌리려면 CameraSubject를 다시 Humanoid로 지정하면 됩니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Part = Workspace:WaitForChild("Part")
local Camera = Workspace.CurrentCamera
Camera.CameraSubject = Workspace.Part
CameraType
Enum.CameraType
카메라의 동작 방식을 정의하는 속성으로, 기본값은 Custom입니다.
이 속성을 변경하면 Enum.CameraType 값에 따라 카메라 모드가 전환되며, 일부 모드는 정상적으로 동작하기 위해 CameraSubject가 필요합니다.
CameraType이 Scriptable로 설정되면 기본 카메라 제어가 비활성화되고, 개발자가 스크립트를 통해 CFrame을 직접 수정하여 카메라의 위치와 방향을 제어해야 합니다.
현재 지원되는 모드는 Custom과 Scriptable 두 가지입니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
Methods
ViewportPointToRay
화면상의 비율 좌표(0~1)를 입력받아, 카메라 시선 방향의 단위 Ray를 생성해 반환합니다.
Parameters
number
x
Ray가 생성될 화면상의 가로 좌표 비율입니다.
number
y
Ray가 생성될 화면상의 세로 좌표 비율입니다.
number
depth
현재 지원되지 않습니다.
Return
Ray
입력된 화면 좌표를 3D 공간으로 변환한 지점을 시작점으로 하여, 카메라가 바라보는 방향으로 투사되는 Ray를 반환합니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
local ViewportPointToRay = Camera:ViewportPointToRay(0.5, 0.5)
print("Ray Origin : ", ViewportPointToRay.Origin)
print("Ray Direction : ", ViewportPointToRay.Direction)
ScreenPointToRay
화면상의 좌표(픽셀 단위)를 입력받아, 카메라 시선 방향의 단위 Ray를 생성해 반환합니다.
Parameters
number
x
Ray가 생성될 화면상의 가로 좌표(픽셀 단위)입니다.
number
y
Ray가 생성될 화면상의 세로 좌표(픽셀 단위)입니다.
number
depth
현재 지원되지 않습니다.
Return
Ray
입력된 화면 좌표를 3D 공간으로 변환한 지점을 시작점으로 하여, 카메라가 바라보는 방향으로 투사되는 Ray를 반환합니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
local ViewportSize = Camera.ViewportSize
local ScreenPointToRay = Camera:ScreenPointToRay(ViewportSize.X / 2, ViewportSize.Y / 2)
print("Ray Origin : ", ScreenPointToRay.Origin)
print("Ray Direction : ", ScreenPointToRay.Direction)
WorldToViewportPoint
3차원 좌표를 입력받아 해당 지점의 화면상 위치와, 그 좌표가 화면 내부에 포함되는지를 함께 반환합니다.
Parameters
Vector3
WorldPoint
월드 좌표입니다.
Return
Tuple
화면상의 X, Y 좌표를 담은 Vector3와 입력된 WorldPoint가 화면 내부에 존재하는지를 나타내는 불리언 값을 반환합니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
local WorldPoint = Vector3.new(0, 50, -200)
local Vector, OnScreen = Camera:WorldToViewportPoint(WorldPoint)
print(Vector, OnScreen)
GetLargestCutoffDistance
(Deprecated) 카메라의 CFrame 위치와 Focus 지점 사이에 시야를 방해하는 물체가 있는지 확인한 후, 이를 피하기 위해 카메라를 Focus 방향으로 얼마나 이동시켜야 하는지를 계산하여 반환합니다.
Parameters
array
InIgnoreList
시야 처리 과정에서 무시할 인스턴스들입니다.
Return
number
카메라가 장애물에 가려지지 않도록 하기 위해, 현재 위치에서 Focus 방향으로 얼마나 가까이 이동해야 하는지를 계산한 거리입니다.
Code Samples
local Workspace = game:GetService("Workspace")
local Camera = Workspace.CurrentCamera
local IgonoreList = {}
local Distance = Camera:GetLargestCutoffDistance(IgonoreList)
print(Distance)
Events
See also
카메라Last updated