๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
์ธ๋ฆฌ์ผ 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..
์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ์์ฑ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก NewObject( ) ๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฒ์๋ ABGameInstance ์์ WebConnection ์ด๋ผ๋ DefaultSubobject ๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ABGameInstance ์์๋ GetDefaultSubobject ๋ฅผ ํธ์ถํด WebConnection ์ ์กฐํํ๊ณ , WebConnection ์์๋ GetOuter ๋ฅผ ํธ์ถํด ABGameInstance ๋ฅผ ์กฐํํ ์ ์๋ค. NewObject vs CreateDefaultSubobject ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๊ฒ์ ์จ์ผ ํ ๊น? ๋ ๊ฐ์ง ๋ชจ๋ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ๊ฐ์ผ๋, ์์ฑ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค. ๋ค์์ ์ฝ๋๋ฅผ ๋ณด์. ... #include "ABGameInsta..
๋ฆฌํ๋ ์ : ๋ฐํ์์ ์๊ธฐ ์์ ์ ์กฐ์ฌํ๊ฒ ๋ง๋ค์ ์ธ๋ฆฌ์ผ์ UHT(Unreal Header Tool) ์ ์ด์ฉํด ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ, ๋ฉค๋ฒ ๋ณ์/ํจ์ ๋ฑ์ ์ ๋ณด๋ฅผ UClass ์ ์ ์ฅํ๋ค. ์ด๋ฅผ ๋ฆฌํ๋ ์ ์ด๋ผ๊ณ ๋ ํ๊ณ , ํ๋กํผํฐ ์์คํ ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ๋ฆฌํ๋ฆฌ์ผ์ด์ ์์คํ ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก, ๋ฆฌํ๋ ์ ์์คํ ์ ๋ณด์ด๋๋ก ํ์ผ๋ฉด ํ๋ ์ ํ์ด๋ ํ๋กํผํฐ์ ์ฃผ์์ ๋ฌ์๋๋ฉด UHT ๊ฐ ์ปดํ์ผ์ ํด๋น ์ ๋ณด๋ฅผ ์์งํ๊ฒ ๋๋ค. ํ๋กํผํฐ ์์คํ ๊ณ์ธต ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค. (UField ์๋์ UStruct, UEnum, UProperty ๊ฐ ์์) ์ค์ ์์ ์ฝ๋๋ฅผ ๋ณด์. #include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject ..
CDO ๋ ๋ฌด์์ด๊ณ , ๋ ์ ์ฌ์ฉํ ๊น ์ธ๋ฆฌ์ผ์์๋ ๋ฐํ์์ ๋น ๋ฅธ ํ์ ์ฒดํน๊ณผ ํด๋์ค ๊ฒ์์ ์ํด, ์ปดํ์ผ ํ์์์ ํด๋์ค์ ํ์ ๋ฑ์ ๋ฉํ ์ ๋ณด๋ฅผ ์์ฑํ๋ค. ์ด๋ฌํ ๋ฉํ ์ ๋ณด๋ UClass ๋ผ๋ ์ธ๋ฆฌ์ผ ํด๋์ค์ ๋ณด๊ด๋๋ค. UClass ์๋ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ๋ ๋ฉค๋ฒ ๋ณ์/ํจ์์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด์๋ค. ์ด๋ฌํ UClass ๋ฅผ ์ด์ฉํ๋ฉด, ๋จ์ํ ํ์ ์ ๊ฒ์ํ๋ ๊ฒ์ ๋์ด ๋ฐํ์์์ ์ธ์คํด์ค์ ๋ฉค๋ฒ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ ์๋ ์๋ค. (Java, C# ์์๋ ์ด๋ฐ ๊ธฐ๋ฅ์ ๋ฆฌํ๋ ์ [Reflection] ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค) ๋ฐํ์ ๊ณผ์ ์์๋ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ฅผ ์ด๊ธฐํํด์ผ ํ๋๋ฐ, ์ด๋ ์์ฑ๋๋ ์ธ์คํด์ค๊ฐ CDO(Class Default Object), ํด๋์ค ๊ธฐ๋ณธ ๊ฐ์ฒด์ด๋ค. ์ธ๋ฆฌ์ผ์ CDO ๋ฅผ ๋ฏธ๋ฆฌ ..
์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ ์ธ๋ฆฌ์ผ ์์ง์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๋ ๊ฐ์ฒด์ด๋ค. ์ธ๋ฆฌ์ผ์ด ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ ์ด์ ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ, ๋จผ์ ํด๋์ค์ ํ์ ์ฒดํน์ ๋น ๋ฅด๊ณ ๊ฐํธํ๊ฒ ํ ์ ์๋ค๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋์ผ๋ก ํด ์ฃผ๋ ๊ฒ ๋ฑ์ด ์๊ฒ ๋ค. ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ U ๋ก ์์ํ๊ณ , ์ผ๋ฐ C++ ์ค๋ธ์ ํธ๋ F ๋ก ์์ํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค. ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ์ ์ฒด ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค : CDO(Class Default Object) : ๊ฐ์ฒด์ ์ด๊ธฐ ๊ฐ์ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌ Reflection : ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๋ฐํ์์์ ์ค์๊ฐ ์กฐํ๊ฐ ๊ฐ๋ฅ GC(Garbage Collection) : ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ ํด์ ํ ์ ์์ Serialization : ๊ฐ์ฒด์ ์์ฑ ์ ๋ณด๋ฅผ ํต์ผ๋ก ์์ ํ๊ฒ ๋ณด๊ดํ๊ณ ..
์ธ๋ฆฌ์ผ ๋น๋ ์์คํ ๊ทธ๋ ๋ค๋ฉด UClass ํ์ ์ ์ ๋ณด๋ ๋ฌด์์ด๊ณ ์ค์ ๊ฐ์ฒด์ ์ ๋ณด๋ ๋ฌด์์ผ๊น? ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋, ์ธ๋ฆฌ์ผ ๋น๋ ์์คํ ์ ๋ํด ๊ณต๋ถํ ํ์๊ฐ ์๋ค. (๋ํ ์ผํ ๋ด์ฉ์ ์ด๋์ฐ๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํจ) ๋จผ์ , ์ธ๋ฆฌ์ผ์ ํฌ๋ก์ค ํ๋ซํผ์ผ๋ก ๋์ํด์ผ ํ๊ธฐ ๋๋ฌธ์, ํ๋ก์ ํธ์ ํด๋ ๊ตฌ์กฐ์ ์์คํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ธ๋ฆฌ์ผ ๋น๋ ํด์ด OS ์ ๋ง๋ ์๋ฃจ์ ์ ์์ฑํ๊ฒ ๋๋ค. ๋น์ฃผ์ผ ์คํ๋์ค์์ ๋น๋์, Editor ๋ก ๋๋๋ ์ค์ ์ ํด๋ฆญํ๋ฉด ์๋ํฐ์ฉ dll ์ ์์ฑํ๋ ๊ตฌ์ฑ์ด๋ฉฐ, Editor ๊ฐ ๋ถ์ด ์์ง ์์ ๊ฒฝ์ฐ ์คํ์ฉ exe ํ์ผ์ ์์ฑํ๋ค. ์ฆ, Development Editor ์ค์ ์ ๋๋ฅด๋ฉด ๋๋ฒ๊น ํ ์ ์๋ ๊ฐ๋ฐ ๋ฒ์ ์ผ๋ก, ์๋ํฐ์ฉ dll ์ ๋ง๋ค๋๋ก ์ปดํ์ผ๋๋ค. ์ปดํ์ผ๋ dll ํ์ผ๋ค์ interm..
GetClass vs StaticClass ์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ฉด, ํน์ ๊ฐ์ฒด์ ํด๋์ค ์ ๋ณด๋ฅผ ์๊ธฐ ์ํด GetClass ํน์ StaticClass ๋ฅผ ์ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น? ํ ์ค ์์ : StaticClass ๋ ์ปดํ์ผ ํ์์์ ์์ฑ๋ UClass ํ์ ์ ์ ๋ณด๋ฅผ ์ป์ด์ค๋ ๊ฒ์ด๋ฉฐ, GetClass ๋ ๋ฐํ์์์ ์ค์ ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ๋๋ค. AMyActor* ActorPtr = NewObject(...); UObject* ObjPtr = Actor; UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor UClass* ObjectClass = UObject::StaticClass(); // UObject UCla..
Level Design ์ปจ์ : ๋ฌดํ๋งต. 4 ๊ฐ์ค์ ํ๋์ ๋ฐฉํฅ์ผ๋ก ์ด๋ํจ. ๋ชฉํ ์ง์ ์ด ์ ํด์ ธ ์์. ๋ชฉํ์ง์ ์ ๋๋ฌํ์ฌ, ์ฑํ๋ฅผ ๋ด์กํ๋ฉด ๊ฒ์์ด ํด๋ฆฌ์ด. ์ ํฌ : ์ ๊ณต๊ฐ์ ๋์ฐฉํ๋ฉด, ๋ฌธ์ด ๋ซํ๋ฉด์ ์ ์ด ๋๋ค์ผ๋ก ์คํฐ๋ ์ ๊ณผ ์ธ์ฐ๊ฒ ๋จ. ๋ชฉํ ์ง์ ์ ๊ฐ๊น์ด ๊ฐ์๋ก ์ ์ด ๊ฐ๋ ฅํด์ง. ๋ชฉํ ์ง์ ๋ฐฉ์์๋ ๋ณด์ค์ ์ ํฌ๋ฅผ ํ๊ฒ ๋ง๋ค ์๋ ์์. ์ ํฌ ์๋ฃ : ์ ์ ์ ๋ถ ๋ฌด์ฐ๋ฅด๋ฉด, 2๊ฐ์ ์์ดํ ๋ฐ์ค๊ฐ ๋์ด. ์ด๋ ์ ํ์ ํด์ผ ํจ. ์ ํ์ง๋ ๋ค์๊ณผ ๊ฐ์. ๋ฌด๊ธฐ๋ณ๊ฒฝ ๋ฌด๊ธฐ๊ฐํ ๋ฌด๊ธฐ ๋ด๊ตฌ๋ ์๋ฆฌ ์บ๋ฆญํฐ HP ์ฆ๊ฐ ์บ๋ฆญํฐ ์ด๋์๋ ์ฆ๊ฐ ์บ๋ฆญํฐ ๊ณต๊ฒฉ์๋ ์ฆ๊ฐ ๋ค๋ง 2 ๊ฐ์ง ์ ๋ถ ํจ๊ณผ ์นดํ ๊ณ ๋ฆฌ๋ ๊ฐ์๋ฐ, ํ๋๋ "100% ํ๋ฅ ๋ก 10% ์ฑ๋ฅ ํฅ์" ์ด๋ฉฐ, ๋๋จธ์ง ํ๋๋ "10% ํ๋ฅ ๋ก ์ฑ๋ฅ 50% ์์น, 40%ํ๋ฅ ๋ก ์ฑ๋ฅ..