λͺ©λ‘μ 체 κΈ (1110)
KoreanFoodie's Study
νλ λ νΌλ°μ± 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..
μΈλ¦¬μΌ μ€λΈμ νΈ μμ± μΈλ¦¬μΌ μ€λΈμ νΈλ₯Ό μμ±ν λλ κΈ°λ³Έμ μΌλ‘ 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..