애니메이션 블루프린트에서 캐릭터 정보 받아오기

김민수·2025년 1월 31일

언리얼 C++

목록 보기
30/32

1. Character Movement Component 받아서 변수화 시키기

캐릭터가 자연스러운 애니메이션을 표현하려면 각 애니메이션 사이에 애니메이션 전환 조건을 정해야 한다. 이를 위해 이동 속도, 가속도, 점프, 낙하 여부 등의 정보를 가져와야 한다. 하지만 이런 캐릭터의 정보를 직접 가져오기 전에 먼저 Character Movement Component 객체를 변수화해야 한다.

① Event BlueprintInitializeAnimation 이벤트 추가

  • 이 이벤트는 애니메이션 블루프린트가 초기화될 때(한 번만 호출) 실행된다.
  • 따라서, 초기화 과정에서 필요한 캐릭터 정보나 컴포넌트를 가져오는 데 적합하다.

② Get Owning Actor 노드 추가

  • Get Owning Actor 노드를 추가하고 Target을 'self' 로 설정한다.
  • 이 노드는 애니메이션 블루프린트가 적용된 액터(캐릭터)를 가져온다.

③ Cast To Character 노드 추가

  • Get Owning Actor의 반환값을 Cast To Character 노드의 Object 입력 핀에 연결한다.
  • 이는 애니메이션 블루프린트의 소유 액터가 캐릭터인지 확인하고, 맞다면 캐릭터로 변환(Cast)하는 과정이다.
  • 만약 캐스팅이 실패하면, 이후 로직이 실행되지 않는다.

④ 캐릭터 변수 저장

  • Cast To Character 노드의 As Character 출력 핀SET Character 노드에 연결한다.
  • Character 변수를 만들어 저장한다.
  • 이렇게 하면 나중에 캐릭터 정보를 활용할 수 있다.

⑤ Character Movement Component 저장

  • Character 변수에서 Character Movement를 가져와 SET Character Movement 노드에 연결한다.
  • 즉, 캐릭터의 Character Movement Component 변수를 저장해서 이후 애니메이션 로직에서 활용할 수 있도록 한다.

2. 매 프레임마다 캐릭터 정보 가져오기

(1) 매 프레임마다 3가지 캐릭터 정보 업데이트

① Event BlueprintUpdateAnimation 이벤트 추가

  • 이 이벤트는 매 프레임 실행되며, 애니메이션 상태를 지속적으로 업데이트하는 역할을 한다.
  • 이를 활용해 캐릭터의 속도, 이동 여부, 낙하 여부 등을 실시간으로 확인할 수 있다.

② Character 객체 유효성 검사 후 가져오기

  • Character 변수가 유효한지(Is Valid) 확인한 후, 유효할 경우에만 가져온다.
  • 만약 Character 변수가 유효하지 않다면(Is Not Valid), 이후 로직을 실행하지 않는다.
  • 이를 통해 Null Reference 오류를 방지하고, 불필요한 연산을 줄일 수 있다.

③ 캐릭터 정보 가져올 만큼 분기 나누기

  • Sequence 노드를 사용해서 여러 개의 상태 업데이트를 순차적으로 실행한다.
  • Then 0, Then 1, Then 2로 분기해서 각각 이동 속도, 이동 여부, 낙하 여부를 계산하는 로직을 실행한다.
  • 이렇게 하면 한 프레임 내에서 여러 개의 캐릭터 정보를 동시에 업데이트할 수 있다.

(2) GroundSpeed - 캐릭터 이동 속도 계산하기

① 캐릭터의 현재 속도(Velocity) 가져오기

  • Character Movement Component에서 Velocity(속도 벡터) 값을 가져온다.
  • VelocityX, Y, Z 축의 이동 속도를 포함하는 벡터로 표현된다.

② 지면 속도(Ground Speed) 계산

  • Vector Length XY 노드를 사용해서 X, Y 평면에서의 속도만 추출한다.
    • Z 축(수직 이동)은 제외해서 지면에서의 속도만 계산하도록 한다.
    • 이를 통해 점프 중에도 속도를 측정할 수 있다.

③ Ground Speed 변수에 저장

  • 계산된 지면 속도 값을 Ground Speed 변수에 저장해서 이후 애니메이션 상태 전환에 활용한다.

(3) bShouldMove - 캐릭터가 움직이고 있는지 판단하기

① 이동 속도(Ground Speed) 조건 확인

  • Ground Speed 값이 3.0보다 큰지 비교한다.
    • Ground Speed > 3.0TRUE (이동 중)
    • Ground Speed ≤ 3.0FALSE (정지 상태)

② 현재 가속도(Acceleration) 확인

  • Character Movement Component에서 Get Current Acceleration을 사용하여 현재 가속도 벡터를 가져온다.
  • 이 값을 (0,0,0) 벡터와 비교하여 캐릭터가 힘을 받고 있는지 판단한다.
    • Acceleration == (0,0,0)TRUE (멈춰 있음)
    • Acceleration ≠ (0,0,0)TRUE (이동 중)

③ 두 조건을 결합해서 최종 이동 여부 결정

  • AND 노드를 사용해서 "Ground Speed가 3.0보다 크다" AND "가속도가 0이 아니다" 조건을 체크한다.
  • 두 조건을 모두 만족하면 Should Move 변수를 TRUE(이동 중) 으로 설정한다.

(4) bIsFalling - 캐릭터가 공중에 있는지 판단하기

① 캐릭터의 이동 상태 확인

  • Character Movement Component에서 Is Falling 함수를 호출해서 캐릭터가 공중에 있는지 확인한다.
    • 이 함수는 캐릭터가 점프 중이거나 낙하 중일 때 TRUE를 반환한다.
    • 반대로 지면에 있을 경우 FALSE를 반환한다.

② Is Falling 변수에 저장

  • Is Falling의 반환 값을 bIsFalling 변수에 저장해서 이후 애니메이션 상태 전환에 활용한다.
profile
안녕하세요

0개의 댓글