일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- UnrealEngine5
- directx
- RootMotion
- C
- UE5
- baekjoon
- RVO
- 1563
- DirectX11
- C++
- 줄 세우기
- 티스토리챌린지
- 언리얼엔진5
- Frustum
- TObjectPtr
- Unreal Engine5
- Programmers
- UnrealEngine4
- GeeksForGeeks
- 프로그래머스
- 2294
- 팰린드롬 만들기
- const
- 오블완
- softeer
- winapi
- NRVO
- 백준
- IFileDialog
- algorithm
- Today
- Total
Game Develop
[UE5] BehaviorTree TaskNode의 InitializeFromAsset VS InitializeMemory 본문
[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를 넣어놨다.
'UnrealEngine5 > 이것저것' 카테고리의 다른 글
[UE5] 월드방향벡터를 캐릭터의 로컬방향벡터로 변환시키고 어떤 방향인지 알아내기 (0) | 2024.11.08 |
---|---|
[UE5] 행동트리가 블랙보드값 변경을 즉각 반응 못할 경우. (0) | 2024.10.22 |
[UE5] 몬스터를 공중에 띄우고 싶을 때. (1) | 2024.10.01 |
[UE5] Motion Warping (0) | 2024.08.16 |
[UE5] NotifyState에서 GetWorld()는 nullptr만 반환한다. (0) | 2024.07.31 |