Open Eu4ng opened 1 year ago
링크된 애님 레이어(셀프)로 설정되는 현상
링크된 애님 레이어 > 디테일 > 인스턴스 클래스
구현된 인터페이스, 상속된 인터페이스가 반대로 설정되어 보이는 UI 버그가 있음 레이어를 다른 것으로 변경했다가 복구하면 인스턴스 클래스 편집 가능 상태로 바뀜
UE5에서 새로 출시된 기능이라고 한다. 스켈레탈 메시 종류와 상관없이 공통으로 사용할 수 있도록 하는 것이 핵심인 것 같다.
- 링크된 애님 그래프로 호출 가능
- 자손 애님 블루프린트 생성 가능
Locomotion과 같은 움직임들에만 사용하는 변수들과 AimOffset과 같은 상체 움직임들에서만 사용하는 변수들이 나뉘어져 있다면 첫 번째 그림과 같이 각각의 애님 링크 레이어에서 변수 값을 계산하고 사용하면 되겠지만, 동일한 변수 값을 사용한다면 베이스 애니메이션 블루프린트에서 변수 값을 계산해주어야 할 것이다.
템플릿에서는 Velocity, GroundSpeed, ShouldMove, IsFalling 등 스켈레탈 메시와 관련없는 변수들이나 로직을 담당하고, 애니메이션 시퀀스, 블렌드 스페이스, 에임 오프셋과 같은 변수들은 링크된 애님 레이어에서 담당하는 것이 좋아보인다
데이터 애셋으로 LowerBodyLocomotion, WeaponUpperBody에 링크할 애님 블루프린트 클래스 설정하는 것도 좋을 것 같다. 데이터 애셋 자체 기능으로 서로 다른 스켈레탈 메시인 것을 검사한다던가
블루프린트의 출력 노드를 C++에서 구현하면 void Test(int32& num) 이런 형태이다. 그런데 int32 Test() 형태의 경우에는 블루프린트의 출력 노드에서 출력 변수명을 설정할 수 없고 ReturnValue로 고정되어 있는데 이와 관련된 문제인 것 같다.
입력 포즈를 받는 레이어에서는 변수를 받아 사용하고, 입력 포즈가 없는 레이어에서는 프로퍼티 액세스로 하면 된다.
예시로 Locomotion은 입력 동작이 없으므로 프로퍼티 액세스를 통해 부모 애님 블프의 변수 값을 바인딩하고, AimOffset은 Locomotion의 동작을 입력으로 받기 때문에 프로퍼티 액세스가 아니라 인터페이스의 변수를 통해 값을 전달받는다.
이유는 모르겠지만 라이라 프로젝트에서 그렇게 사용중이며, AimOffset에서 프로퍼티 액세스를 하면 링크된 시점의 틱에서 None에 접근한다는 에러가 발생한다.
인터페이스 함수 내부에서의 처리는 c++의 상속 개념이라기 보다는 메시지 함수와 비슷하다고 한다. 그래서, 어떤 클래스에 대해서도 호출이 가능하다. 해당 클래스에 인터페이스 함수가 구현되어 있으면 처리를 하지만, 구현되어 있지 않으면 조용히 실패를 한다고 한다. 즉, c++ 처럼 컴파일 에러가 발생하지 않기 때문에 주의가 필요하다.
초기화가 안 된 상태에서 AimOffset이 Base에 접근 못하는 것도 맞지만, Base 역시 아직 AimOffset을 Owning 하지 못해서 인터페이스단에서 그냥 무시된 느낌
링크된 애님 그래프 / 레이어
링크된 애님 그래프
Blueprint Thread Safe Update Animation
링크된 애님 그래프 사용시 유의할 점
참고 링크