StateTree FStateTreeExecutionContext::TriggerTransitions 크래시 관련 문의

개발작업중 문제되는 상황 파악되어 샘플 프로젝트로 동일하게 세팅하여 공유드립니다.

BP_NPC1 은 AIController1을 사용중이고 해당 컨트롤러는 ST_Test1로 BrainComponent가 동작되게끔 설정되어 있습니다.

ST_Test1은 ST_Test2가 LinkedAsset으로 연결되어있고 ST_Test2는 ST_Test3에 연결되어 있습니다.

ST_Test1은 최초 1회 처리를 피하기위해 별도의 컨디션이 들어가있는 상태입니다.

<br/>

확인된 문제 상황은

  • 3중이상 LinkedAsset으로 돌아갈 때 가장 Depth 가 깊은 StateTree에서 Task완료의 처리를 트리 성공 혹은 실패로 설정한 경우
  • 다음 Transition될 State를 계산해 해당 State를 OnEnter 처리하는데 이 때 EStateTreeRunStatus::Succeeded 를 리턴하게 되면
  • TriggerTransitionsFromFrameIndex 에 잔여 값이 남게되어
  • 다음 TriggerTransitions중 const int32 EndFrameIndex = TriggerTransitionsFromFrameIndex.Get(Exec.ActiveFrames.Num() - 1); 로직에서 1값을 반환해 ActiveFrames에 현재 크기에 맞지않는 배열 접근이 발생합니다.

<br/>

그래서 임시적으로 트리 성공/실패를 빼거나 상위 Tree의 State에서 Transition을 걸어 TriggerTransitionsFromFrameIndex 이 재조정될 수 있게 하고 있습니다.

관련하여 Epic issue Ticker이나 EPS 관련 게시물이 확인되지않아 관련 내용 해결이 가능할지 검토 부탁드리겠습니다.

[Attachment Removed]

재현 방법
첨부한 프로젝트 압축을 풀고 플레이 혹은 시뮬레이션 하시면 크래시 발생합니다.

[Attachment Removed]

안녕하세요.

질문 상황에 대한 이슈가 첨부해주신 프로젝트에서 나타나는 것을 확인하였습니다. 해당 이슈 관련 수정사항이 엔진 메인 브랜치에 적용된 것으로 확인되었으며 관련 링크를 첨부드립니다.

CL 51685439

https://github.com/EpicGames/UnrealEngine/commit/e0358c2953057db9dff046b92525389e9dde1c5b

해당 수정사항 적용 시 질문 상황에 대한 이슈가 해결되는 것을 확인하였으며 현재 사용하시던 임시방안을 유지하시면서 5.8 버전을 기다리시거나 위 수정사항을 적용하여 문제를 해결하실 수 있습니다. 수정사항 적용 시 현재 이슈와 관련 없는 부분을 제거하거나 아래 수정사항을 참고하여 추가 작업을 수행해야 할 필요가 있습니다.

CL 49687363

https://github.com/EpicGames/UnrealEngine/commit/d2feb4638393686161eb3b6259b31d41423bfd35

CL 51655666

https://github.com/EpicGames/UnrealEngine/commit/692dc20ce2fef128c0820339eb108da3123afa62

감사합니다.

[Attachment Removed]

전달해주신 내용 적용시 문제 없는 점 확인하였습니다.

확인해주셔서 감사합니다.

[Attachment Removed]