언리얼 엔진 본캠프 19주차-7 언리얼 엔진 C++ : AI(Advanced) - 애니메이션 세팅

정재훈·2025년 4월 26일
0

unreal engine

목록 보기
41/45

Animation Import

    • Import Only Animations를 true 체크 안하면 애니메이션이 Model을 가지고 있는 경우 함께 Import함
    • 중복 모델이 여러 개 생길 수 있음 => 엄청 비효율적

Animation Blueprint

: 복잡한 애니메이션 행동을 만들고 제어하는 데 사용되는 비주얼 스크립트

  • Animation State Machine을 포함하고 있는 애니메이션 관련 규약집
  • 하나의 모델(스켈레톤)에 대해서 애니메이션을 언제 어떻게 적용할 것인가, 어떤 애니메이션에서 어떤 애니메이션으로 전환할 것인가 등등을 정리해놓는 것

플레이어 캐릭터 VS AI NPC 애니메이션 작동 메커니즘 비교

  • 입력 방식의 차이
    • 구분플레이어 캐릭터AI 캐릭터
      제어 방식키보드, 마우스 등의 입력AIController가 결정
      이동 처리입력값을 받아 AddMovmentInput(),
      AddControllerYawInput() 등 사용
      MoveToActor(), MoveToLocation() 등의
      네비게이션 기반 이동
      애니메이션 트리거입력값에 따라 애니메이션 블렌딩 수행AI의 상태에 따라 애니메이션 변경

  • 애니메이션 전환 방식
    • 구분플레이어 캐릭터AI 캐릭터
      애니메이션
      상태 전환
      ABP에서 플레이어의 입력 값을 기반으로
      Speed, Direction등의 변수를 사용해 애니메이션 블렌딩
      Behavior Tree + Blackboard에서의 행동 감지/
      ABP의 로직에 따라 변경
      애니메이션
      적용 방식
      플레이어의 입력값(AxisValue)을 받아
      캐릭터의 Speed를 계산, 이를 ABP에서 사용
      MoveTo 시리즈와 같은 움직임 관련 함수를 실행
      AI 캐릭터 속도 변경 => ABP에서 감지하여 전환

ABP - Event Graph

  • 이동
    • Character의 MovementComponent에서 Velocity 가져와서 이 값에 따라 Run boolean 값 조정
  • 행동
    • 각 행동에 대한 boolean 변수 추가

ABP - Anim Graph

  • 이동(Rocomotion = Basic State)
  • 행동(Acting State)
    • 각 Transition Rule에 대해 표로 정리해놓는게 로직 구현할 때 편할 듯
  • Transition Rule은 게임 기획이나 설계 방향에 따라 다양함
    • 죽었지만 춤은 출 수 있다던지
    • 춤을 추는 중간에 공격 키를 누르면 공격을 한다던가
    • 아니면 반대로 춤 출때 애니메이션이 다 재생될 동안 기다려야한다 등
      => 캐릭터의 상태를 Controller에서 어떤 식으로 전환할 지랑도 연관이 되어 있긴 함
  • 애니메이션에 따라 Loop Animation을 켜야할 수도 있음
    • 특히 Idle, walk, run은 키를 입력하는 동안 계속 보여야함 => On
    • 공격, 점프, 사망, 상호작용 등은 입력이 트리거 됬을 때 한 번만 보여주면 됨 => Off

SFX

기본적으로 Animation Sequence의 Notify Track에서 우클릭 -> Add Notify -> Play Sound로 적당한 시점에 Sound가 발생되도록 함

Sound가 소리의 근원지로부터 멀어지면, 크기가 작아져야할 것 같은데 일반적인 세팅에서는 그렇지 않았음. 이를 해결하는 기능이 Attenuation

SFX Attenuation(감쇠) : 거리 등에 비례해 소리의 크기가 달라지도록하는 기능

  • 배그 생각해보면 발소리/총소리는 기본이고, 비올 때 밖에 있으면 빗소리가 엄청 큰데, 집 안에 들어오면 작아지는 이런 경우, 물 속에 들어간 경우도 있음. 이외에 프로젝트에 따라 다양한 경우가 있을 것임
  • 감소 ATT 모델 : Linear, Logarithmic, Inverse, Log Reverse, Natural Sound, Custom. 언리얼 문서 참고

Notify에서 Play Sound만 그런지는 모르겠지만, 일단 소리가 재생됬을 때 관련 값들이 고정된 상태임 = 중간에 이 소리에 개입을 못함 => 소리가 안들리는 곳에서 소리가 들려야할 거리까지 와도 Sound가 안들림
=> 이 문제는 Meta Sound로 해결 가능

  • Sound를 매우 잘게 쪼개서(프레임단위로), 그 순간 순간 개입할 수 있도록 함

일단 해보니까 Notify 말고 Spawn Sound나 Audio Component를 사용해봐도 똑같음.
대신 Sound Wave든 Sound Cue든 Details의 Voice Management의 Virtualization Mode를 Play when Silent로 설정하면 됨







참조 사이트
1. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animation-blueprints-in-unreal-engine?application_version=5.5
2. https://forums.unrealengine.com/t/sound-not-playing-at-all-when-entering-attenuation-range/2342104/3

profile
드가자

0개의 댓글