๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
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 ์ ์ ๋ ์ง์คํธ๋ฆฌ๋..
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();..
์ธ๋ฆฌ์ผ ๋ฌธ์์ด ํด๋์ค ์ธ๋ฆฌ์ผ ๋ฌธ์์ด ํด๋์ค๋ 3 ๊ฐ์ง๊ฐ ์๋ค. (FName, FString, FText) ์ด ์ค, ์กฐ์์ด ๊ฐ๋ฅํ ํด๋์ค๋ FString ์ด๋ค. ์ฐธ๊ณ - ๋ฌธ์์ด์ ๋ณํ : ์ถ์ฒ FName ์ FName(*FString) ๊ผด์, FString ์ .ToString( ) ๊ผด์, FText ๋ FText::FromName( ) ๊ผด์ ํ์ฉํ๋ ๊ฒ์ ์ ์ ์๋ค. ๊ธฐํ ์ธ๋ถ ๊ตฌํ์ ์์ ๋ชฉ ๋งํฌ์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์. FName FName ์ ์ฝํ ์ธ ๋ธ๋ผ์ฐ์ ์์ ์ ์ ์ด๋ฆ์ ์ง์ ๋, ์ค์ผ๋ ํ ๋ฉ์์์ ๋ณธ์ ์ ๊ทผํ ๋ ๋ฑ๋ฑ์ ์ฌ์ฉ๋๋ค. FName ์ ๋ฌธ์์ด์ ํ๋ํ๋ ๋น๊ตํ์ง ์๊ณ , ์ฃผ์ด์ง ๋ฌธ์์ด์ ํด์ฑํ ํ ์ด๋ธ์ ์ ์ฅํ ํ, index ๋ก ๊ฐ์ ๋น๊ตํ๋ค. ์ด ๋๋ฌธ์ ํค๋ก FName ์ ์ ๊ทผํ๋ ์๋๊ฐ ..
๊ฐ๋น์ง ์ปฌ๋ ์ ์ธ๋ฆฌ์ผ์์ UProperty ๋ฅผ ๋ถ์ธ ๊ฐ์ฒด๋ ์ธ๋ฆฌ์ผ ์์ง์ด ์๋์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํจ์ ์์ด ๋ฆฌํ๋ ์ ์์คํ ์ ์ฌ์ฉํ๋๋ฐ, ์์ง์ด ๊ฐ์ฒด์ ์์ฑ๊ฐ์ ์๊ณ ์์ผ๋ฏ๋ก, ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ญ์ ํด๋ ๊ด์ฐฎ์ ๊ฐ์ฒด๋ค์ ๊ตฌ๋ถํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ธ๋ฆฌ์ผ ์์ง์์๋ Reference Graph ๋ฅผ ๋ง๋ค์ด ์ค๋ธ์ ํธ๋ค์ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๊ตฌ๋ถํ๋ค. ์ด ๊ทธ๋ํ ๋ฃจํธ์๋ "Root Set" ์ด๋ผ ์ง์ ๋ ์ค๋ธ์ ํธ ์ ์ด ์กด์ฌํ๋ฉฐ, "Root Set" ์ ํฌํจ๋ ๊ฐ์ฒด๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์์ ์ ์ธ๋๋ค. UObject::BaseUtility::AddToRoot ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ "Root Set" ์ ์ถ๊ฐ์ํฌ ์ ์๋ค. ( ์์ : UMyObject->AddToRo..
์ค๋งํธ ํฌ์ธํฐ 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..
์๋ฆฌ์ผ๋ผ์ด์ ์ด์ ์๋ฆฌ์ผ๋ผ์ด์ ์ด์ ์ด๋ผ๋ ๊ฐ๋ ์, ํ ๋ ํฌํธ์ ๊ฐ๋ค๊ณ ์ดํดํ๋ฉด ์ฝ๋ค. ํ ๋ ํฌํธ๋ก ์ฌ๋์ ์ ์กํ๋ค๊ณ ํ์ ๋, ์ ์์ ์ผ๋ก ์๋ํ๋ ํ ๋ ํฌํฐ๋ ์ฌ๋ ์ ์ฒด๋ฅผ ์จ์ ํ ์ฃผ๊ณ ๋ฐ๋ ํํ์ผ ๊ฒ์ด๋ค. ์ฆ, ์ ๋ฐ๋ง ๋ณด๋ธ๋ค๊ฑฐ๋, ๋๋ ์ ๋ณด๋ด์ง ์๋๋ค๋ ๋ป์ด๋ค. (๋๋ ์ ๋ณด๋ด๋ฉด... ๊ทธ๊ฑด ํ ๋ ํฌํฐ๊ฐ ์๋๋ผ ์ด์๋ฌด๊ธฐ๊ฐ ์๋๊น) ์๋ฆฌ์ผ๋ผ์ด์ ์ด์ ์ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ฅผ ํ๋ฒ์ ์์ ํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํด FArchive ํด๋์ค๋ฅผ ๋ง๋ค์ด ํ์ผ, ๋ฉ๋ชจ๋ฆฌ ๋ฑ๋ฑ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ชจ๋ ๋งค์ฒด๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค. ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ชจ๋ ๋งค์ฒด๋ FArchive ํด๋์ค๋ฅผ ์์๋ฐ์์ ๊ตฌํํ๋ค. FArchive ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ํ์ผ์ ๋ง๋ค๊ณ ์ฐ๊ธฐ/์ฝ๊ธฐ๋ฅผ ๊ตฌํํ ์์ ์ฝ๋๋ฅผ ๋ณด์. FString FullPath = FString::Printf(..
๋ธ๋ฆฌ๊ฒ์ดํธ C# ์์๋ ๋ฐํ์-๊ตฌ๋ ์(Publisher-Subscriber) ํจํด์ ๊ตฌํ์ด ๊ฐ๋ฅํด, ํน์ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ ๊ฐ์ฒด๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐํ๋์์ ๋ ์ํ๋ ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋๋๋ก ๋ง๋ค ์ ์๋ค. ์ด๋, ์์ ์ด์ผ๊ธฐํ ํน์ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฅธ ๋ง๋ก "๋ธ๋ฆฌ๊ฒ์ดํธ"๋ผ๊ณ ํ๋ค. C++ ์์๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ์์คํ ์ด ์์ง๋ง, ์ธ๋ฆฌ์ผ์ ์์ฒด์ ์ผ๋ก ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๊ธฐ์กด์ ํจ์ ํฌ์ธํฐ ๋ฑ์ ์ด์ฉํ๋ ๊ฒ๋ณด๋ค ๊ฐํธํ๋ฉฐ ์์ ํ๋ค. ๋๋ฆฌ์๋ฅผ ํตํด ํจ์๋ฅผ ํธ์ถํ๋ฏ๋ก ํธ์ถํ ํจ์๋ ์ด๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๊ฐ ์์ด์ ธ๋ ๋๋ฆฌ์๊ฐ ์ฒดํฌํด ์์ ํ๊ฒ ํจ์๋ฅผ ํธ์ถํ ์ ์์ผ๋ฉฐ, ๋์ผํ ํ์ ๊ฐ์ง ํจ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋๋ฆฌ์๊ฐ ๋ฌถ์ด์ ๊ด๋ฆฌํ๊ณ ํ์ํ ๋ ๋์์ ๋ชจ๋ ํธ์ถํ ์๋ ์๋ค. ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋..
ํ๋ ๋ ํผ๋ฐ์ฑ vs ์ํํธ ๋ ํผ๋ฐ์ฑ CDO ์์ฑ์, ์์ฑ์์์ ์ ์ ์ ์ ๋ฌด๋ฅผ ํ์ธํ๊ธฐ ์ํด ConstructorHelpers ํจ์๋ฅผ ํธ์ถํด ์ ์ ์ ๋ก๋ํ๋ค. ํ์ง๋ง ๊ฒ์ ์์ ์ ์ ๋ฐ๋์ ์กด์ฌํ๋์ง ์ฒดํฌํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ, ์ ์์ ๊ฒฝ์ฐ๋ฅผ ํ๋ ๋ ํผ๋ฐ์ฑ(Hard Referencing), ํ์๋ฅผ ์ํํธ ๋ ํผ๋ฐ์ฑ(Soft Referencing) ์ด๋ผ๊ณ ํ๋ค. ์ํํธ ๋ ํผ๋ฐ์ฑ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๋์๋ FStringAssetReference ๊ตฌ์กฐ์ฒด๋ฅผ, ์ ์ ์ ํด๋์ค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๋์๋ FStringClassReference ๊ตฌ์กฐ์ฒด์ ๊ฒฝ๋ก ์ ๋ณด๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋๋ค. ์ฌ๋ฌ ์ ์ ์ ๊ฐ์ ธ์ฌ ๋๋ TArray ํ์์ ์ฌ์ฉํ๋ฉด ๋๋ค. ABPawn.h (๋ก๋ฉํ ์ ์ ์ ์ค์ ์ฌ์ฉํ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ..