UE4 Chapter 11-2. 시네마틱 : 게임에서 영상 플레이하기

Date:     Updated:

카테고리:

태그:

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

🚖 게임에서 영상 플레이하기

플레이어가 보스 근처에 가면 자동으로 이전에 만든 시네마틱 영상이 플레이 되게끔 하기. 👉 보스가 있는 지점에 충돌 체크를 해야 함. 충돌이 일어나면 영상 플레이.

🚩 “BossCinematicTrigger” 액터 블루프린트

image

Mesh가 없는 빈 액터 “BossCinematicTrigger” 블루프린트를 생성한 후 위와 같이 Box Collision 컴포넌트를 붙여주고 콜리전의 크기를 조정해준다.

image

이렇게 보스가 있는 곳 계단 즈음에 “BossCinematicTrigger” 블루프린트를 통해 액터를 레벨에 배치해준다. 이제 플레이어가 이 곳을 통과하면 시네마틱 영상이 플레이되게 할 것이다.

image

  • ActorBeginOverlap
    • 유니티에서의 Trigger 충돌 이벤트처럼 이 액터가 다른 액터와 겹칠 때 발생하는 이벤트. (물리적 충돌로 튕겨지는게 아니라 통과될 때, 즉 겹칠 때)
    • 이 액터(“BossCinematicTrigger”)의 Collision 에 Trigger 충돌 이벤트가 발생하면 레벨 시퀀서를 생성하고(Create Level Sequence Play) 이를 재생한다.
      • 생성할 레벨 시퀀서는 지난번에 만든 마스터 레벨 시퀀스인 Master_Boss1


🚖 영상 플레이 시작시, 영상 끝날시 처리해줘야 할 작업

🚩 “BossCinematicTrigger” 액터 블루프린트

image

이렇게 많타…

  • 이벤트
    • ActorBeginOverlap 👉 영상이 시작될 때 처리해 줄 작업들
    • OnFinish_Boss1Sequence(커스텀 이벤트 만듬) 👉 영상이 끝날 때 처리해 줄 작업들

영상 시작 할 때 해 줄 작업들

image

ActorBeginOverlap “BossCinematicTrigger” 액터의 Box Collision 과 겹쳐지면 발생

  • 1️⃣ 마스터 레벨 시퀀스 플레이
    • Create Level Sequence Player
      • Master_Boss1 마스터 레벨 시퀀스를 재생시킬 시퀀서 생성
    • Play
      • Master_Boss1 마스터 레벨 시퀀스를 재생
      • 현재 위치로부터 재생한다.
  • 2️⃣ 영상 재생이 다 끝나고난 후에 영상 재생 끝 날 때 해 줄 작업들을 진행할 OnFinish_Boss1Sequence 커스텀 이벤트를 호출한다.
    • Get Length
      • 레벨 시퀀스 영상 길이 리턴
      • Master_Boss1 마스터 레벨 시퀀스를 타겟으로 받아와 이의 영상 길이(Float)을 리턴
    • Set Time by Event
      • 시간(Float)을 입력 받아, 해당 시간을 타이머로 하여 이 시간이 지나고난 후에 입력 받은 이벤트를 호출한다.
  • 3️⃣ 플레이어 캐릭터의 움직임을 막기 위해 입력을 불가능하게 한다. 시네마틱 영상이 재생되는 중에 플레이어 캐릭터가 키보드 입력을 통해 카메라 앞을 가리면 안되기 때문에..
    • Disable Input
      • 입력을 받지 않는다. 타겟은 0 번째 Player CharacterPlayer Controller 입력을 받지 않음.
  • 4️⃣ “BossCinematicTrigger” 액터의 Collision 을 비활성화 시킨다.
    • Set Actor Enable Collision
      • 원인을 찾지 못했지만, 시네마틱 영상 재생 중에도 “BossCinematicTrigger” 액터에 플레이어 캐릭터 액터가 충돌을 일으켜 영상이 새로 다시 시작되고 다시 시작 되고 무한 반복하는; 그런 일이 생겼다. 캐릭터는 Collision 보다 한참 앞에 있는데 왜 자꾸 충돌됐던걸까. 아무튼 그래서 그냥 시퀀스 재생이 시작되면 “BossCinematicTrigger” 액터의 Collision 을 비활성화 시켜서 문제를 해결했다.
      • 타겟은 self (“BossCinematicTrigger” 액터)

