Unreal Engine 5 TIL day 5

2024. 12. 20. 18:59·Unreal Engine
블렌드 스페이스와 움직이는 액터

1. 캐릭터 애니메이션

1. 개념 설명

캐릭터의 생동감을 주기 위해서는 역시 애니메이션이 가장 중요하다.

  • 애니메이션 블루프린트

  • 애니메이션 블루프린트의 구조
    • 애니메이션 블루프린트 안에는 Anim Graph와 Event Graph 가 존재한다.
    • 간단히 설명하면, 이벤트 그래프는 상태를 파악할 수 있는 변수들을 저장하며, 애님 그래프는 그 값을 통해 애니메이션을 재생하는 곳이다.
    • Anim Graph: 캐릭터에 대한 애니메이션 별 로직을 생성된다. 
      • 블렌딩, 본 트랜스폼, 로코모션 등의 노드가 포함된다.
    • Event Graph: 애니메이션 BP의 Event Graph는 특별한 애니메이션 관련 이벤트 컬렉션을 사용하여, 노드의 시퀀스를 개시하는 역할을 한다.
      • 블렌드 스페이스에서 사용할 Axis 값 중 하나인 Speed 값을 가져오기, 현재 캐릭터의 상태를 가져오는 등의 작업을 한다.
      • Event Graph에 존재하는 이벤트 컬렉션
        • Begin Play: 게임 시작 시 실행되지만, 액터의 Begin Play 보다는 먼저 실행
        • Initialize Animation: 애니메이션 블루프린트 인스턴스가 생성될 때 한 번 실행 
        • Update Animation: 프레임마다 실행되어, 애니메이션 블루프린트가 필요한 값에 대한 계산 및 업데이트 수행 (Default로 만들어져 있는 이벤트 - 아래 왼쪽 사진에서 볼 수 있음)
        • 등등

좌측이 이벤트 그래프, 우측이 애님 그래프

  • 블렌드 스페이스: 다수의 애니메이션 또는 포즈를 1차원 또는 2차원 그래프로 구성하여 블렌딩 하는 에셋
    • 블렌드 스페이스는 여러 상태를 섞어서(Idle 상태 + Run 상태) 만든다.
    • 만든 블렌드 스페이스는 애니메이션 BP에서 사용한다.

  • 블랜드 스페이스 세팅
    • Axis Setting: 먼저 우리가 사용할 축의 이름과 범위를 지정한다.
    • 해당 값에 맞는 애니메이션을 추가한다.
      • (Shift 키 누른 상태로 두면, 선에 딱 붙어서 놓을 수 있다.)
      • Ctrl 누른 상태로 초록색 X표시를 움직여서, 현재 값에 대해 출력되는 애니메이션을 볼 수 있다.

좌측이 Axis setting / 우측이 애니메이션을 추가한 모습

  • 애니메이션 블루프린트 세팅
    • 이벤트 그래프 세팅
      • 기본 및 이동 상태
        • 이동하기 위해서는 캐릭터의 스피드 세팅이 필요하다.
      • 점프 (기존에 만들어져있는 Bot_BP를 참고해서 만들었다.)
        • 점프를 위해서는 현재 캐릭터의 상태가 필요하다.
          • 땅에 있는지 하늘에서 떨어지는 상태인지
          • 키보드 입력을 받은 상태인지
    • 애님 그래프 세팅
      • 기본 및 이동 상태
        • 블렌드 스페이스에 이벤트 그래프에서 계산한 스피드 값을 넣어준다.
        • 이때 Cached Pose를 사용하였다. Cached pose는 결과 포즈를 저장해 두어 다른 곳에서 사용할 수 있기 때문이다.
      • 점프
        • State Machine을 하나 만들어서 그 안에 Idle and Run 상태와 점프 및 떨어지는 상태를 함께 구현하였다.
        • State와 Alias를 사용했다.
          • State: 캐릭터나 스켈레탈 메시가 블렌딩하여 드나드는 애님 그래프의 한 부분, 간단히 생각하면 캐릭터의 특정한 상태를 말한다.
              • 각 State는 트랜지션으로 연결할 수 있다.
              • 트랜지션은 어떤 상태에 다른 스테이트로 바꿀지에 대한 정보가 있다. (자동 규칙 옵션도 있음-아래 사진)
          • Alias: 복잡한 상태를 간단하게 해줄 수 있는 노드이다.
            • Alias 를 만들면, 현재 어떤 상태를 나타낼지를 체크하는 부분이 존재한다.
            • 체크한 상태에서 특정 조건(트랜지션)을 만족하면, 다른 상태로 이동할 수 있게 해주는 것이다.
            • 말로는 설명이 조금 어려울 수 있어서, 언리얼 docs에 예시 사진을 추가하였다.
              • 왼쪽이 Alias를 사용하지 않은 상황이고, 오른쪽이 Alias를 사용한 상황이다.
              • MyAlias는 Locomotion과 Land 상태를 나타내고 있기 때문에, 왼쪽 처럼 복잡한 그래프를 오른쪽과 같이 분리시켜, 간단하게 표현할 수 있다.

 

