๋ชฉ๋ก์ ์ฒด ๊ธ (1096)
KoreanFoodie's Study
๋ชจ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ํต์ฌ ๋ด์ฉ์ ๊ฐ์ถ๋ฆฌ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ชจ๋์ ์ฝ๋์ ์น์ด๋จน๋ C++ ๊ฐ์ข๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์! std::string std::string ์ด๋ ๋ฌด์์ผ๊น? ์ฌ์ค std::string ์ basic_string์ด๋ผ๋ ํด๋์ค ํ ํ๋ฆฟ์ ์ธ์คํด์คํ ๋ฒ์ ์ด๋ค. basic_string definition ์ ๋ค์๊ณผ ๊ฐ๋ค : template class basic_string; Traits ๋ ์ฃผ์ด์ง CharT ๋ฌธ์๋ค์ ๋ํด ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ๋ค์ ์ ์ํด ๋์ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์, Traits๋ฅผ ๋ฐ๊พธ๋ฉด ์ ๋ ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์กฐ์์ ํ ์ ์๋ค! ๋ค์ ๋งํด, basic_string ์ ์ ์๋ ๋ฌธ์์ด ์ฐ์ฐ๋ค์ ์ฌ์ค ์ ๋ถ Traits ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ๋ค์ ๊ฐ์ง๊ณ ..
๋ชจ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ํต์ฌ ๋ด์ฉ์ ๊ฐ์ถ๋ฆฌ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ชจ๋์ ์ฝ๋์ ์น์ด๋จน๋ C++ ๊ฐ์ข๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์! STL algorithm STL algorithm ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ STL ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ํ์ํ ํธ๋ฆฌํ ๋ฉ์๋๋ค์ ์ ๊ณตํ๊ณ ์๋ค. STL ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ํจ์๋ค์ ๋์ฒด๋ก ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ํํ๋ฅผ ๋๊ณ ์๋ค. template void do_something(Iter begin, Iter end); template void do_something(Iter begin, Iter end, Pred pred); ๋ ๋ฒ์งธ์ Pred ๋ ์ผ๋ฐ์ ์ผ๋ก bool ์ ๋ฆฌํดํ๋ ํจ์ ๊ฐ์ฒด(Funtor) ๊ฐ ์ ๋ฌ๋๋ค. ์ ๋ ฌ (sort, stable_sort, partial_sort ์ ๋ ฌ์ ..
TArray TArray ๋ std::vector ์ ๋น์ทํ๊ฒ ๋์ํ์ง๋ง, AddUnique, RemoveAtSwap ๋ฑ์ ๋ถ๊ฐ์ ์ธ API ๋ฅผ ์ ๊ณตํ๋ค. TArray ๋ ๋น ๋ฅด๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์์ ํ๋ค! TArray ActorArray = GetActorArrayFromSomewhere(); // Tells how many elements (AActors) are currently stored in ActorArray. int32 ArraySize = ActorArray.Num(); // TArrays are 0-based (the first element will be at index 0) int32 Index = 0; // Attempts to retrieve an element at..
์ธ๋ฆฌ์ผ ๊ฒ์ํ๋ ์ด์ 4๋ main class type ์ธ๋ฆฌ์ผ์๋ ๊ฒ์ํ๋ ์ด์ ์ฌ์ฉ๋๋ 4๋ main class type ์ด ์๋ค. ๋ฐ๋ก UObject, AActor, AActorComponent, UStruct ์ด๋ค. ์ด ์ธ์๋ ์ฌ์ฉ์ ์ ์ ํ์ ์ ์ฌ์ฉํ ์๋ ์์ง๋ง, ๊ทธ๋ฐ ํ์ ๋ค์ ์์ง์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง๋ ์๋๋ค. ํ๋์ฉ ๊ทธ ์ญํ ๊ณผ ๋ฒ์๋ฅผ ์์๋ณด์. Unreal Objects (UObject) UObject ๋ ์ธ๋ฆฌ์ผ ์์ง์ building block ์ผ๋ก์จ, UClass ์ ํจ๊ป ๋ค์๊ณผ ๊ฐ์ ์๋น์ค๋ค์ ์ ๊ณตํ๋ค : Reflection of properties and methods Serialization of properties Garbage Collection Finding a UObject ..
์ ๋๋ฉ์ด์ ๋ ์ด์ด ์ธ๋ฆฌ์ผ์์๋ ์ ๋๋ฉ์ด์ ๊ฐ์ ์์ฐ์ค๋ฌ์ด ์ ํ์ ์ํด ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ UpperBody ๋ง ์ด์ ๋๋ ๋ชจ์ ์ ์ฌ์ํ๊ณ ์ถ๋ค๊ณ ํ์. ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ด์ฉํด ํน์ ๋ถ์๋ง ๋์์ ๋ฐ๊พธ๋ ๋ฑ์ ๊ธฐ๋ฅ๋ ๊ตฌํํ ์ ์์๊น? ์ธ๋ฆฌ์ผ์์๋ ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ฅผ ํ์ฉํด ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. 1. ๋จผ์ ๋ธ๋ ๋ํ ์ ๋๋ฉ์ด์ ์ ์ ํํ๋ค. 2. ๊ฒ์ ๋ชจ๋์ Default Pawn Class ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๊น๋ ์ค์ผ๋ ํค์ผ๋ก ๋ฐ๊ฟ์ค๋ค. 3. ์ ๋ ๋ชฝํ์ฃผ๋ฅผ ์์ฑํ๋ค. 4. ์ ๋ ๋ชฝํ์ฃผ์์ ๋๋ณด๊ธฐ ํด๋ฆญ ํ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฌ๋กฏ์ผ๋ก ์ง์ ํ๋ค. 5. ์ฌ๋กฏ์ด ์์ ๊ฒฝ์ฐ ์๋ก ์์ฑํ๋ค. 6. ์ํ๋ ์ฌ๋กฏ์ ์ง์ ํ๋ค. 7. ์ ๋ ๊ทธ๋ํ๋ก ์ด๋ํ๋ค. 8...
๋ธ๋ ๋ ์คํ์ด์ค ๋ง์ฝ ์๋์ ๋ฐ๋ผ ๊ฑท๋ ์ ๋๋ฉ์ด์ ๊ณผ ๋ฐ๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋จ์ํ ์๋๊ฐ ๋ฎ์ ๋๋ ๊ฑท๋ ์ ๋๋ฉ์ด์ ์, ๋์ ๋๋ ๋ฐ๋ ์ ๋๋ฉ์ด์ ์ ์ฐ๊ฒฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ง๋ง, ์๋๊ฐ float ๊ฐ์ผ๋ก ์ฐ์์ ์ผ ๋๋ ์๋๊ฐ ๋ฐ๋๋ ์์ ์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ์ด ๊ธ์๋๋ก ๋ณํ๋ ๊ฒ์ด ๋ถ์์ฐ์ค๋ฌ์ ๋ณด์ผ ๊ฒ์ด๋ค. ์ ๋๋ฉ์ด์ ๋์์์์ ์์ฐ์ค๋ฌ์์ ๋ณด์ฅํ๋ฉด์, ํ๋ก๊ทธ๋๋จธ๊ฐ ํน์ ๋ณ์์ ๋ง๊ฒ ์ ๋๋ฉ์ด์ ์ ์ค์ ํ๋ ์ผ ๋ฐ์์ ํ๋์ฝ๋ฉ์ ์ค์ด๊ธฐ ์ํด, ์ธ๋ฆฌ์ผ์์๋ ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ๋ธ๋ ๋ ์คํ์ด์ค๋, ๋ง ๊ทธ๋๋ก ์ ๋๋ฉ์ด์ ๋ค์ ์ฃผ์ด์ง input ๊ฐ์ ๋ง๊ฒ ํธ์ถํ๋๋ก ์์ด(๋ธ๋ ๋) ๋ง๋ ๊ณต๊ฐ(์คํ์ด์ค) ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์์ ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ๋ง๋ค๋ฉด, ์ผ์ชฝ์์ ์ถ์ ์ต๋/์ต์๊ฐ์ ๊ฒฐ์ ํ..
์ ์ ๋ ์ง์คํธ๋ฆฌ ์ ์ ๋ ์ง์คํธ๋ฆฌ๋ ์๋ํฐ๊ฐ ๋ก๋๋ ๋ ๋ก๋ฉ๋์ง ์์ ์ ์ ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์งํ๋ ์๋ธ์์คํ ์ด๋ค. ํ์ผ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋ ๊ฒ์ ์๋์ผ๋ก ์ถ์ ํ๋๋ฐ, ์ฝํ ์ธ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ๋ ์ง์คํธ๋ฆฌ์ ์ฃผ ๊ณ ๊ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. Obtaining a List of Assets ์ฝ๋์์ผ๋ก ์ ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํตํด ์ํ๋ ํ์ ์ ์ ์ ์ ๋ถ๋ฌ์ฌ ์ ์๋ค. FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); TArray AssetData; const UClass* Class = UStaticMesh::StaticClass(); AssetRegistryModule.Get().GetA..
Hard Reference vs Soft Reference A ๊ฐ B ๋ฅผ ํ๋ ์ฐธ์กฐ(Hard Reference) ํ๊ณ ์๋ค๊ณ ํ๋ฉด, A ๊ฐ ๋ก๋ฉ๋ ๋ B ๋ ๋ก๋ฉ๋๋ค. ๋ฐ๋ฉด A ๊ฐ B ๋ฅผ ์ฝํ๊ฒ ์ฐธ์กฐ(Soft Reference) ํ๋ค๋ฉด, B ์ ์ ์ ๊ฒฝ๋ก ๋ฑ์ string ์ ํํ๋ก ๊ฐ๊ณ ์๋ค๋ ๋ป์ด๋ค. ๋จผ์ ํ๋ ์ฐธ์กฐ๋ถํฐ ์ดํด๋ณด๋๋ก ํ์. Direct Property Reference (Hard Reference) UPROPERTY ๋ฅผ ๋ถ์ฌ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด, ํด๋น ๋ณ์(ํน์ ๋ธ๋ฃจํ๋ฆฐํธ)๊ฐ ๋ก๋๋ ๋ ์ด์ ๋์ํ๋ ์ ์ ๋ํ ๋ก๋ฉ๋๋ค. ์์ ์ฝ๋๋ฅผ ๋ณด์. /** construction start sound stinger */ UPROPERTY(EditDefaultsOnly, Category=Building)..
์ฝ์ด ๋ฆฌ๋ค์ด๋ ํธ๋? ํ๋ก์ ํธ๋ฅผ ๋ฉ์ง๊ฒ ์์ฑํ๋๋ฐ, ๋ง์ฝ ๋ณ์ ๋ช ์ด๋ ์ ์ ๋ช ์ ๋ฐ๊ฟ์ผ ํ๋ค๋ฉด ์ด๋จ๊น? ํด๋น ๋ณ์๋ ์ ์ ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ ๋ถ ํค์ง์ด ๋๋ ๊ฒ์ ์๋นํ ๋ญ๋น๋ฅผ ์๋ฐํ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด, ์ธ๋ฆฌ์ผ์์๋ "๊ธฐ์กด ์ด๋ฆ -> ์๋ก์ด ์ด๋ฆ" ์ ํ๋ฒ์ ๋ฐ๊ฟ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก '์ฝ์ด ๋ฆฌ๋ค์ด๋ ํธ' ์ด๋ค. ์ฝ์ด ๋ฆฌ๋ค์ด๋ ํธ๋ DefaultEngine.ini ํ์ผ์ด๋, Default.ini ํ์ผ ๋ฑ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์์๋ฅผ ๋ณด์. [CoreRedirects] +ClassRedirects=(OldName="Pawn",NewName="MyPawn",InstanceOnly=true) +ClassRedirects=(OldName="/Script/MyModule.MyOldClass",NewN..
FSoftObjectPath ์ TSoftObjectPtr ์ฌ์ฉํ ๋๋ง๋ค ๋ก๋ํ๋ ๊ฒ์ด ์๋๋ผ, ์ ์ ์ ์ ๋ถ ๋ก๋ฉํ์ง ์์ผ๋ฉด์ ๋ก๋ฉํ๊ณ ์ถ์ ์ ์ ์ ๋ฏธ๋ฆฌ ์ค๋น์์ผ ๋๊ณ ์ถ๋ค๋ฉด ์ด๋จ๊น? ๊ทธ๋ด ๊ฒฝ์ฐ, FSoftObjectPath ์ TSofrObjectPtr ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค. FSoftObjectPath ๋ ์ค์ ๋ก ์ ์ ์ ๊ฒฝ๋ก๋ฅผ FName ์ผ๋ก ์ ์ฅํ๊ณ ์๋ ๊ตฌ์กฐ์ฒด์ด๋ฉฐ, TSoftObjectPtr ๋ FSoftObjectPath ๋ฅผ wrapping ํ TWeakObjectPtr ์ด๋ค. TSoftObjectPtr.Get( ) ์ผ๋ก ์ฐธ์กฐ๋ ์ ์ ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ, FSoftObjectPath ๋ก ์ ์ ์ ๋ก๋ฉํ ์ ์๋ค. The Asset Registry and Object Libraries ์ ์ ๋ ์ง์คํธ๋ฆฌ๋..