22. [UE5] 다른 액터와 캐릭터가 상호작용 하기(Overlap, CutScene, LevelBlueprint)

2024. 10. 23. 09:32·4. 언리얼 엔진(Unreal Engine) 공부/Unreal Engine 5

1. 충돌영역 설정 및 이벤트 발생

1) Overlap

  • BP_Overlap으로 Blueprint Actor 생성 
  • 편집창에서 Box Collision을 최상위 Component로 하고, 하위에 Cube를 넣고 Z Scale를 0.1로 줄임
  • Collision 사이즈를 늘려 다음과 같은 Overlap 영역 지정

 

 

  • Overlap 이벤트가 발생할 때(이벤트 감지), 어떤 반응을 일으킬지 구현해보자
  • EventGraph에 적용하고 싶은 대상에 적용 → Event ActorBeginOverlap
  • Cube에 떨어졌다가 다시 다가가야 Overlap이 발생함
객체 지향 프로그래밍
충돌 체크로 이벤트가 발생되는 상황에서 캐릭터에 반응을 하고 싶을 때, 캐릭터(대상에 직접)에 직접 프로그래밍을 하는 것

 

 

 

  • Cube 위에 올라가면 Sphere가 떨어지도록 해보자
  • 충돌체를 여러 개 사용하려면 DefaultSceneRoot가 필요함
  • 계층 구조, 포함 관계를 잘 구분해줘야 함
  • DefaultSceneRoot가 있으면 Billborad가 보임

 

 

  • Set Actor Location은 BP_Pawn 자체를 움직이기 때문에 Actor 전체를 제어
  • 현재 위치 기준으로 Now Location 입력하기 (각각 50만큼 이동)
  • Cube 위로 올라가니 위치가 변경 되지만 Sphere만 위치를 변경하려고 했던 처음 목적과 다름

 

 

  • Sphere만 움직이는 API를 찾아야 함
  • 세 개의 노드를 비교하면 각각 타겟이 다름
    • Set Actor Location : 타겟은 액터 전체
    • Set Relative Location / Set World Location : 액터 전체가 아닌 Blueprint Actor 안에 있는 Component 하나하나를 제어

 

 

  • Set World Location 사용 : Level 공간에 있는 World 좌표의 원점을 기준으로 함
  • 기준을 잡기가 불편하기 때문에 계산이 어려워 적절하지 않은 API

 

 

  • Set Relative Location 사용 : Actor가 배치된 좌표 위치에서 Actor 원점을 기준으로 새로운 위치를 설정

 

  • Event ActorEndOverlap : 박스에 내려갔을 때 원래 위치대로 돌아오도록 하기

 

 

  • 이벤트 발생 시 애니메이션으로 좀 더 부드러운 움직임 구현하기
  • Timeline 노드 생성 후 편집창에서 +Track → Add Float Track → 키를 생성할 위치에 우클릭으로 Add key to CurveFloat_0
  • 가로축은 시간, 세로축은 값
  • Time과 Value는 모두 0으로, 길이는 1초로 맞춰야 하기에 Length를 1로 바꿈

 

 

  • 증가하는 초 당 실행을 Update(실행핀)가 이벤트를 발생시킴
  • Timeline에 생성된 Track의 이름을 바꾸면 노드 내 핀의 이름도 바뀜
  • 핀을 나눠서 X, Z Location에 연결
  • 0에서 튀어나와 1까지 증가하는데, 값이 너무 작아 값을 보정해야 함 → multiply (내가 원하는 간격)
  • 애니메이션의 값도 보정이 필요

 

 

  • New Location이 Sphere의 위치인 x축 100정도에 시작해야 함
  • 값을 키우기 위해 Multiply를 해야하는데 Add보다 앞에 노드를 넣어야 함
    • 위치가 변하지  않게 하기 위해
    • 0에서 10까지 증가하겠다(100cm이동)
  • Timeline으로 보정할 땐, 그래프를 조정하고 노드를 옆과 같이 바꿈

 

 

  • 위치 이동 애니메이션에서는 등속도 / 감속 / 가속이 필요
  • 많이 사용하는 EaseIn

 

 

  • 발판에 내려갈 때 Sphere가 다시 원래대로 돌아오도록 하려면, Event ActorEndOverlap을 Reverse와 연결하면 역으로 재생해서 다시 돌아옴
    • 올라갈 땐 감속 , 내려갈 땐 감속

 

 

 

