๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cEaRDl/btryygjiLKE/9E43GH3etjU95naJzyTT30/img.png)
์ ๋๋ฉ์ด์ ๋ ์ด์ด ์ธ๋ฆฌ์ผ์์๋ ์ ๋๋ฉ์ด์ ๊ฐ์ ์์ฐ์ค๋ฌ์ด ์ ํ์ ์ํด ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ UpperBody ๋ง ์ด์ ๋๋ ๋ชจ์ ์ ์ฌ์ํ๊ณ ์ถ๋ค๊ณ ํ์. ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ด์ฉํด ํน์ ๋ถ์๋ง ๋์์ ๋ฐ๊พธ๋ ๋ฑ์ ๊ธฐ๋ฅ๋ ๊ตฌํํ ์ ์์๊น? ์ธ๋ฆฌ์ผ์์๋ ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ฅผ ํ์ฉํด ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. 1. ๋จผ์ ๋ธ๋ ๋ํ ์ ๋๋ฉ์ด์ ์ ์ ํํ๋ค. 2. ๊ฒ์ ๋ชจ๋์ Default Pawn Class ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๊น๋ ์ค์ผ๋ ํค์ผ๋ก ๋ฐ๊ฟ์ค๋ค. 3. ์ ๋ ๋ชฝํ์ฃผ๋ฅผ ์์ฑํ๋ค. 4. ์ ๋ ๋ชฝํ์ฃผ์์ ๋๋ณด๊ธฐ ํด๋ฆญ ํ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฌ๋กฏ์ผ๋ก ์ง์ ํ๋ค. 5. ์ฌ๋กฏ์ด ์์ ๊ฒฝ์ฐ ์๋ก ์์ฑํ๋ค. 6. ์ํ๋ ์ฌ๋กฏ์ ์ง์ ํ๋ค. 7. ์ ๋ ๊ทธ๋ํ๋ก ์ด๋ํ๋ค. 8...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mqs7p/btryyeFokOf/Ot5zVy3bnOrKl4oQ4Rty30/img.png)
๋ธ๋ ๋ ์คํ์ด์ค ๋ง์ฝ ์๋์ ๋ฐ๋ผ ๊ฑท๋ ์ ๋๋ฉ์ด์ ๊ณผ ๋ฐ๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋จ์ํ ์๋๊ฐ ๋ฎ์ ๋๋ ๊ฑท๋ ์ ๋๋ฉ์ด์ ์, ๋์ ๋๋ ๋ฐ๋ ์ ๋๋ฉ์ด์ ์ ์ฐ๊ฒฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ง๋ง, ์๋๊ฐ float ๊ฐ์ผ๋ก ์ฐ์์ ์ผ ๋๋ ์๋๊ฐ ๋ฐ๋๋ ์์ ์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ์ด ๊ธ์๋๋ก ๋ณํ๋ ๊ฒ์ด ๋ถ์์ฐ์ค๋ฌ์ ๋ณด์ผ ๊ฒ์ด๋ค. ์ ๋๋ฉ์ด์ ๋์์์์ ์์ฐ์ค๋ฌ์์ ๋ณด์ฅํ๋ฉด์, ํ๋ก๊ทธ๋๋จธ๊ฐ ํน์ ๋ณ์์ ๋ง๊ฒ ์ ๋๋ฉ์ด์ ์ ์ค์ ํ๋ ์ผ ๋ฐ์์ ํ๋์ฝ๋ฉ์ ์ค์ด๊ธฐ ์ํด, ์ธ๋ฆฌ์ผ์์๋ ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ๋ธ๋ ๋ ์คํ์ด์ค๋, ๋ง ๊ทธ๋๋ก ์ ๋๋ฉ์ด์ ๋ค์ ์ฃผ์ด์ง input ๊ฐ์ ๋ง๊ฒ ํธ์ถํ๋๋ก ์์ด(๋ธ๋ ๋) ๋ง๋ ๊ณต๊ฐ(์คํ์ด์ค) ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์์ ๋ธ๋ ๋ ์คํ์ด์ค๋ฅผ ๋ง๋ค๋ฉด, ์ผ์ชฝ์์ ์ถ์ ์ต๋/์ต์๊ฐ์ ๊ฒฐ์ ํ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cBemlz/btryn70vLeH/LwuXgp4cebidlgFKtSFYv1/img.png)
์ ์ ๋ ์ง์คํธ๋ฆฌ ์ ์ ๋ ์ง์คํธ๋ฆฌ๋ ์๋ํฐ๊ฐ ๋ก๋๋ ๋ ๋ก๋ฉ๋์ง ์์ ์ ์ ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์งํ๋ ์๋ธ์์คํ ์ด๋ค. ํ์ผ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋ ๊ฒ์ ์๋์ผ๋ก ์ถ์ ํ๋๋ฐ, ์ฝํ ์ธ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ๋ ์ง์คํธ๋ฆฌ์ ์ฃผ ๊ณ ๊ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. Obtaining a List of Assets ์ฝ๋์์ผ๋ก ์ ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํตํด ์ํ๋ ํ์ ์ ์ ์ ์ ๋ถ๋ฌ์ฌ ์ ์๋ค. FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); TArray AssetData; const UClass* Class = UStaticMesh::StaticClass(); AssetRegistryModule.Get().GetA..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oXPeG/btrykzKhaYP/phfybGHQ9Jr77kaFkknuJK/img.png)
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)..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmFGcZ/btryevHLq8H/925ABoIbqqHti6nCjvZusK/img.png)
์ฝ์ด ๋ฆฌ๋ค์ด๋ ํธ๋? ํ๋ก์ ํธ๋ฅผ ๋ฉ์ง๊ฒ ์์ฑํ๋๋ฐ, ๋ง์ฝ ๋ณ์ ๋ช ์ด๋ ์ ์ ๋ช ์ ๋ฐ๊ฟ์ผ ํ๋ค๋ฉด ์ด๋จ๊น? ํด๋น ๋ณ์๋ ์ ์ ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ ๋ถ ํค์ง์ด ๋๋ ๊ฒ์ ์๋นํ ๋ญ๋น๋ฅผ ์๋ฐํ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด, ์ธ๋ฆฌ์ผ์์๋ "๊ธฐ์กด ์ด๋ฆ -> ์๋ก์ด ์ด๋ฆ" ์ ํ๋ฒ์ ๋ฐ๊ฟ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก '์ฝ์ด ๋ฆฌ๋ค์ด๋ ํธ' ์ด๋ค. ์ฝ์ด ๋ฆฌ๋ค์ด๋ ํธ๋ DefaultEngine.ini ํ์ผ์ด๋, Default.ini ํ์ผ ๋ฑ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์์๋ฅผ ๋ณด์. [CoreRedirects] +ClassRedirects=(OldName="Pawn",NewName="MyPawn",InstanceOnly=true) +ClassRedirects=(OldName="/Script/MyModule.MyOldClass",NewN..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTnerL/btryp4auk6i/KfiHcRySzwph4FYdb6d3gK/img.png)
FSoftObjectPath ์ TSoftObjectPtr ์ฌ์ฉํ ๋๋ง๋ค ๋ก๋ํ๋ ๊ฒ์ด ์๋๋ผ, ์ ์ ์ ์ ๋ถ ๋ก๋ฉํ์ง ์์ผ๋ฉด์ ๋ก๋ฉํ๊ณ ์ถ์ ์ ์ ์ ๋ฏธ๋ฆฌ ์ค๋น์์ผ ๋๊ณ ์ถ๋ค๋ฉด ์ด๋จ๊น? ๊ทธ๋ด ๊ฒฝ์ฐ, FSoftObjectPath ์ TSofrObjectPtr ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค. FSoftObjectPath ๋ ์ค์ ๋ก ์ ์ ์ ๊ฒฝ๋ก๋ฅผ FName ์ผ๋ก ์ ์ฅํ๊ณ ์๋ ๊ตฌ์กฐ์ฒด์ด๋ฉฐ, TSoftObjectPtr ๋ FSoftObjectPath ๋ฅผ wrapping ํ TWeakObjectPtr ์ด๋ค. TSoftObjectPtr.Get( ) ์ผ๋ก ์ฐธ์กฐ๋ ์ ์ ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ, FSoftObjectPath ๋ก ์ ์ ์ ๋ก๋ฉํ ์ ์๋ค. The Asset Registry and Object Libraries ์ ์ ๋ ์ง์คํธ๋ฆฌ๋..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uJZW6/btryfh3cUqL/VhIPzq99fqBYPKuRoeip81/img.png)
Assert assert ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฐธ์กฐํ๊ณ ์ ํ๋ ๋ณ์๊ฐ null ์ธ์ง ์๋์ง๋ฅผ ์ฒดํฌํ๋ ์ฉ๋๋ก ์์ฃผ ์ฌ์ฉ๋๋ค. ์ค์ ๊ฐ๋ฐ์ ํ ๋๋ ํ๋ก์ ํธ๋ช ์ผ๋ก ๋ ํค๋ํ์ผ์ assert ๊ตฌ๋ฌธ์ ์ด์ฉํ ์ปค์คํ ๋ก๊ทธ๋ฅผ ๋ง๋ค์ด ๋๋ ๊ฒ ๊ฐํธํ๋ค. ์ธ๋ฆฌ์ผ์์์ assert ์ข ๋ฅ๋ ํฌ๊ฒ check, verify, ensure ์ด ์๋ค. // assert ๋ DO_CHECK = 1 ์ผ๋๋ง ์คํ // check ๋ false ๊ฐ์ด๋ฉด ์คํ์ ์ค์ง check(Mesh != nullptr); checkf(MyPtr, TEXT("MyPtr is nullptr")); // false ์ด๋ฉด ๋ก๊ทธ ์ถ๋ ฅ checkcode(MyPtr, TEXT("MyPtr is nullptr")); // checkf ์ ๋น์ท checkNoEntry();..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bHb9OF/btrybFCBqe8/yMGPN7TjKngocZmGolWnGk/img.png)
์ธ๋ฆฌ์ผ ๋ฌธ์์ด ํด๋์ค ์ธ๋ฆฌ์ผ ๋ฌธ์์ด ํด๋์ค๋ 3 ๊ฐ์ง๊ฐ ์๋ค. (FName, FString, FText) ์ด ์ค, ์กฐ์์ด ๊ฐ๋ฅํ ํด๋์ค๋ FString ์ด๋ค. ์ฐธ๊ณ - ๋ฌธ์์ด์ ๋ณํ : ์ถ์ฒ FName ์ FName(*FString) ๊ผด์, FString ์ .ToString( ) ๊ผด์, FText ๋ FText::FromName( ) ๊ผด์ ํ์ฉํ๋ ๊ฒ์ ์ ์ ์๋ค. ๊ธฐํ ์ธ๋ถ ๊ตฌํ์ ์์ ๋ชฉ ๋งํฌ์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์. FName FName ์ ์ฝํ ์ธ ๋ธ๋ผ์ฐ์ ์์ ์ ์ ์ด๋ฆ์ ์ง์ ๋, ์ค์ผ๋ ํ ๋ฉ์์์ ๋ณธ์ ์ ๊ทผํ ๋ ๋ฑ๋ฑ์ ์ฌ์ฉ๋๋ค. FName ์ ๋ฌธ์์ด์ ํ๋ํ๋ ๋น๊ตํ์ง ์๊ณ , ์ฃผ์ด์ง ๋ฌธ์์ด์ ํด์ฑํ ํ ์ด๋ธ์ ์ ์ฅํ ํ, index ๋ก ๊ฐ์ ๋น๊ตํ๋ค. ์ด ๋๋ฌธ์ ํค๋ก FName ์ ์ ๊ทผํ๋ ์๋๊ฐ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwao3l/btrx8NhdPin/5B4u2Z5nrcmOvKcZwNrSik/img.png)
๊ฐ๋น์ง ์ปฌ๋ ์ ์ธ๋ฆฌ์ผ์์ UProperty ๋ฅผ ๋ถ์ธ ๊ฐ์ฒด๋ ์ธ๋ฆฌ์ผ ์์ง์ด ์๋์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํจ์ ์์ด ๋ฆฌํ๋ ์ ์์คํ ์ ์ฌ์ฉํ๋๋ฐ, ์์ง์ด ๊ฐ์ฒด์ ์์ฑ๊ฐ์ ์๊ณ ์์ผ๋ฏ๋ก, ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ญ์ ํด๋ ๊ด์ฐฎ์ ๊ฐ์ฒด๋ค์ ๊ตฌ๋ถํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ธ๋ฆฌ์ผ ์์ง์์๋ Reference Graph ๋ฅผ ๋ง๋ค์ด ์ค๋ธ์ ํธ๋ค์ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๊ตฌ๋ถํ๋ค. ์ด ๊ทธ๋ํ ๋ฃจํธ์๋ "Root Set" ์ด๋ผ ์ง์ ๋ ์ค๋ธ์ ํธ ์ ์ด ์กด์ฌํ๋ฉฐ, "Root Set" ์ ํฌํจ๋ ๊ฐ์ฒด๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์์ ์ ์ธ๋๋ค. UObject::BaseUtility::AddToRoot ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ "Root Set" ์ ์ถ๊ฐ์ํฌ ์ ์๋ค. ( ์์ : UMyObject->AddToRo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d0R5O0/btrx9AO3eFE/RSWUN3TUBKF9fWZ9v3iBQk/img.png)
์ค๋งํธ ํฌ์ธํฐ 3๋์ฅ C++ ์๋ ๋ํ์ ์ธ ์ค๋งํธ ํฌ์ธํฐ 3 ๊ฐ์ง๊ฐ ์๋๋ฐ, ์ธ๋ฆฌ์ผ์์๋ ์ด๋ฅผ T๋ก ์์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๊ณตํ๋ค. TUniquePtr TSharedPtr TWeakPointer ๊ธฐ๋ณธ์ ์ธ ์๋ฆฌ์ ๊ธฐ๋ฅ์ C++ ์ ๋น์ทํ๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋ ์ฐจ์ด๋ง ์ ๊น ์ง๊ณ ๋์ด๊ฐ๋ฉด, TUniquePtr : C++ ์์ std::move ๋ฅผ ์ด์ฉํด ์์ ๊ถ์ ์ด์ ํ๋ค๋ฉด, ์ธ๋ฆฌ์ผ์์๋ MoveTemp ๋ฅผ ์ฌ์ฉํ๋ค. TSharedPtr : C++ ์์ std::maked_shared ๋ฅผ ์ด์ฉํ๋ค๋ฉด, ์ธ๋ฆฌ์ผ์์๋ MakeShared ์ ์ฌ์ฉํ๋ค. ํด์ ์ Reset( ) ์ ํธ์ถํ๋ค. shared_ptr(new MyClass()) ๊ฐ์ ์์ผ๋ก ์ฌ์ฉํ ๋๋ MakeShareable ์ ์ฌ์ฉํ๋ค. MakeSharea..