2. 세팅 내용

  • 애니메이션 BP의 이벤트 그래프
    • 노란색 부분: 가져온 Pawn이 제대로 된 것인지 파악하는 부분
    • 파란색 부분: 캐릭터의 속력을 가져오기 -> Speed 변수 Set
    • 주황색 부분: 캐릭터가 떨어지고 있는 상태인지 체크 (Is Falling 노드를 이용) -> Is In Air? 변수 Set
    • 초록색 부분: 우리가 키를 입력해서 캐릭터가 움직이고 있는 상태인지 체크 -> Movement Input 변수 Set

 

  • 애니메이션 BP의 애님 그래프

  • AirandIdleRun 스테이트 머신
      • 트랜지션 세팅 
        • 노란 동그라미는 자동 규칙 옵션
        • 빨간 동그라미는 Is In Air가 false 일 때
        • 초록 동그라미는 Is In Air 가 false이고 Movemenet Input도 false일 때
        • 파란 동그라미는 Is In Air가 false이고 Movement Input는 true 일 때
    • 스테이트세팅
      • Jump의 경우 이미 만들어진 블렌드 스페이스를 사용했다. 
      • Jump를 제외한 모든 State는 해당 이름과 같은 애니메이션을 넣어서 이어주었다.

Jump 스테이트 안의 모습 / LandRun 스테이트 안의 모습

결과 영상

 

2. 움직이는 액터

1. 이동하는 액터

  • 위아래로 움직이는 문
    • 타임라인만 잘 만들면 쉽게 구현이 되었다.
    • 타임라인은 다른 값은 안써봤고, 벡터로만 만들어 보았다. 이때 한가지 값만 조절하려면, 왼쪽에 자물쇠 아이콘을 눌러서 잠그면 된다.

타임라인의 모습

  • 좌우로 움직이는 발판
    • InterpToMovement 컴포넌트를 이용
    • 디테일 창에서 컨트롤 포인트까지 얼만큼의 시간 동안 갈 것인지와, 도착지점인 컨트롤 포인트를 설정해 줄 수 있다.
    • 구현은 생성자에서 Add Control Point Position 노드를 통해 해주었고, Destination이라는 Vector 변수를 하나 만들어서 구현했다.

 

  • 꿀팁
    • 아래 사진에 3D 위젯 표시를 체크한다면, 우리가 뷰포트에서 직접 위치를 보면서 수정이 가능하다!

Destination이 뷰포트에서 보인다!

 

2. 회전하는 액터

  • 원판 위를 회전하는 자동차 장애물
    • 수업시간에 배운 내용을 써보려고 했는데, 발판은 움직이지 않고, 위의 자동차만 움직이도록 구현하고 싶어서 살짝 수정을 해 보았다.
    • Rotaxis 라는 빈 static mesh를 만들고, car mesh를 자식 컴포넌트로 넣은 후 car의 위치를 오른쪽 사진처럼 이동시켜 주었다.
    • 이후 아래 블루프린트 처럼 회전하는 주체를 Rotaxis로 해주어 생각한 대로 회전하도록 구현하였다.

3. 미끄러운 발판

  • Character Movement 컴포넌트에 존재하는 마찰력 관련 값을 세팅하여, 미끄러운 바닥을 만들었다.
  • 미끄러운 바닥으로 구현하고자 하는 바닥에 collision을 두어 해당 collision 안에 있으면 미끄러워지고, 밖으로 나오면 다시 원래 상태로 세팅을 해주어야 한다.

4. 추가적인 구현

  • 물 머티리얼 및 물위에 떠있는 듯한 물체들
  • 부서지는 발판
    • 미끄러지는 발판과 함께 추가할 예정

3. 결과물

 

4. 새롭게 배운 기능

  • 애님그래프 스테이트
    • Alias
  • 이동 관련 노드
    • Add Local Rotation
      • target을 중심으로, 1초에 넣어준 값 만큼 회전한다.
    • Set Relative Location
      • target 위치를 기반으로 하여, 해당 input으로 들어온 위치만큼 이동시켜준다.
  • 마찰 관련 세팅
    • Character Movement에 존재하는 값들
      • 지면마찰(Ground Friction)
      • 마찰 인수 제동(Braking Friction Factor)
      • 감속 걷기 제동(Braking Deceleration Walking)

5. 참고자료

애니메이션 BP: 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/graphing-in-animation-blueprints-in-unreal-engine

스테이트머신: 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/state-machines-in-unreal-engine?application_version=5.4

 

'Unreal Engine' 카테고리의 다른 글

UE_LOG 보충 (+ 과제)  (1) 2025.01.07
Unreal Engine 간단한 로그 찍기  (2) 2025.01.06
Unreal Engine 5 TIL day 4  (1) 2024.12.19
Unreal Engine 5 TIL day 3  (1) 2024.12.19
Unreal Engine 5 TIL day2  (1) 2024.12.17
'Unreal Engine' 카테고리의 다른 글
  • UE_LOG 보충 (+ 과제)
  • Unreal Engine 간단한 로그 찍기
  • Unreal Engine 5 TIL day 4
  • Unreal Engine 5 TIL day 3
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    BFS
    싱글턴
    상속
    Vector
    actor 클래스
    map을 vector로 복사
    C++
    blend pose
    const
    매크로 지정자
    additive animation
    gamestate
    템플릿
    motion matching
    applydamage
    character animation
    enhanced input system
    DP
    addonscreendebugmessage
    cin함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
Unreal Engine 5 TIL day 5
상단으로

티스토리툴바