2) 여닫이 문 인터랙션 및 애니메이션

  • Blueprint Class Actor 생성 후 편집창으로 이동
  • Blueprint 안에 만들어진 메쉬를 가져오고 싶으면 Add → StaticMesh (가져올 수 있는 틀)
  • 프레임을 먼저 가지고 오고, 앞을 바라보는 방향을 X축으로 함
  • 동일한 계층에 StaticMesh를 추가하고, 문짝을 가져옴

 

 

  • 문짝의 위치를 잡아주기
  • 충돌하면 애니메이션이 작동되는 영역인 Collision 영역을 만들기
  • 캐릭터가 문 앞에 있으면 충돌 영역을 감지해야 함 → 문 틀을 벗어나지 않는 범위에서

 

 

  • EventGraph로 문이 열리도록 함
  • 미닫이 도어는 위치 이동 노드, 여닫이 도어는 회전 노드가 필요
  • Set Relative Rotation(door)를 가져오면 따로 door 노드를 가져올 필요 없이 바로 연결 시켜줌
  • 문이 급진적으로 열리기 때문에 *(Multiply) 노드를 사용해 부드럽게 열리도록 함

 

 

 

3) 두 개의 다른 Blueprint를 연결해 인터랙션(제어)

  • Cube Blueprint / Cone Blueprint 만들기
  • Cube Blueprint가 Cone Blueprint의 존재를 알 수 있도록 함 → Blueprint Class의 정보를 가져옴(Get Actor Of Class)

 

 

  • 새로 Cube Blueprint / Cone Blueprint 만들고, Timeline도 생성해 다음과 같이 설정
  • 위치가 실행될 때마다 다르게 배치되면 값이 계속 바뀌기 때문에 숫자를 바로 더하기가 어려움 → 액터의 현재 위치를 가져옴(Get Actor Location)
  • Cone의 현재 위치를 가져와야 하기 때문 Target이 Self가 되면 안됨 → BP Cone으로 설정한 Get Actor Of Class의 Return Value를 Get Actor Location 그리고 Set Actor Location Target과 연결
Get Actor Of Class에서 Target을 Cone으로 해 Blueprint 정보를 가져오고, 거기서 Cone의 위치 정보를 받기 위해 Get Actor Location을 Return Value에 연결

 

 

  • Split Struct Pin으로  Vector 값을 분리하고, 다음과 같이 노드를 추가하고 연결
  • 0~1 사이의 값을 100으로 곱해주고 이동 값을 더함(Y는 기존 값을 그대로 사용)
  • 값을 조절하면서 원하는 위치로 맞춤

 

 

  • Event ActorEndOverlap 노드를 추가하고, 다음과 같이 구성 → 대신 한 번만 가능 (반복해서 왔다갔다는 불가). 업데이트가 한 번 진행되고 멈춤
  • Subtract 노드는 핀의 위치에 따라 값이 달라지기 때문에 주의해서 사용(빼줘야 할 값을 상단 핀에 위치)

 

 

물리 적용을 Blueprint로 제어
  • Get Actor Of Class에서 Set Simulate Physics 연결하고, Simulate 체크
  • 물리가 적용되어 떨어질 때 중력이 느껴짐

 

 

충돌 영역에 다가가면 Material 적용하기
  • Overlap용 Cube Blueprint와 Material이 적용될 Cylinder Blueprint 두 개 만들기
  • Material을 만들고, Set Material 노드에 해당 머티리얼을 적용

 

 

 


2. 일정 장소 도달 시 재생되는 컷씬 만들기

