[ Unreal Engine 5 / #9 Animation Blueprint( FSM ), Notfy ]

SeungWoo·2024년 9월 12일
0

[ Ureal Engine 5 / 수업 ]

목록 보기
10/31
post-thumbnail

Animation

  • ABP_UnityChan 이라는 이름으로 블루프린트 애니메이션을 하나 만든다

  • Anim Graph

    • add new state machine
    • rename to - Locomtion

  • Animation state : FSM

  • State( 상태 )
    • 안에 현 상태에 플레이될 애니메이션 정보 ( 클립 ) 존재
  • Transition
    • 화살표로 이동하는 것을 지칭
    • State에서 다음 State로 즉, 현 애니메이션에서 다음 애니메이션을 플레이하는 조건
    • 해당 State는 하나의 애니메이션이 존재해야 한다

Blend Space 생성하기

  • Blend를 만들어 해당 값에 따라 애니메이션 전환을 할 예정이다

    • 움직일때 run 가만히 있을땐 Idle 상태
  • Event Graph - Set up Speed ( Link Character Velocity )

    • 애니메이션 블르프린트 Event Graph에 Velocity에 따른 speed value 값을 넣어 블랜드에 해당 Speed에 따라 애니메이션을 재생 한다
  • Idle/Run 이라고 지정한 State에 들어가 만든 블랜드를 넣어준다

  • 해당 애니메이션을 Character Blueprint에 넣어준다

  • 현재 캐릭터 속도에 따라서 BlendSpace에 적용된 두 Animation이 Blending 되어 표현

jump

  • bool형 변수를 하나 만들고, 사진 처럼 세팅한다
    • 해당 애니메이션 블루프린트의 소유 Pawn을 Character로 Casting 함
    • Casting 한 이유는, Jump는 Character 클래스에서 제공 하는 기능
    • Character의 필수 구성 요소인 Character Movement Comp 에서 ‘IsFalling’이라는 Boolean을 우리가 만든 IsFalling 변수에 연결

  • Jump의 자연스러운 움직일 위해서 세구간이 필요하다
    • 속력 > 중력 ( 뛰어 오르는 모습 )
    • 속도 = 0 ( 허공에 부유하는 모습 )
    • 속력 < 중력 ( 낙하하는 모습 )


http://naver.me/5WO9RH2z

  • 해당 애니메이션도 UnityChan이 쓸수있게 리타겟팅으로 만든다

  • Transition ( 조건 ) 설정
    • Idle/Run to JumpStart
    • JumpStart to JumpLoop
    • JumpLoop to JumpEnd
    • JumpEnd to Idle/Run

Get Relevant

  • Get Relevant Anim Length

    • 설명 : 이 함수는 현재 상태(State)에 설정된 애니메이션의 전체 길이(시간)를 반환합니다.
    • 비교 : 애니메이션의 전체 지속 시간을 알고 싶을 때 사용하며, 이 값은 고정된 값으로 애니메이션의 전체 길이를 나타냅니다.
    • 예를 들어, 2초짜리 애니메이션이면 항상 2초를 반환합니다.
  • Get Relevant Anim Time

    • 설명 : 이 함수는 현재 상태(State)에서 진행된 애니메이션 시간을 반환합니다.
    • 비교 : 애니메이션이 시작된 이후 현재까지 경과한 시간을 의미합니다. 애니메이션이 50% 진행되었다면 애니메이션 시간의 절반(예: 2초 애니메이션에서 1초)을 반환합니다.
  • Get Relevant Anim Time Fraction

    • 설명 : 현재 상태(State)에서 애니메이션의 진행된 비율(0.0 ~ 1.0)을 반환합니다.
    • 비교 : Get Relevant Anim Time 함수의 비율 버전입니다. 애니메이션이 얼마나 진행되었는지 비율로 반환되므로, 애니메이션의 진행도를 상대적으로 표현할 수 있습니다.
    • 예를 들어, 50% 진행되었을 경우 0.5를 반환합니다.
  • Get Relevant Anim Remaining

    • 설명 : 현재 상태(State)에서 남은 애니메이션 시간을 반환합니다.
    • 비교 : Get Relevant Anim Time 함수와 반대되는 개념으로, 전체 애니메이션 길이에서 현재까지 진행된 시간을 뺀 값을 반환합니다.
    • 예를 들어, 2초짜리 애니메이션이 1초 진행되었다면 1초가 남았다는 값을 반환합니다.
  • Get Relevant Anim Remaining Fraction

    • 설명 : 현재 상태(State)에서 남은 애니메이션 시간의 비율(0.0 ~ 1.0)을 반환합니다.
    • 비교 : Get Relevant Anim Remaining 함수의 비율 버전입니다. 남은 애니메이션 시간을 비율로 표현하며, 애니메이션이 25% 남아 있을 경우 0.25를 반환합니다.
  • 정리

    • Get Relevant Anim Length : 애니메이션의 전체 시간 (고정된 값).
    • Get Relevant Anim Time : 애니메이션이 시작된 후 현재까지 경과된 시간.
    • Get Relevant Anim Time Fraction : 경과된 시간의 비율 (0.0 ~ 1.0).
    • Get Relevant Anim Remaining : 애니메이션에서 남은 시간.
    • Get Relevant Anim Remaining Fraction : 남은 시간의 비율 (0.0 ~ 1.0).

Socket

  • Add Socket To Hand

  • Socket의 이름을 잘 잘 기억해 C++ 클래스에 그냥 지정한 부분에 넣을 것이다
    • 손의 쥔 값을 설정하고 블루프린트의 값을 수정하러 간다

CTPSPlayer.cpp

	WeaponMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("WeaponMesh"));
	WeaponMeshComp->SetupAttachment(GetMesh(), FName("Character1_RightHandSocket"));
  • CTPSPlayer 클래스에 설정해둔 WeaponComponent를 수정 한다
    • (부모) 소켓의 Transform 값의 영향으로, 컴포넌트의 로컬 값은 0,0,0 및 Uniform을 사용 가능
    • 블루프린트의 WeaponMeshComp의 값을 0으로 Scale 값을 1로 맞춰준다

