๋ชฉ๋ก์ ์ฒด ๊ธ (1096)
KoreanFoodie's Study
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 (๋ก๋ฉํ ์ ์ ์ ์ค์ ์ฌ์ฉํ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ..
์ธ๋ฆฌ์ผ INI ํ์ผ ์ค์ ๋ง์ฝ ์บ๋ฆญํฐ์ HP ๋ฅผ ํธ์งํ๊ณ ์ถ์๋ฐ, HP ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๋งค๋ฒ ์บ๋ฆญํฐ๋ฅผ ์๋ํฐ์์ ์์ ํด์ผ ํ๋ค๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ผ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด, ์ธ๋ฆฌ์ผ์ INI ํ์ผ์ ์ด์ฉํด ๋ธ๋ฃจํ๋ฆฐํธ๋ ๋ณ๋์ ์๋ํฐ ์์ ์ด ์์ด๋ ์์ฑ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค. (์๋ INI ํ์ผ์ ์๋์ฐ์์ ์์คํ ๊ตฌ์ฑ ์์์ ์ค์ ์ ์ํด ๋ง๋ค์ด์ง ํ์ผ ํ์์ด๋ค) INI ํ์ผ์ ํ์์ ์์ฑ๊ณผ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ด ๋ ๊ฐ์ง๋ฅผ ํฌ๊ดํ๋ ์น์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์น์ : ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ C++ ํด๋์ค ์๋ณ์ ์์ฑ : C++ ํด๋์ค์์ INI ๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ ํ UPROPERTY ๋ฉค๋ฒ ๋ณ์ ๊ฐ : ์์ฑ์ ์ง์ ํ ๊ฐ C++ ํด๋์ค ์๋ณ์๋ ๊ณ ์ ํ ์๋ณ์๋ก ๊ตฌ๋ถ๋๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ํ์์ ๊ฐ์ง๋ค. {..
..์ ํ๋ค๋ค. ์ด์ ๋ ์ฌ๋ฌ๊ฐ์ง ์๊ฒ ์ง๋ง, ์ญ์ ์๊ฐ์ด ๋ถ์กฑํ๋ค๋๊ฒ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ค. ์ฌํ์ ํ๋ค๋ฉด ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ง๊ธ๊ฐ์ ์ํฉ์์๋.. ํ์ผ์๋ ์ค์ ๊ฐ๋ฐ์ 1-2 ์๊ฐ์ด๋ ํฌ์ ํ ์ ์๋ ์ถ๋ค. ์ฃผ๋ง์ ์ ํ์ฉํ๋ค๊ณ ํ๋ค ์ ๋์ ์ผ๋ก ์๊ฐ์ด ๋ถ์กฑํ๋ค. ๊ธฐํ์ ๊ณ์ ๋ฐ๋๋ค. ๊ฐ๋ฐ์ ๋ฌด์จ ์ง์ฒ์ด ์๋๊ฒ๋ ์๋๋ฐ ๋ง์๋ง ๋์ด๊ฐ๋ ๋๋์ด๋ค. ์ ํ์ ์๊ฐ์ด ์ ์ ๋ค๊ฐ์ค๋ ๊ฒ ๊ฐ๋ค. ๋๋ ต๊ธฐ๋ ํ๊ณ ๋จ๋ฆฌ๊ธฐ๋ ํ์ง๋ง, ๋๋ ต์ง ์๋ค๋ฉด ๊ทธ๊ฑด ๋์ ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์ ์ธ์ ๋ ๋ด ์์์ ๋ฐ์ด๋๋ ๊ฐ์น๊ฐ ์์๋ค๋ ๊ฒ๋ ์ ์๊ณ ์๋ค. ๋ฐ์ผํ๋ก ํญํ์ ์ผ.
์ธ๋ฆฌ์ผ ์กํฐ ์์ฑ ์์ ์ฐธ๊ณ ๋ก ์กํฐ ์์ฑ์์๋ ConstructorHelpers ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค. AWeapon::AWeapon() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; Weapon = CreateDefaultSubobject(TEXT("WeaponHashValue")); RootComponent = Weapon; static ConstructorHelpers::FObjectFinder SK_BlackKnight(TEXT("SkeletalMesh'/Game/Infinit..