1) 컷씬 원리 익히기

  • 캐릭터가 어느 위치에 도달했을 때 카메라가 움직이는 컷씬 만들기
  • CutScene 폴더를 만들어 Level과 Sequence 파일을 저장
  • 계단 에셋을 구해 편집창으로 이동해 Collision → Auto Convex Collision으로 대략적인 충돌 영역 만들기
  • Blueprint Actor로 Trigger Box를 만들어 특정 위치에 놓고, 그 위치에 도달하면 Overlap 이벤트 발생(애니메이션 실행)

 

 

  • Camera Rig Rail로 컷씬 용 영상 만들기
  • Open Level Blueprint를 열어 컷씬 플레이 모드를 제어하기

 

 

  • 아웃라이너에서 BP_TriggerBox 선택 후 EventGraph에서 On Actor Begin Overlap을 생성하면 해당 Blueprint와 연관된 노드가 생성됨
  • On Actor Begin Overlap은 Event Actor Begin Overlap과 성격은 같지만 명칭이 다름
  • 아웃라이너에서 Sequencer를 Blueprint EventGraph로 드래그
  • 아래는 가장 기본은 Sequencer 플레이로, 트리거에 다가가면 컷씬이 플레이 되지만 진행 중에 플레이 캐릭터가 움직여짐 → 대체적으로는 컨트롤할 수 없게 하는 것이 일반적

 

 

  • Sequencer가 재생되는 동안 메인 캐릭터를 컨트롤 할 수 없게 하자
  • 충돌 반응을 일으켰을 때, 자기 자신(self) 외의 Other Actor 는 상대방을 의미
    • Overlapped Actor : Event를 추가할 때 선택한 Actor
    • Other Actor : Event 발생 시 상대 Actor

 

 

  • 컨트롤을 못하게 하려는건 Other Actor(Character) → Disable노드에 연결. 키보드, 마우스의 Input 입력이 안됨
  • 플레이 다음으로 키보드 입력이 Enable하도록 만들어야 함
  • 진행 시간은 Duration, 진행되는 동안에는 기다리기

 

 

  • 특정 구역을 지나갈 때 컷씬이 재생된다면 한 번만 보여지도록 → Do Once

 

 

전체 노드 및 주석 정리
  • 움직임을 막고 플레이하는 것이 논리에 맞기 때문에 Disable Input을 Play 노드 뒤에 놓기
  • 타겟은 Other Actor(Character)
  • Play가 끝나면 다시 캐릭터가 움직일 수 있도록 Enable Input을 넣지만 컷씬이 끝날 때 까지 기다려야 하기 때문에 Delay 노드도 추가
  • Duration에 재생 시간을 일일이 바꾸고 기입하는 것이 번거롭기 때문에 값을 직접 입력하지 않고 Sequencer의 플레이 타임만큼을 기다리도록 Sequence Play 객체에서 Get Deuration 연결
  • 두 개의 데이터 타입이 다르지만 연결하면 QualifiedFrameTime To Seconds 노드가 자동으로 추가 → 프레임 시간에서 초 시간으로 바꿔줌
  • 계속 실행되지 않고 최초 한 번만 실행하도록 만드는 Do Once

 

 

2) 게임 시작 후 바로 시작되는 인트로 컷씬

  • 캐릭터 애니메이션을 위해 Mixamo에서 캐릭터와 애니메이션 다운로드
  • Sitting / Sit to Stand / walking / Left Turn (처음 것만 with skin 그 외는 without skin으로 다운)
  • Walk는 Trim으로 네 걸음 정도로 늘려야 Blend Animation이 잘 됨
  • 앉아 있다가 걸을 때 방향 전환이 필요하기 때문에 Left Turn을 넣고, Trim을 오른쪽으로 끝까지 늘림
  • 파일 이름들 정리

 

 

  • 메인 캐릭터의 인트로 컷씬이 끝나면 바로 플레이가 가능하도록 구성
  • 컷씬을 위한 Sequencer에 Player Start Actor가 아닌 Skeletal Mesh를 넣어야 함
    • 시퀀서 애니메이션에 사용해야 할 Actor / Camera : Skeletal Mesh / Cine Camera
    • 게임 플레이에 사용해야 할 Actor / Camera : Character Blueprint / Camera
Sequencer에 Cine Camera, Camera 모두 사용이 가능하지만, Camera는 컷씬에서 게임으로 자연스럽게 이어질 수 있다는 장점이 있음

 

 

