사용자의 카메라 제어

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

사용자가 세상을 보는 방식은 Camera 개체로 나타납니다.카메라 동작을 다양한 방법으로 경험에 맞게 변경할 수 있습니다.예를 들어, 카메라는 몬스터가 지나갈 때 흔들리거나 사용자 캐릭터의 측면에 잠겨 있는 등 세계의 이벤트에 반응할 수 있습니다.

1인칭 카메라 만들기

1인칭 카메라는 카메라가 캐릭터의 머리와 잠겨 있는 시점으로, 실제 생활에 더 정확합니다.사용자가 세계에 몰입하도록 만드는 것이 목표인 슈팅 및 스토리 경험에서 일반적입니다.

첫 번째 사람 카메라
>

클래식 Roblox 카메라
>

Studio에서 StarterPlayer 개체에는 사용자의 카메라에 영향을 미치는 여러 속성이 포함되어 있습니다. 카메라 모드 속성은 카메라가 어떻게 동작하는지 결정합니다.

  1. Select 스타터 플레이어 .

  2. 카메라 모드를 LockFirstPerson 으로 변경합니다. 이렇게 하면 사용자의 카메라가 머리에서 멀어지지 않습니다.

  3. 플레이테스트를 통해 첫 번째 사람 카메라가 액션모습을 확인합니다.

사이드 스크롤 카메라 만들기

측면 스크롤 뷰는 카메라를 캐릭터의 측면에 대해 고정된 위치에 유지하여 세계에 2차원 느낌을 줍니다.

카메라 스크립트

  1. 스타터 플레이어를 확장하고, 스타터 플레이어 스크립트에 로컬 스크립트 라는 이름의 CameraManager를 추가합니다.

  2. 스크립트 상단에서 다음 코드 샘플을 복사하고 붙여넣어 플레이어 서비스 를 가져오고, 새 변수에서 로컬 사용자를 가져옵니다.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. 함수 updateCamera 를 만듭니다. 이것은 카메라에 대한 새 위치를 가져오고 설정하는 데 필요한 논리를 보유합니다.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. 함수 내에서 사용자의 캐릭터 모델을 가져와 이프 문을 사용하여 존재하는지 확인합니다.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

카메라 지적하기

모든 캐릭터 모델에는 HumanoidRootPart 라는 부분이 포함되어 있으며, 이를 사용하여 캐릭터의 세계 위치를 가져올 수 있습니다.카메라 포인트를 설정합니다.

  1. FindFirstChild를 사용하여 HumanoidRootPart를 가져와 이프 문을 사용하여 존재 여부를 확인합니다.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. HumanoidRootPart의 위치는 사실 사용자의 머리 아래 2스터드입니다.이를 해결하려면 루트의 위치에 Vector3 높이가 2스터드 인 새로운 를 추가하십시오.


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local HEIGHT_OFFSET = 2
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    end
    end
    end

카메라 위치 설정

카메라에도 위치가 필요합니다.사용자의 시점을 2D 가로 스크롤 모양으로 보려면 카메라가 캐릭터의 측면을 직접 보아야 합니다.카메라를 사용자의 측면에 배치하여 카메라 위치의 Z축에 깊이를 추가하여 카메라를 사용하세요.


local player = Players.LocalPlayer
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
end
end
end

현재 카메라 업데이트

이제 카메라의 위치와 카메라의 대상에 대한 변수가 준비되었으므로 카메라의 위치를 업데이트할 시간입니다.작업 공간의 CurrentCamera 속성을 통해 사용자의 카메라에 액세스할 수 있습니다.카메라에는 위치를 결정하는 CFrame 속성이 있습니다.

CFrame.lookAt()를 사용하여 카메라를 업데이트할 수 있습니다.두 위치가 필요하며 두 번째로 가리키는 첫 번째 위치에 위치한 CFrame을 생성합니다.Use CFrame.lookAt() 를 사용하여 위치가 cameraPosition 이고 rootPosition 향하는 CFrame을 생성합니다.


local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end

카메라 동기화

마지막 단계는 이 함수를 반복적으로 실행하여 카메라를 사용자와 동기화하는 것입니다.사용자가 보는 이미지는 지속적으로 새로 고쳐집니다.필요한 모든 계산을 수행하는 데 걸리는 쪼갤음의 시간은 렌더링 단계 라고 합니다.

RunService:BindToRenderStep() 는 이 세 매개변수를 수락하여 모든 프레임에서 함수를 실행하는 것을 간단하게 만듭니다.

  • name - 이 바인딩의 이름, 같은 이름의 다른 함수와 충돌하지 않도록 고유해야 함
  • priority - 숫자가 높을수록 우선 순위가 높습니다.이 함수는 Roblox의 기본 카메라 업데이트 후에 실행되어 우선 순위가 내부 카메라의 렌더링 우선순위보다 1레벨 높게 설정됩니다.
  • function - 렌더링 단계에 바인딩할 함수.
  1. RunService:BindToRenderStep()를 사용하여 렌더링 단계에 updateCamera 함수를 바인딩합니다.


    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 24
    local HEIGHT_OFFSET = 2
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 코드를 플레이테스트하십시오. AD 키를 사용하여 캐릭터를 측면으로 이동합니다.

이소메트릭 카메라 만들기

사용자의 위치를 가져오고 카메라의 위치를 매 프레임마다 업데이트하는 기본 구조는 이소메트릭 카메라 와 같은 다른 카메라 스타일에 적응할 수 있습니다.이소메트릭 카메라는 고정된 각도로 사용자 캐릭터를 약간 아래로 가리키는 3D 뷰입니다.

위치 및 보기 수정

  1. 이전 예제의 코드를 사용하여 cameraPosition를 수정하여 모든 3차원에 동일한 금액을 추가합니다.


    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. 카메라의 FieldOfView 속성을 변경하면 뷰가 평평하게 보일 수 있도록 카메라를 확대하고 축소하는 것을 시뮬레이션합니다.확대하기 위해 20 값으로 설정하고 사용자에게서 카메라의 거리를 증가시켜 보상하세요.


    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local function updateCamera()

카메라의 동작 방식을 변경하여 경험에 전혀 새로운 모습을 얻을 수 있습니다.동일한 스크립트로 상위에서 카메라를 달성하기 위해 cameraPosition를 변경할 수 있는지 확인하십시오.설정을 조정하여 원하는 결과를 얻으세요!