image

  • 5️⃣ 모든 액터들을 검사하여 Character 클래스의 자식인 클래스들(플레이어, 몬스터, 보스 블루프린트 이렇게 3가지)타입을 가진 액터들을 보이지 않게 + Tick Event 를 돌리지 않게 한다.
    • 설명
      • 시퀀스 영상은 플레이어, 보스 액터로 찍는 것이 아닌 플레이어와 보스 Mesh 를 배치하여 찍었기 때문에(이전 포스트 참고) 영상이 재생되는 동안에는 실제 게임 로직에 사용되는 플레이어, 보스 액터는 1️⃣ 안보이게 해야 하고(렌더링 하지 않음), 2️⃣ 그들 각각의 블루프린트에서 Tick Event 를 돌리지 않도록, 즉 아무 기능도 하지 않도록 해야 한다.
      • 몬스터 액터들도 마찬가지다. 플레이어를 추적하기 때문에 영상 재생 중에 플레이어를 공격하거나 영상에 뜻하지 않게 출연할 수 있으므로 1️⃣ 안보이게 해야 하고, 2️⃣ 그들 각각의 블루프린트에서 Tick Event 를 돌리지 않도록 해야 한다.
      • 몬스터, 플레이어, 보스 블루프린트는 Character 클래스의 자식 클래스로 만들어진 블루프린트이다. 다형성에 의해 Character 타입인 액터만 찾으면 된다.
    • Get All Actors Of Class
      • 특정 클래스 자식인, 해당 레벨의 모든 Actor 들을 찾아 배열에 담아 리턴한다.
      • 유니티의 FindObjectOfType 같은 함수인듯 하다.
      • 레벨에 액터가 많다면 성능에 부하가 생길 것이다.
    • Foreach
      • 입력 받은 배열의 모든 원소들에 대해 반복을 진행한다. 배열의 모든 원소 순회가 끝나면 자연스레 종료 됨. Array Element 는 매 반복의 원소, Array Index 는 매 반복의 인덱스, Completed 는 foreach 문이 다 끝나면 실행 되는 핀. Loop Body 는 foreahc 문이 돌건 말건 반복 시켜 놓고 바로 다음 실행핀 실행.
      • 해당 액터(원소)의 클래스가 “Character” 타입이거나(OR), “CharHpBarBP” 타입이라면(몬스터의 HP bar 액터, 얘도 사라져야 하므로)
        • 1️⃣ Set Actor Hidden In Scene
          • 해당 원소를 안보이게 한다. New Hidden 에 체크
        • 2️⃣ Set Actor Tick Enabled
          • 해당 원소의 Tick Event 를 멈추고자 Enabled 는 체크 해제
  • 6️⃣ 플레이어의 UI 도 영상 재생 중엔 안보이게
    • Get Game Instance로 “SideScrollGameInstance” 게임 인스턴스를 가져와서 예전에 만들었던, 파라미터 값에 따라 플레이어 UI를 화면에 띄우거나 해제하는 Show Game Play Main Widget 함수를 호출. 플레이어 UI 를 화면에 그리지 않도록 파라미터는 False 로 넘김.

영상 재생 끝 날 때 해 줄 작업들

image

image

image

  • 영상 재생이 다 끝나고난 후에 실행 될 OnFinish_Boss1Sequence 이벤트.
  • 1️⃣ 영상에 출연했던 “mutant”, “root_sword_and_shield_idle” 메시를 안 보이게 한다.
    • Actor 타입의 BossMesh, PladinMesh 변수를 만들고 눈을 뜨게 해주면 에디터 상에서 보이게 된다. 언리얼 에디터 디테일 패널에서 변수에 각각 시퀀스 영상에 출연하기 위해 배치되어 있는 두 Mesh 를 각각 할당해준다.
    • Set Actor Hidden in Game 으로 BossMesh, PladinMesh 두 메시를 New Hidden 체크
  • 2️⃣ 플레이어 키보드 입력 다시 활성화
    • Enable Input

image

  • 3️⃣ 모든 액터들을 검사하여 Character 클래스의 자식인 클래스들(플레이어, 몬스터, 보스 블루프린트 이렇게 3가지)타입을 가진 액터들을 다시 보이게 + Tick Event 를 다시 돌리게 한다.
    • New Hidden 체크 해제, Enabled 체크
  • 4️⃣ “BossCinematicTrigger” 액터는 이제 필요 없으므로 Foreach문이 끝나면 Destroy 한다.
  • 5️⃣ 플레이어 UI 를 다시 활성화 한다. (IsShow : True)


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

맨 위로 이동하기

UE4 Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기