[Unreal Engine] Animation Blueprint에서 Owner 캐릭터의 정보를 가져오는 3가지 방법

2025. 5. 19. 17:48·🖥️ Study Note/Unreal Engine

안녕하세요 1년 차 게임 클라이언트 프로그래머 🫛빈콩입니다~

Animation Blueprint에서 Character의 특정 정보를 가져오고 싶을 때 사용할 수 있는 방법 3가지를 정리해 보았습니다.


1. Casting

방법

ABP에서 TryGetPawnOwner로 캐릭터 객체(Object)를 가져와 Casting 하여 원하는 정보를 가져오는 방법

ABP_Base의 EventGraph

성능 : 下

가장 간단하면서 가장 비효율적인 방법이다.

Casting을 할 경우 ABP를 Load 할 때 캐스팅한 Character BP도 함께 Load 되므로 ABP가 무거워진다.

ABP_Base의 Size Map

ABP_Base의 Size Map을 보면 BP_LyraCharacter가 통째로 포함되어 있는 것을 확인할 수 있다.

 

 

 


2. Interface

방법

1. Chracter로부터 원하는 정보를 가져오기 위한 함수들을 가진 Interface를 추가한다.

Character로부터 MaxWalkSpeed를 받을 함수  RecieveMaxWalkSpeed 와 Velocity를 받기 위한 함수  RecieveVelocity 가 추가되어 있는 BlueprintInterface,  BPI_AnimationBlueprintInterface 를 추가했다.

 

 

2. ABP에서 Interface를 상속하여, Character로부터 정보를 받았을 때 어떤 처리를 할지 구현한다.

Interface의 함수  ReceiveMaxWalkSpeed 를 구현 → 캐릭터로부터 Max Walk Speed를 받으면 Character Max Walk Speed 변수에 저장하고 그 값을 출력함

 

 

3. Character에서 원하는 시점에 ABP의 함수를 호출하여 자신의 정보를 넘긴다.

성능 : 中

 

Casting과 비교했을 때 ABP와 Character를 분리할 수 있기 때문에 ABP의 크기를 크게 줄일 수 있다.

288.1MiB → 245.1 KiB 로 ABP의 크기가 감소한 모습

ABP에서 호출되는 Interface는 Casting과 마찬가지로 EventGraph에서 사용되고, EventGraph는 GameThread에서 실행되기 때문에 Worker Thread에서 병렬 처리가 불가능하다는 단점이 있다.

 

 


3. Property Access

방법

1. ABP에서 Blueprint Thread Safe Update Animations를 Override 해준다.

이 함수는 Work Thread에서 초당 6회 호출된다.

 

2. Property Access 노드를 추가한다.

 

3. Property Access 노드를 통해 다양한 정보를 가져올 수 있다.

Property Access는 Animation Blueprint 내에서 Game Thread에서만 접근 가능한 컴포넌트와 변수에 어디서든 접근할 수 있게 해주는 노드이다. Property Access를 통해 컴포넌트나 변수에 접근하면 해당 데이터의 스냅샷을 가져와 Anim Graph, Animation Node Function, Blueprint Thread Safe Function 또는 Event Graph에서 사용할 수 있다.

 

4. Property Access로 바로 값을 가져올 수 없는 경우 커스텀 Property Access를 추가할 수 있다.

예를 들어, 캐릭터의 CharacterMovement Component에서 MaxWalkSpeed를 가져오고 싶은데,

Property Access로는 그 부모 타입인 Movement Component로만 접근 가능하여 CharacterMovement Component의 MaxWalkSpeed를 가져올 수 없다면?

⇒ ABP에 커스텀 함수 GetCharacerMovement를 추가하여 Property Access 노드로 가져온 Movement Component를CharacterMovement Component로 캐스팅하여 Return 해주면 된다.

 

⚠️ 주의

