UE4 Chapter 3-7. 플레이어 캐릭터 : 카메라가 플레이어를 따라다니게 하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 황대희님의 언리얼 엔진4 3D 횡스크롤 게임 만들기 강의를 듣고 정리한 필기입니다. 😀
언리얼 엔진 공식 문서 https://docs.unrealengine.com/ko/index.html

🔔 플레이어 캐릭터와 카메라 배치하기

캐릭터와 카메라를 배치하고 카메라가 캐릭터를 따라다니게 구현해보자.

캐릭터 배치

image

이전 강의들에서 만들어 둔 “MoveCharBP” 블루프린트를 드래그 하여 뷰포트에 배치시켜준다.

🚩 “MoveCharBP”의 블루프린트 에디터에서의 디테일 패널

현재 레벨이 바뀌어서 이전에 ‘레벨의 디테일 패널’에서 설정했던 “MoveCharBP”의 중력 scale, 점프 속도 등등 이런 설정값들이 다 날아간 상태다. 레벨이 바뀌어도 “MoveCharBP”의 설정값들은 변하지 않도록 “MoveCharBP”의 블루프린트 에디터에서의 디테일 패널에서 이를 다시 설정해주자. 그리고 컴파일 잊지 말기.

image

image

단, cam 변수에 카메라 할당하는 것은 레벨의 디테일 패널에서!

image

🚩 “MoveCharBP”의 블루프린트 이벤트 그래프

횡스크롤로 게임을 진행할거라서 이전 강의에서 구현했었던 오른쪽 왼쪽 움직임은 지워주도록 한다. Forward Backward 입력 이벤트의 실행핀을 끊어주었다. 그리고 컴파일.


카메라 배치

기존에 배치되어 있던 카메라 액터를 전부 지워주고 모드 패널에서 카메라를 검색하여 이를 뷰포트에 새로 배치시킨다. 플레이어가 카메라 화면의 가운데에 오게끔 적절히 카메라를 배치한다.


🔔 카메라가 플레이어를 따라다니게 하기

뷰포트의 카메라 액터를 클릭한 상태에서 블루프린트를 추가해주기. 이름은 “FollowCamBP”. 카메라에게 플레이어를 매 프레임마다 따라다니도록 하는 기능을 구현할 것.

🚩 “FollowCamBP”의 블루프린트 이벤트 그래프

새로운 카메라의 위치를 플레이어의 위치로부터 ‘카메라 위치와 플레이어 위치의 차이를 나타내는 고정적인 크기의 벡터’(= Offset)를 더한 값으로 매 프레임마다 설정해주면 된다.

카메라의 위치 = 플레이어의 위치 + Offset
  • Offset 변수 추가
    • Vector 3 타입
    • 횡스크롤 게임이라 카메라와 플레이어 사이의 거리는 늘 일정하다. 따라서 Offset 값은 변하지 않고 유지된다. 그래서 게임 시작할 때 Offset을 구해놓는 것이다.
      • 이 과정에서 구한 Offset 값을 사용해서 카메라의 위치를 계속 업데이트 할 것이다. ‘카메라 위치와 플레이어 위치의 차이를 나타내는 벡터’를 Offset이라는 이름의 Vector3 변수에 담는다.


image

💡 게임이 시작되면 Offset 변수 값을 구해 놓는 작업

  • BeginPlay
    • 게임이 시작되면
  • Set Offset
    • Offset 변수의 값을 설정한다.
      • 어떤 값으로 설정하냐면
        • 카메라의 위치 - Player 0 캐릭터의 위치
          • Get Actor Location 👉 이 블루프린트가 붙어 있는 액터(타겟이 self)인 카메라 액터의 Vector3 위치를 리턴
          • Get Player Character 👉 Player Index 0 이 할당 되어 있는 ‘Character’를 리턴한다. 즉, “MoveCharBP”를 리턴함.
          • Get Actor Location 👉 Get Player Character로부터 “MoveCharBP”을 리턴받아 이 액터의 Vector3 위치를 리턴


image

💡 카메라의 새로운 위치를 업데이트 하는 작업. 플레이어의 위치에 위에서 구한 Offset 값을 매 프레임마다 더해주면 된다.

  • Tick
    • 매 프레임마다
  • Set Actor Location
    • 이 블루프린트가 붙어 있는 액터(타겟이 self)인 카메라 액터의 Vector3 위치를
  • (플레이어의 위치 + Offset) 으로 설정한다. Set Actor Location의 New Location에 연결한다.


“MoveCharBP”의 레벨 디테일 패널에서 Cam 변수에 “FollowCamBP”을 다시 할당.

기존에 할당되어 있던 카메라 액터에 “FollowCamBP”이라는 블루프린트가 붙는 바람에 할당 되어 있던 카메라 액터가 날라간 상태. 다시 복습하는 차원에서 적어보자면, 이전 강의에서 “MoveCharBP”의 이벤트 그래프에서 언리얼이 “MoveCharBP”의 1인칭 카메라를 자동 생성하지 않고 Cam에 직접 할당한 카메라 액터를 사용하기 위해서 Set view with blend 해주는 작업을 했었 것을 기억해보자.

image


🔔 카메라가 플레이어를 부드럽게 따라가게 하기

🚩 “FollowCamBP”의 블루프린트 이벤트 그래프

image

  • 한번에 바로 A 벡터에서 B 벡터로 바뀌는게 아니라 A 벡터에서 B 벡터로 부드럽게 바뀌는 효과를 가지려면 LerpDelta Seconds를 사용해야 한다.
    • Lerp 👉 A 벡터 값에서 B 벡터 값 사이에서 alpha 비율(보통 0~1 사이의 실수)에 해당하는 곳을 리턴
      • A 벡터(기존 카메라 위치)
      • B 벡터(새로운 카메라 위치 = 플레이어의 위치 + Offset)
      • 위에서는 그냥 이 값을 바로 새 위치로 집어 넣었었음.
    • 처음 알았는데 Tick 이벤트는 Delta Seconds를 매 프레임마다 출력한다.
      • Delta Seconds 란 현재 프레임과 다음 프레임과의 간격을 초 단위로 표현한 것이다. 예를 들어 프레임간의 간격이 20ms 이라면 Delta Seconds 값은 0.02가 된다.
  • Lerp 노드를 통하여 A 벡터와 B 벡터 사이에서 매 프레임마다 Smooth * Delta Seconds비율에 해당하는 벡터를 리턴한다.
    • Smooth 없이 그냥 Delta Seconds만을 alpha로 한다면, 예를 들어 Delta Seconds가 0.02라면 매프레임마다 A 벡터에서 B 벡터 사이의 2 % 에 해당하는 벡터값이 카메라의 새 위치로 설정되는거라서 카메라가 플레이어를 너무 많이 느리게 따라간다. 너무 느려서 플레이어를 놓치기도..
    • 따라서 1 이상의 값인 기본 값 6.0으로 float 타입의 Smooth 변수를 만들어 Smooth * Delta Seconds비율로 보간하도록 하였다. 좀 더 빠른 속도로 플레이어를 부드럽게 따라가게끔
  • 이 방법을 적용하기 전에는 매 프레임마다 바로 B 벡터로 적용이 되서 카메라가 플레이러를 부드럽게 따라가는 모습은 아니였다.

image



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기