Player Start Actor를 사용하지 않고 Blueprint Character Class를 사용하기기
  • Character Blueprint Class를 직접 뷰포트 이동 및 배치
  • 디테일 패널에 pawn을 검색하면 pawn actor 관련 항목들이 뜸(pawn의 속성을 charcter도 가지고 있음 → 자식이기 때문에 상속받음)
  • Auto Possess Player를 player 0으로 하면 우선권을 가짐
    • Auto Possess Player  : Game에서 메인 캐릭터 플레이어의 소유권을 자동으로 생성되는 Player가 아닌 레벨에 배치한 Character Blueprint에 소유권을 적용하는 기능
  • 배치한 Character Blueprint로 바로 플레이 가능

 

 

  • 애니메이션을 모두 꺼내 연결시키고 블렌드 하기
  • Blending 되는 부분이 어색하면 Show Skeletaon으로 확인
  • 간격 때문에 분홍 Skeletal이 초록 Skeletal이 훅 넘어가는 것 처럼 보임
  • 앞으로 시작될 초록색에 맞춰져야 하기 때문에 Walking 애니메이션 우 클릭 Match With This Bone In Previous Clip 으로 root / pelvis 둘 중 알맞는걸로 선택

 

 

  • 애니메이션을 모두 적용
  • Skeletal Mesh의 Collision에 Character Blueprint의 Sprint Arm이 인식되므로 Skeletal Mesh의 디테일 패널에서 Collision을 검색해 No Collision으로 설정
  • 컷씬에서 바로 플레이까지 자연스럽게 이어지도록 하기 위해 일반 카메라 사용 → Camera 검색후 Camera Actor 추가
  • Sequencer에 넣고 애니메이션 만들기

 

 

  • 시작되면 바로 인트로 컷씬이 실행되도록  Level Blueprint를 열고 Event BeginPlay 노드 생성
  • Play 노드를 생성하고 인트로 컷씬 Sequencer를 불러와 연결
  • Do Once는 필요 없음

 

 

  • 컷씬 재생 시 플레이하는 캐릭터가 2개가 보임(서 있는 건 Character Blueprint → 인풋 동작도 함)
  • Disable Target에 캐릭터를 가져와서 연결하는 건 어렵기 때문에 다른 방법 진행
  • Sequence의 디테일 패널의 Cinematic 항목에서 세 가지를 체크하면 다음과 같이 노드 제 셋팅(Disable, Inable Input 노드 삭제)
    • Disable Movement Input
    • Disable Look at Input
    • Hide Player

 

 

  • 그리고 인트로 컷씬이 끝나면 Skeletal Mesh가 안사라지고 계속 보이기 때문에 노드를 재 설정해야 함
  • Skeletal Mesh를 EventGraph로 가져와서 Destroy Actor

 

 

  • 컷씬과 플레이가 자연스럽게 이어지도록 Camera Cuts 우클릭 → Can Blend 체크
  • 끝 쪽에 자연스럽게 Blending 되도록 Blend
  • 시퀀스 재생 영역을 맞춘 후 플레이하면 영역 만큼 재생 후 바로 게임 플레이 가능

 

 

레벨 일부의 문을 열기
  • 테스트를 위해 캐릭터를 문 쪽 위치로 Play from here이 가능하도록 하려면 Character Blueprint를 잠시 Auto Possess Player를 Disabled로 변환

 

 

  • 문을 열기 위한 Blueprint 만들기
  • Static Mesh Component를 추가 후 Door로 이름 변경, Static Mesh를 지정

 

 

  • 중심이 중간에 있어 문이 열리도록 하는 데에 어려움이 있음 → 이에 대한 방법 2가지

1번 방법

  • Billboard가 Blueprint의 중심이기 때문에 위치를 맞춰주면 그 쪽으로 기즈모를 변경 가능(Blueprint 원점 활용)

 

 

2번 방법

  • Content Browser에서 기존 문 복제 후 레벨에 꺼냄
  • 선택 상태에서 Modeling Mode로 이동해 XForm → Edit Pivot에서 피봇 위치 변경(원본에도 그대로 적용됨)
  • 복제 한 Static Mesh를 Blueprint 의 Static Mesh로 변경

 

 

  • Collision 영역 설정을 위해 Box Collision을 추가하고, 충돌 영역에 맞춰 사이즈 변경

 

 

  • EventGraph에서 문이 열리는 것에 대한 Blueprint 구성
  • 기존 문을 Blueprint Actor로 교체
  • Set Relative Rotation으로 Z축을 기준으로 현재 위치에서 회전 값을 변경하도록 함(Z 값 90)

 

 

  • 문이 열릴 때 자연스러운 애니메이션이 구현되도록 Timeline 노드 생성 후 DoorValue라는 트랙 생성
  • 문이 닫힐 때를 위해 Event ActorEndOverlap도 생성하고, 속도 조정을 위해 * 110

 

 

  • 반대로 열리게 한다면 110을 -110으로 변경
  • 안쪽으로 들어갈 수 있도록 기존의 벽에 적용된 Block All → No Collision

 

 

  • Event ActorEndOverlap이 발생되면 Delay 실행으로 캐릭터가 충돌 영역을 벗어난 후 3초 있다가 문이 닫히도록 함
  • 카메라까지 다 지나간 후 문이 여유있게 닫힘

 

 