Anim Notify (Anim Notify State)

애니메이션 노티파이 Notify, 노티파이는 애니메이션 시퀀스에서 이벤트를 구성하고 받아 외부 동작을 수행하는 알림 시스템( Notify ( Notification ))

  • AnimNotifyState를 상속받은 C++ 클래스를 하나 만든다

  • UAnimNotifyState로 들어가 해당 해당 NotifyBegin(), NotifyTick(), NotifyEnd()를 가져와서 선언한다

  • 각각의 함수 호출 시점를 뷰포트로 보기 위한 로직

  • Montage 블루프린트를 하나 만든다

  • 빈 몽타주 블루프린트에 공격 애니메이션을 드래그해서 가져다 놓고 Notify를 추가한다
  • 해당 1옆 밑줄 친 부분에 오른쪽 마우스를 클릭하면 Add Notify를 할 수 있다.
    • 작성한 C++ 클래스를 호출하면 해당 작성한 함수가 실행된다

  • 확인 결과 해당 함수의 호출 시점을 알 수 있다

Montage Animation

몽타주(montage)는 따로 촬영된 화면을 떼어 붙이면서 새로운 장면이나 내용을 만드는 기법

  • 캐시 (cache)
    • 캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.

  • 동시에, 두 가지 애니메이션이 나와야 할 때,
    본(bone)을 기준으로 층(Layer)를 나누어 사용하게 함

  • Blend Poses0
    • 블렌드 할 애니메이션 = 새롭게 재생될 애니메이션 = 공격 애니메이션
  • Blend Weights0
    • Base Pose의 애니메이션과, Blend Poses0에 들어올 애니메이션을 블렌딩할 때의 가중치

  • ‘애니메이션 몽타주만 저장가능한 변수 따위’

  • 애니메이션 몽타주만가 없을 때, 어색함을 보완

  • 완성본

  • 주의
    • ~generated.h는 반드시 맨 아래 선언되어야 된다

  • Preview 에서 부분 컴파일 진행이 되어서, Null Error , 메모리 에러를 주의 해야한다.
    • ex) Montage Animation 창을 키면 에러로 꺼지는 현상 따위

profile
This is my study archive

0개의 댓글