사용자 카메라 제어

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

사용자의 세계 관점은 <Class.Camera> 개체로 표시됩니다. 카메라 동작을 다양한 방법으로 사용자 경험에 적용할 수 있습니다. 예를 들어, 카메라는 몬스터가 지나가는 세계의 이벤트에 반응하거나, 사이드 스크롤러에 측면에 잠겨 있습니다.

첫 번째 사람 카메라 생성

첫 번째 개인 카메라는 카메라가 캐릭터의 머리와 함께 잠겨 있는 보기입니다. 이는 실제 생활에 더 정확하게 사용자를 몰입시키는 데 사용됩니다. 이것은 슈터 및 스토리 체험에서 목표가 사용자를 몰입시키는 것입니다.

첫 번째 사람 카메라
클래식 Roblox 카메라

In Studio, the StarterPlayer 개체에는 사용자의 카메라에 영향을 주는 여러 속성이 포함되어 있습니다. The CameraMode 속성은 카메라가 어떻게 동작하는지 결정합니다.

  1. Select StarterPlayer .

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

  3. 첫 번째 사람 카메라가 액션확인하기 위해 플레이테스트.

측면 스크롤 카메라 생성

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

카메라 스크립트

  1. Expand StarterPlayer, and in StarterPlayerScripts add a 로컬 스크립트 named CameraManager .

  2. 스크립트 상단에 다음 코드 샘플을 복사하여 Player 서비스 를 받고 다음 변수에서 로컬 사용자를 가져옵니다.


    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. 함수 내에서 사용자의 캐릭터 모델을 가져오고 if 문을 사용하여 존재하는지 확인합니다.


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

카메라 포인트

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

  1. 사용자 지정 쿼리를 사용하여 인간형 뿌리 부분을 검색하고 if 문을 사용하여 존재하는지 확인하십시오.


    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 측면 스크롤 룩을 제공하려면 카메라는 캐릭터의 측면에 직접 둔다. 카메라의 위치에 깊이를 추가하여 카메라의 위치에 사용자를 배치하십시오. 이를 위해 카메라의 위치에 대한 부분 Datatype.


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 속성을 가지고 있어 위치를 결정합니다.

Datatype.CFrame.lookAt()를 사용하여 카메라를 업데이트할 수 있습니다. 이는 두 위치를 사용하며 첫 번째 위치가 두 번째 위치를 가리키는 경우에 대해 CFrame을 생성합니다. CFrame.lookAt()를 사용하여 카메라를 생성하고 두


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

카메라 동기화

마지막 단계는 사용자와 카메라를 동기화하려면 이 함수를 반복하여 실행하는 것입니다. 사용자가 볼 수있는 이미지는 항상 새로 고쳐집니다. 필요한 모든 계산을 수행하는 데 필요한 분할 초는 render step 이라고 합니다.

RunService:BindToRenderStep() 이렇게 하면 이 세 매개 변수를 수락하여 모든 프레임에서 함수를 실행할 수 있습니다.

  • name - 이 바인딩의 이름이 유일하여 다른 이름의 기능과 충돌하지 않도록 해야 합니다.
  • priority - 숫자가 높을수록 우선 순위가 높습니다. 이 함수는 Roblox의 기본 카메라 업데이트 후에 실행해야 하므로 우선 순위는 내부 카메라의 렌더링 우선 순위보다 1 레벨 더 높게 설정됩니다.
  • function - 렌더링 단계에 바인딩할 함수.
  1. Class.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 를 변경할 수 있습니까? 설정을 조정하여 결과를 좋아하는 결과를 얻으십시오!