Game Develop

[UE5] BehaviorTree TaskNode의 InitializeFromAsset VS InitializeMemory 본문

UnrealEngine5/이것저것

[UE5] BehaviorTree TaskNode의 InitializeFromAsset VS InitializeMemory

MaxLevel 2024. 10. 5. 13:08

 

InitializeFromAsset 과 InitializeMemory

 

원리를 전부 파악한건 아니니, 거두절미하고 쓰겠다.

어차피 뭐 그냥 직접 태스크노드에서 위 두 함수 오버라이드해서 BP찍어보는게 확실하긴 하다.

 

 

InitializeFromAsset :

1. 행동트리파일을 오픈할 때 호출.

2. 이후 행동트리에서 이것저것 만진 후 Save할 때 또 호출.

3. 게임 시작시에 호출.

 

 

InitializeMemory :

=> BehaviorTreeComponent의 StartTree를 호출 할 때 호출된다.

     몽타주 Ended나 Started에 함수를 바인딩해야할 때, 즉 각 몬스터마다 한번씩만 호출해주면 될 때 InitializeMemory

     쓰면 적절하다. ExecuteTask처럼 매개변수에 OwnerComp랑 NodeMemory가 있기 때문에 가능.

 

 

 

 

참고로 노드를 몬스터마다 뭔가 다르게 동작시켜야 해야 할 경우, 즉 몬스터마다 노드의 멤버변수를 가져야 할 경우 InitializeMemory를 사용하면 노드자체를 인스턴스화 안시켜도 가능하다.

노드자체를 인스턴스화 시키는게 제일 간편하겠지만, 그만큼 메모리를 먹게 될 테니 잘 판단하는게 좋을 듯 하다.

 

매개변수보면 NodeMemory라고 있는데, 저걸 reinterpret_cast를 통해 개발자가 정의한 구조체로 형변환 시켜주면 된다.

다만, 해당 구조체의 멤버값은 단순한 데이터타입만 허용된다. 대표적으로 bool같은...

나같은 경우는 노말어택 몽타주재생이 끝나고나서 태스크노드에서 리턴을 하게하려고 몽타주의 Ended에다가 FinishLatentTask를 넣어놨다.