안녕하세요. LinkedStateTreeOverride Parameter 관련 문의 사항이 있습니다.
“StateTree A” 에서 스테이트 타입을 LinkedAsset으로 지정한 후 “StateTree B” 와 태그를 지정하였고 StateTreeComponent에서AddLinkedStateTreeOverrides 를 통해 같은 태그명으로 “StateTree C” 를 지정하였습니다.
“StateTree A” 에서 "StateTree C"가 실행되는 것을 확인하였습니다.
궁금한 문의사항은 Default로 지정된 StateTree B는 Parameter에 Binding을 이용해서 Task나 Parameter의 값을 가변적으로 전달할 수 있는데 LinkedStateTreeOverride의 경우 파라미터를 가변적으로 전달할 수 있는 방법이 보이지 않습니다.
혹시 별도의 솔루션이 존재할지, 없다면 계획이 있을지 궁금합니다.
※ 현재 5.6을 사용하고 있지만 AIController 사용을 위해 StateTreeComponent 코드 중 5.7 내용도 일부 적용하였습니다.
[Attachment Removed]
재현 방법[Attachment Removed]
안녕하세요.
Linked Asset Type을 통해 특정 StateTree를 오버라이드하는 경우,Parameter를 Binding처럼 가변적으로 전달하는 공식 API는 현재 별도로 제공되지 않습니다**.**
다만, 엔진에 이미 구현되어 있는 FStateTreeReference 및 FInstancedPropertyBag 관련 API를 활용하사면, 오버라이드 대상 StateTree의 파라미터 값을 런타임에서 동적으로 주입하는 형태로 구현하실 수 있습니다
아래는 StateTree A에서 특정 태그의 Linked Asset을 StateTree C로 오버라이드할 때, StateTree C에 정의된 String 타입 파라미터 Name에 값을 동적으로 전달하는 예시입니다.
[Image Removed]
FStateTreeReference OverrideStateTreeReference;
OverrideStateTreeReference.SetStateTree(OverrideStateTree);
FInstancedPropertyBag& Parameters = OverrideStateTreeReference.GetMutableParameters();
const FName PropertyName("Name");
Parameters.SetValueString(PropertyName, "Override Success");
OverrideStateTreeReference.SetPropertyOverridden(Parameters.FindPropertyDescByName(PropertyName)->ID, true);
StateTreeComponent->AddLinkedStateTreeOverrides(OverrideTag, OverrideStateTreeReference);
또한 UE 5.6 버전에는 AddLinkedStateTreeOverrides / SetLinkedStateTreeOverrides 등 LinkedStateTreeOverride 관련 함수들의 스키마 검증 로직에 오류가 있어, 정상 동작하지 않는 이슈가 존재합니다.
해당 이슈는 UE 5.7에서 수정되었으며, 아직 패치를 적용하지 않으셨다면 아래 CL을 적용하시는 것을 권장드립니다.
https://github.com/EpicGames/UnrealEngine/commit/f602e71240d38286955b13232cdbb436f3186ada
추가적으로, 에픽게임즈는 12월 23일부터 1월 6일까지 겨울 휴가 기간으로, 해당 기간 동안 기술 지원이 제한될 수 있으니 이 점 양해 부탁드립니다.
감사합니다.
[Attachment Removed]
소중한 답변 감사드립니다. 찬호님
의견 주신것 처럼 5.6 버전에는 스키마 검증 로직에 오류가 있어 관련된 내용들만 5.7내용을 적용하였습니다.
[Attachment Removed]