

Completed : 성공하든 실패하든 끝나면 Transition Trigger
Succeeded : 성공했을 때 전환 Trigger
Tick : 틱마다 Trigger 가능. 그래서 보통 Condition과 같이 사용
Event : 외부에서 발생한 Event가 Trigger (예: 총 맞았을 때 바로 전투모드로 전환)
AI 블루프린트에서 Send State Tree Event 노드로 이벤트 호출 가능
전환은 여러개 만들 수 있음. 위에서 아래로 확인함. 아래 사진은 State가 성공했을 때, 50프로 확률로 Wait로 이동하고, 실패하면 Find로 이동

아래 사진은 위의 transition이 아직 기다려야 하지만, 아래 transition이 우선권이 높아서 둘이 충돌할 때, 우선권 높은 애가 결정권을 가짐

group에서도 transition 가능. 해당 전환을 모든 자식노드가 가진 것처럼 됨


해당 태그를 가진 이벤트를 외부에서 받았을 때 전환 이루어짐
Priority가 높아야 다른 전환들보다 우선시하여 전환해줌
Send State Tree Event 노드를 이용해 외부에서 State Tree로 이벤트 전달
Event 인자를 Promote To Variable하기![]() | 컴파일 후 해당 Event에 태그 달아주기![]() |
|---|

Required~ : 진입 조건에 이벤트가 필요
해당 Tag가 있는 이벤트여야 가능
Check~ : 자식 노드로 바로 전환되려 할 때 부모 state의 조건도 확인하게 함
State Tree는 하나의 브랜치가 활성화되며 실행되는 것
즉, 어떤 노드가 활성화되면 그 노드로부터 Root까지의 모든 노드가 활성화되며 하나의 브랜치가 활성화되었다고 봄
그리고 이 브랜치의 모든 노드가 동시에 각각 task를 실행
다른 State로 전환이 일어나면 바로 활성 브랜치도 바뀜
브랜치 바뀌면서 제외된 State들은 다 바로 Exit되며 Task도 종료됨
바뀌었는데 여전히 활성 브랜치에 존재하는 State들은 그대로 Task 마저 실행
tools-rewind debugger 누르고 녹화버튼으로 디버깅 가능
브랜치의 전환이 일어나야 디버깅 잘 되므로 노드 여러개 놓아야 함
State Tree 역시 서버에서만 동작하고, 클라에서는 동작하면 안 됨
서버에서 State Tree로 AI 움직이면 클라는 결과를 받기만 해야함
그래서 아래처럼 서버일때만 Start해주고, 클라일 때는 Stop 해주기

이러면 디버깅할 때, 클라에서는 제대로 디버깅이 불가능해짐.
따라서, StandAlone이나 Listen Server로 게임 실행해 디버깅 하기
FStateTreeTaskBase를 상속받아 C++로 구현 가능 (에디터에 없어, 직접 구현해야함)#pragma once
#include "CoreMinimal.h"
#include "StateTreeTaskBase.h"
#include "CustomTask.generated.h"
USTRUCT(BlueprintType)
struct TARCOPY_API FCustomTask : public FStateTreeTaskBase
{
GENERATED_BODY()
};
StateTreeModule 추가해야함PublicDependencyModuleNames.AddRange(new string[] { "StateTreeModule" });
그러나 블루프린트로 State Tree를 만들었다면, 해당 Task는 인식 안 됨
State Tree의 장점이 UI로 쉽게 할 수 있는 것이므로 UStateTreeTaskBlueprintBase를 상속받아 하면 State Tree에서 인식 가능해짐
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/StateTreeTaskBlueprintBase.h"
#include "CustomTask.generated.h"
UCLASS(BlueprintType)
class TARCOPY_API UCustomTask : public UStateTreeTaskBlueprintBase
{
GENERATED_BODY()
};