커스텀 Property Access는 Pure 함수여야 하며, Output Value의 이름을 ReturnValue로 해야만 한다.
그렇지 않으면 Property Access Node에서 해당 함수를 인식할 수 없다!

또한 Property Access는 워커 스레드에서 안전하게 실행될 수 있도록 Thread Safe로 설정되어야 한다.

 

💡
커스텀 Property Access에서의 Casting은 Event Graph에서와 달리 ABP와 Characer BP간의 강한 결합이 발생하지 않는다.

why?
Property Access는 런타임에 AnimInstance → OwningActor → MovementComponent와 같은 경로를 따라 데이터의 스냅샷를 가져온다. 따라서, Animation Blueprint에서 Property Access를 통해 가져온 데이터는 복사본이며, 원본 객체에 대한 직접적인 참조를 생성하지 않는다.

 

이 작업 후 Property Access 노드에서 GetCharacterMovement 가 추가된 것을 확인할 수 있다.

 

GetCharacterMovement 에서 MaxWalkSpeed도 가져올 수 있다.

 

성능 : 上

Animation Blueprint의 Event Graph는 Game Thread에서 실행되며, Event Graph에 복잡한 로직이 많을 경우 성능 저하의 원인이 될 수 있다. Property Access를 활용하면 이러한 로직을 Thread Safe 함수로 이전하여 Worker Thread에서 병렬로 처리할 수 있어, 전체적인 Tick 시간을 단축시킬 수 있으므로 Animation의 성능 최적화에 큰 도움이 된다.

 


사용 예시

  • 특정한 상황에서 변경된 값에 따라 캐릭터 애니메이션이 바뀌어야 할 때, 캐릭터에서 값을 전달하기 좋은 Interface 사용
    ex) 플레이어의 Input으로 캐릭터의 무기가 바뀌어서 Idle 모션을 바꿀 때
  • 항상 변경되는 캐릭터의 값에 따라 애니메이션이 바뀌어야 할 때, 애니메이션에서 별도의 스레드로 항상 값을 감시하기 좋은 Property Access 사용
    ex) 캐릭터의 이동 속도에 따라 Idle 모션을 바꿀 때

Reference

https://dev.epicgames.com/documentation/en-us/unreal-engine/how-to-get-animation-variables-in-animation-blueprints-in-unreal-engine

https://dev.epicgames.com/documentation/en-us/unreal-engine/property-access-in-unreal-engine

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

 

 
저작자표시 비영리 변경금지 (새창열림)

'🖥️ Study Note > Unreal Engine' 카테고리의 다른 글

[Unreal] Game Ability System(GAS) - Ability System Componet(ASC)  (2) 2025.06.10
[Unreal] Game Ability System(GAS)  (0) 2025.06.10
[Unreal Engine] 모듈(Module)  (0) 2025.05.21
[Unrael Engine] IWYU 간단 정리  (0) 2025.05.21
'🖥️ Study Note/Unreal Engine' 카테고리의 다른 글
  • [Unreal] Game Ability System(GAS) - Ability System Componet(ASC)
  • [Unreal] Game Ability System(GAS)
  • [Unreal Engine] 모듈(Module)
  • [Unrael Engine] IWYU 간단 정리
Beankong_
Beankong_
주니어 클라이언트 프로그래머 공부 기록
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    오늘
    어제
    • 전체 글 (146)
      • ⛅ Daily (0)
      • 🖥️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • 오답노트 (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      propertyaccess
      cpp
      게임 프로그래밍
      최단 거리 알고리즘
      unrealengine build system
      UnrealEngine5
      프로그래머스
      게임프로그래밍
      그리디(greedy)
      unrealengine module
      그래프 순회
      프료그래머스
      헬테이커
      programmers
      코딩테스트
      게임 개발
      게임 모작
      알고리즘
      OnlineSubsystem
      UnrealEngine
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    Beankong_
    [Unreal Engine] Animation Blueprint에서 Owner 캐릭터의 정보를 가져오는 3가지 방법
    상단으로

    티스토리툴바