트램 움직이기
  • BP_Trigger_Tram이라는 Trigger용 Blueprint Acotr 생성 후 뷰포트에 추가

 

 

  • Tram Mesh를 하나로 묶어야 함(몸체, 문, 포인트라이트) → Blueprint로 불러와 조립하기
  • BP_Tram을 만들어 Blueprint에서 Static Mesh Component를 추가해 Tram 요소들 불러와 조립하고 뷰포트에 배치

 

 

  • Trigger의 Blueprint EventGraph 설정
  • Trigger에 다가갔을 때, 위치가 앞뒤로 이동되도록 함
  • X 방향으로만 100만큼 이동하도록 하고, 나머지는 현재 위치로 설정
  • 타임라인은 움직임 - 멈춤 - 움직임 반복

 

 

  • 처음 실행 될 때 Get Actor Location이 한 번만 실행될 수 있도록 함 → 현재 위치가 계속 업데이트 되서 계속 이동되기 때문
  • 보통은 Do Once를 사용하지만, 여기서는 적용이 안되기 때문에 CurrentLocation 변수를 새로 만들어 이걸 넣어 쓰는 형태로 만듦

 

 

  • IsSaved의 Boolean 타입 변수를 만듦(CurrentLocation에 값이 저장 됐는가 아닌가)
  • Branch 노드를 넣어 False 일 때 비어있기 때문에 실행될 때 저장이 되고, 그로인해 True 로 변환되어 더 이상 재생이 되지 않아 명확하게 한 번만 실행됨

 

 

 

반짝이는 간판 네온 사인 효과
  • BP_Sign을 만들고, Static Mesh Component로 Sign Mesh를 불러와 Rotation 90으로 돌리기

 

  • 시작하자마자 계속 네온이 깜빡이도록 Blueprint 를 구성
  • Set Material은 머티리얼을 통째로 사용해야 하기에 사용 불가
  • Global Scalar Parameter Values 내 intensityemissive를 사용하고 싶음
  • Set Scalar Parameter Value on Materials 노드를 생성하고 Parameter Name 부분에 사용하고 싶었던 항목의 이름을 그대로 기입함

 

 

  • Material Instance 항목을 조절 할 수 있다는 걸 확인
  • 네온 사인이 깜빡이는 느낌의 Timeline 애니메이션을 만들고, Blueprint 노드도 구성

 

'4. 언리얼 엔진(Unreal Engine) 공부 > Unreal Engine 5' 카테고리의 다른 글

24. [UE5] NPC 만들기(정적/동적/Socket)  (2) 2024.11.03
23. [UE5] UI Interaction(Widget)  (0) 2024.10.30
21. [UE5] 블루프린트를 위한 프로그래밍 기초  (1) 2024.10.18
20. [UE5] 블루프린트를 활용한 캐릭터 움직임 제어  (0) 2024.10.14
19. [UE5] 인터랙션 / 충돌체 / 블루프린트 개념  (1) 2024.10.10
'4. 언리얼 엔진(Unreal Engine) 공부/Unreal Engine 5' 카테고리의 다른 글
  • 24. [UE5] NPC 만들기(정적/동적/Socket)
  • 23. [UE5] UI Interaction(Widget)
  • 21. [UE5] 블루프린트를 위한 프로그래밍 기초
  • 20. [UE5] 블루프린트를 활용한 캐릭터 움직임 제어
스농이
스농이
2024.07.22부터의 기록
  • 스농이
    3D 비주얼 아티스트 성장일지
    스농이
  • 전체
    오늘
    어제
    • 3D 비주얼 아티스트 공부 기록 (78)
      • 1. 콘텐츠 기획 공부 (7)
        • 콘텐츠 기획 [이론] (3)
        • 콘텐츠 기획 [실습] (4)
      • 2. 3D 렌더링 및 생성형 AI 공부 (7)
        • VRED (2)
        • Stable Diffusion & Blender (2)
        • Midjourney & GPT4o (3)
      • 3. 후디니(Houdini) 공부 (16)
        • Houdini [이론] (8)
        • Houdini [실습] (8)
      • 4. 언리얼 엔진(Unreal Engine) 공부 (33)
        • Unreal Engine 5 (26)
        • Automotive Animation 스터디 [기.. (5)
        • Automotive Cinematic 스터디 [심.. (2)
      • 2. 블렌더(Blender) 공부 (15)
        • 지오메트리 노드 [이론] (3)
        • 지오메트리 노드 [실습] (2)
        • Blender [이론 및 실습] (10)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
스농이
22. [UE5] 다른 액터와 캐릭터가 상호작용 하기(Overlap, CutScene, LevelBlueprint)
상단으로

티스토리툴바