1. 오브젝트 관리
예를들어 FirstPlayer 프로젝트를 보면 총알을 발사할 때 월드에서 SpawnActor를 이용해 Actor를 상속받은 총알 클래스를 만들어 내는 식이였다.
그런데 만약 우리가 마법 투사체를 만든다면 플레이어도 이 투사체를 기억해야할 경우도 있다. 인벤토리를 만든 다음에 아이템을 줍는다면 인벤토리를 관리하는 컴포넌트를 넣은 다음에 그 인벤토리를 플레이어 캐릭터 안에다가 넣는게 일반적이다. 그리고 인벤토리 안에서는 습득한 아이템을 관리하고 있는 방식일 것이다. 혹은 그 인벤토리를 플레이어 캐릭터 안에다가 넣는 대신 인벤토리를 싱글톤으로 만들어서 접근하게 하는 것도 하나의 방법이다.
그래도 인벤토리 클래스 안에서 아이템 목록을 관리해야하는 것은 마찬가지이다.
일반적으로 C++에서 자주 사용하는 컨테이너로는 벡터, 맵, 해쉬맵(unordered_map) 등이 있다. 몬스터가 서버에서 만들어져서 죽고 살아나고 전체 수를 일정 유지하면서 사용하려면 필드에서건 관리하는 매니저에서건 들고있어야하는건 마찬가지다. 언리얼 엔진에서도 표준 C++문법에서 사용하는 위 컨테이너들을 사용하면 언리얼 엔진이 관리하는 메모리가 아니기 때문에 문제가 생기게 된다. 그래서 언리얼에서 자체적으로 제공하는 컨테이너 자료형을 사용해야한다. 그냥 STL 라이브러리를 사용한다면 스폰한 액터들을 map에 넣어주면 메모리 크래쉬가 일어나므로
호환 컨테이너
1-1. vector <-> TArray
TArray: 언리얼 엔진의 배열
docs.unrealengine.com
TArray<int32> arr;
arr.Add(1);
arr.Add(2);
arr.Add(3);
int32 size = arr.Num();
for(in32 i = 0; i<size; i++)
{
int32 temp = arr[i];
}
// arr.Empty()는 C++STL에서 Clear와 같은 기능이다.
for (TArray<int32>::TIteratot it = arr.CreateIterator(); it; it++)
{
int32 temp = *it;
}
for(int32 temp:arr)
{// range base for문
}
다만 Empty()메소드는 비어있는지 체크하는게 아니라 Clear()와 같은 기능을 한다.
1-2. unordered_map <-> TMap
C++ STL에서 사용하는 map(트리기반), unordered_map(해쉬맵). 해쉬맵이 좀 더 빠르기때문에 사용하는 경우가 많은데 언리얼에서는 TMap을 사용한다. 마찬가지로 키 밸류 형태이다.
TMap
TMap, 맵은 크게 키 유형과 값 유형, 두 가지로 정의되며, 맵에 하나의 짝으로 저장됩니다.
docs.unrealengine.com
TMap<Int32, FString> map;
// 해쉬맵이므로 정렬기능이 없다.
map.Add(3,TEXT("Cat"));
map.Add(5,TEXT("Apple"));
// 키가 없는데 접근을하려하면( null을 반환하는 ?)오류가 생기므로 Contains로 확인한다.
FString value = map[7]; //
bool bHas7 = map.Contains(7);
// 키가 있는지 확인하기 위해선 위처럼 Contains를 써도 되지만
// 아래처럼 Find나 FindOrAdd를 사용할 수 있다.
FString* Ptr7 = Map.Find(7); // 없으면 null포인터 반환.
FString& Ref7 = Map.FindOrAdd(7);
1-3. 기타 문자열
string <-> FString
스트링 처리
UE4 에서 사용가능한 스트링 클래스에 대한 개요와 FName, FText, FString 에 대한 참고 안내서입니다.
docs.unrealengine.com
거의 STL과 같은 형태로 되어있어서 간단히 사용할 수 있으나 문서를 간단히 보면 빠르고 효율적이고 안전하며 메모리 할당과 해제도 관리를 해준다'
'[Unreal]' 카테고리의 다른 글
[Unreal 4] 언리얼 엔진분석#2 (0) | 2023.08.08 |
---|---|
[Unreal 4] 엔진 분석 #1 (0) | 2023.08.04 |
[Unreal 4] 샘플 둘러보기#2 - 일인칭(First Player) (0) | 2023.07.21 |
[Unreal 4] 샘플 둘러보기 - 내려보기 샘플 (0) | 2023.07.17 |
[Unreal 4] 프로젝트 (0) | 2023.07.16 |