Post

[UE5] Animation Blueprint의 Thread-UnSafe Warning 해결하기

Animation Blueprint를 사용하면서, 다른 블루프린트의 변수에 접근할 때 이런 오류가 뜬적이 있을 것이다.

1
2
Node  Blendspace Player 'BS_Sword_Character_Move'  uses potentially thread-unsafe call  Get Player Controller . 
Disable threaded update or use a thread-safe call. Function may need BlueprintThreadSafe metadata adding. 

위의 오류는 BS_Sword_Character_Move인 블렌드 스페이스는 잠재적으로 스레드에 안전하지 않은 호출인 Get Player Controller를 사용하고 있음으로, 스레드에 안전한 호출을 사용하라는 뜻이다.
그렇다면 이런 오류는 왜 뜨는 것일까?

여러분이 Animation Blueprint를 사용해 보았다면, Animation Blueprint는 다른 Blueprint가 통상적으로 가지고 있는, Event Graph뿐만이 아니라 Anim Graph또한 가지고 있는 것을 알것이다.
바로 여기서 문제가 생기는데, 기본적으로 AnimGraph는 EventGraph와 별도의 CPU로직에서 실행된다. Animation Blueprint와 다른 모든 Blueprint가 실행되는 CPU 스레드를 Game Thread라고 하고, 이와 별도로 실행되는 Anim Graph가 실행되는 쓰레드를 Worker Thread라고 한다. 요는 결국 두 Graph는 다른 스레드에서 실행되기 때문에, 다른 스레드에서 실행된 Get Player Controll를 사용해서 변수를 가져오려고 하고 있기때문에, Thread-Unsafe Warning이 발생하는 것이다.

그렇다면 이걸 어떻게 해결해야 할까?
바로 Property Access Node를 사용해서 해결할 수 있다.
밑의 이미지를 보자
Img-01
이렇게 Property Access Node를 만들려면 Anim Graph에서 마우스 오른쪽 버튼을 클릭하고 Variables에서 Property Access를 선택하면 된다.

추가한 후에는 노드에서 드롭다운 메뉴를 열고 원하는 Get 함수를 클릭하면 된다. 단일 Get에서 타고 타고 넘어가서 정말로 원하는 구체적인 Property를 찾을 수도 있다.
Img-02
이렇게 바인딩한 Property Access Node를 가지고 그래프에 변수를 제공할 수 있다.
Img-03

This post is licensed under CC BY 4.0 by the author.