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