강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

hush park님의 프로필 이미지
hush park

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

12강 행동트리 모델의 구현

행동트리의 데코레이션 관련하여 질문이 있습니다.

작성

·

28

·

수정됨

0

강의를 들은 후에 임시로 하나의 Decorator 를 만들어서 기능을 테스트 중인데. 혹시 잠깐 봐주실 수 있을까요? (길어서 죄송합니다..ㅠ)

GOMCAM 20251127_1615500476.png

우선,

1) Set TargetActor 1, 2

2) TargetToNull

3) Print 1,2,3,4,5

노드 전부 무조건 Failed 를 반환하도록 구성하였습니다.

 

위 로직에서 질문점)

  • 우선 'Set TargetActor' 노드를 통해 데코레이터에 설정된 Blackboard Key 인 'TargetActor' 에 'Actor 1' 를 Set 한 후 'About Target' 데코레이터 로직으로 진입할 때, 'TargetActor' Is Set==True 이므로 진입에 성공한 후, 'Set TargetActor 2' 노드에서 TargetActor' 에 넣은 'Actor1' 을 'Actor2' 로 바꾸었을 때, Abort(Self) 는 작동하는가?

     

 

입니다.

Is Set 은 평가 결과가 True->False 일 때, 예를 들면 TargetActor(Actor1) -> TargetActor(Null) 로 변경되었을 때 Abort 를 발동시키는 것으로 알고 있었는데요, 근데 만약 TargetActor(Actor1) 처럼 유효한 값이 들어 있는 상태에서, 데코레이터의 하위 노드를 실행하는 과정에서 TargetActor(Actor2) 처럼 Null이 아닌 다른 유효한 값으로 변경할 때, 평가 결과는 결국 전후가 똑같이 Is Set ==True 일텐데 이것 또한 데코레이터의 Abort(Self) 를 트리거하는지 알고 싶습니다.

 

클로드와 Gpt, germini 는 전부 발동시키지 않는다고 설명하는데 아무리 봐도 미심쩍고 실제로 테스트해보면 Abort 가 발동하는 것 같아서 뭐가 맞는건지 혼동이 옵니다.

 

참고로 위 로직이 담긴 소스는

https://github.com/jaebyoungPark/ArenaBattle

입니다.

 

 


참고용) 다음 로직은 위와 비슷한 상황에서 Abort 가 실제로 발생하는 것으로 보이는 로직입니다.

GOMCAM 20251127_1736200340.png

(위 로직은 제가 맨 처음 올린 로직의 바로 옆에 구현하였으며, 첨부한 깃허브 소스에 존재합니다.)

 

  1. Set TargetActor 실행 으로 인해 TargetActor(Actor1) 설정

  2. Set TargetActor 2 실행으로 인해 TargetActor(Actor2) 설정

  3. 값은 변경되었으나, 평가 결과는 True->False 가 아니므로 Abort(Self) 는 실행하지 않고 Print3 를 출력하게 될 것으로 예상하였지만, 결과는

    즉시 중단하고 재평가(True) 후 Sequence로 가서 Print 2 실행.

  4. 그리하여 Print2 가 연속으로 2번 찍힘.

     

  5. 아무래도 Abort가 동작한 탓인 듯 한데. 평가 결과는 분명 True->True 인데 Abort가 발동한 이유를 모르겠습니다.

     

 

GOMCAM 20251127_1750080771.png

 

 

답변 3

1

이득우님의 프로필 이미지
이득우
지식공유자

안녕하세요 그냥 글로만 봤을 때 다음과 같이 진행되는 것으로 생각됩니다.

1. 처음 TargetActor는 문제 없이 실행됩니다. 다음으로 넘어갑니다.

2. 그 다음 SetTargetActor2이 실행됩니다. 이때 TargetActor의 값이 변경되어, 데코레이터의 재평가가 진행됩니다.

3. 데코레이터의 재평가로 인해 SetTargetActor2가 다시 실행됩니다. 이 때는 TargetActor의 값이 이전과 동일해 다음으로 넘어갑니다.

4. TargetToNull 노드가 실행됩니다.

제 생각으로는 값 변경으로 인한 데코레이터의 재평가로 해당 컴포짓 하위의 노드가 처음부터 다시 실행되는 것 같아보입니다.

잘 해결되었다니 다행입니다.

0

hush park님의 프로필 이미지
hush park
질문자

아무래도 해결된 것 같습니다. Abort 는 값이 변경되면 유효하든 유효하지 않든 변경 자체만으로 abort 를 실행 시킨다고 알게 되었습니다.

0

안녕하세요, 인프런 AI 인턴입니다. hush park님.

Behavior Tree의 데코레이터 관련 질문을 주셨군요. 데코레이터에서 ‘Abort(Self)’ 설정에 대한 궁금증을 토대로 안내드리겠습니다.

우선 ‘Abort(Self)’ 설정의 기본적인 작동 방식에 대해 설명드리면, 데코레이터는 특정 조건이 변화할 때 그 변화가 전이에 영향을 미치는 경우에 ‘Abort’를 트리거 하도록 설계되어 있습니다. 여기에서 ‘Is Set’ 체크는 Variable이 설정되었는지를 확인하는 것입니다.

질문에서 언급하신 대로 TargetActor 값이 Actor1에서 Actor2로 변경되었을 때, Is Set 체크는 여전히 True 상태로 유지됩니다. 그렇다면, 사실상 이번 변경은 ‘Is Set’ 상태에 직접적인 변경이 있는 것은 아닙니다. 일반적인 상황에서는 단순히 값이 변했을 뿐, 해당 키의 ‘설정 여부’에는 변화가 없기 때문에 ‘Abort’가 트리거되지 않아야 할 것처럼 보입니다.

하지만 실제로 테스트하셨을 때 Abort가 발동한다고 말씀하셨고, 이는 시스템 내부적으로 상태 변화로 인한 Blackboard Key의 업데이트가 이뤄지면서 ‘Abort’가 발생할 가능성을 시사합니다. 혹은 Key Query의 설정이나 내부 로직이 특정 변경 사항을 다르게 처리하고 있을 수도 있습니다.

이 경우, Behavior Tree의 작동 방식이나 블랙보드에서의 이벤트 핸들링이 코드에서 어떻게 구현되어 있는지를 세부적으로 분석하는 것이 좋습니다. 더불어 블랙보드 키에 델리게이트 이벤트가 연결되어 있는지, 수동으로_ABORT이 호출되는 부분이 있는지 확인도 필요할 것입니다.

관련 소스를 업로드하신 GitHub에서 직접 코드를 확인하며, 로그 메시지를 추가하여 어떤 조건에서 Abort가 발생하는지 분석해보는 것도 좋은 방법입니다.

추가적으로 비슷한 상황을 다룬 글을 참고하시길 추천드립니다:
- 비헤이비어 트리 데코레이터 설정에 따른 문제 해결

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

hush park님의 프로필 이미지
hush park

작성한 질문수

질문하기