๋ชฉ๋ก์ ์ฒด ๊ธ (1107)
KoreanFoodie's Study
์ธ๋ฆฌ์ผ ์กํฐ ์์ฑ ์์ ์ฐธ๊ณ ๋ก ์กํฐ ์์ฑ์์๋ 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%ํ๋ฅ ๋ก ์ฑ๋ฅ..
์ด๋์ฐ๋์ "์ด๋์ฐ์ ์ธ๋ฆฌ์ผ C++ ๊ฒ์ ๊ฐ๋ฐ์ ์ ์" ์ฑ ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ค์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์ค์ต์ ํ์ํ ์๋ฃ๋ค์ ์ด ๋งํฌ์์, ์ ๊ฐ ์์ ํ ์์ ์์ค ์์ฑ๋ณธ์ ์ฌ๊ธฐ์์ ์ฐพ์๋ณด์ค ์ ์์ต๋๋ค. (์ ๋ ์ธ๋ฆฌ์ผ 4.27.2 ๋ฒ์ ๊ธฐ์ค์ผ๋ก ์์ ํ์์ต๋๋ค) ๊ฒ์ ๋ฐ์ดํฐ์ ์ ์ฅ๊ณผ ๋ก๋ฉ SaveGame ์ด๋ผ๋ ์ธ๋ฆฌ์ผ์ ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค๋ฅผ ์ด์ฉํด ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ก๋ํด๋ณด์. ์ด๋ฆ์ ABSaveGame ์ผ๋ก ๋ง๋ ๋ค. ๊ฒ์ ์ธ์ด๋ธ ๊ธฐ๋ฅ์๋ ๊ฐ ์ ์ฅ ํ์ผ์ ์ ๊ทผํ ์ ์๋ ๊ณ ์ ์ด๋ฆ์ธ ์ฌ๋กฏ ์ด๋ฆ์ด ํ์ํ๋ค. ์ฌ๋กฏ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ง์ ํด ์ธ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค ์ ์๋๋ฐ, ์ฐ๋ฆฌ๋ Player1 ์ด๋ผ๋ ์ฌ๋กฏ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ๊ธฐ๋ณธ ์ธ์ด๋ธ ๋ฐ์ดํฐ ์์ฑ ๋ก์ง์ ํ๋ ์ด์ด ์คํ ์ดํธ์ InitPlay..
์ธ๋ฆฌ์ผ์์ ๋ฉค๋ฒ ๋ณ์ ์ ์ธ์ ์์ค์ UPROPERTY ๋งคํฌ๋ก๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ํ๋จ์ ๋ณ์ ์ ์ธ ๊ตฌ๋ฌธ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ค. ์ด๋ฅผ ์๋์กฐ์ ํ๊ธฐ ์ํด์๋ ๋น์ฃผ์ผ ์คํ๋์ค ์ถ๊ฐ ํ์ฅ ๋๊ตฌ๋ฅผ ๋น์ฃผ์ผ ์คํ๋์ค์ ์ค์นํด์ผ ํ๋ค! ๋งํฌ๋ ์๋์ ์๋ค : https://github.com/hackalyze/ue4-vs-extensions GitHub - hackalyze/ue4-vs-extensions: Useful UE4 Visual Studio extensions. Useful UE4 Visual Studio extensions. Contribute to hackalyze/ue4-vs-extensions development by creating an account on GitHub. github.com ์ผ๋จ ..
