[ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ]
: ์ธ๋ฆฌ์ผ ์์ง์ด ์ค๊ณํ ์๋ก์ด ์์คํ ์ ๋จ์ ์ค๋ธ์ ํธ์ด๋ค.
- ๊ธฐ์กด C++ ์ค๋ธ์ ํธ์ ๋ชจ๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ค๋ธ์ ํธ์ด๋ค.
- ์ธ๋ฆฌ์ผ์์๋ ์ผ๋ฐ C++ ์ค๋ธ์ ํธ์ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค.
- C++ ์ค๋ธ์ ํธ : ์ ๋์ฌ๋ก F ์ฌ์ฉ. ์ ์์ค์ ๋น ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ ์ฌ์ฉ
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ : ์ ๋์ฌ๋ก U ์ฌ์ฉ. ์ฝํ ์ธ ์ ์์ ๊ด๋ จ๋ ๋ณต์กํ ์ค๊ณ ๊ตฌํ์ ์ฌ์ฉ
- UCLASS ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฆฌ์ผ ์์ง์ UObject๋ก ๋ฑ๋กํ ์ ์๋ค.
{ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ๊ธฐ๋ณธ ํค๋ ์ดํด๋ณด๊ธฐ }
CoreMinimal.h
์UObject/NoExportTypes.h
๋ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด์ผ ํ ํค๋์ด๋ค.MyObject.generated.h
๋ ๋ฆฌํ๋ ์ ๋ฑ ์ธ๋ฆฌ์ผ์ด ์ ๊ณตํ๋ ํ์ด๋ ๋ฒจ OOP ์ธ์ด์ ๊ธฐ๋ฅ๋ค์ด ํฌํจ๋์ด์๋ค.GENERATED_BODY()
๋ #define (ํ์ฌ ํ์ผ ID) + _ + (๋ผ์ธ์ ๋ณด) + _GENERATED_BODY ๋ก ์นํ๋ ์ ์๋ค.- ์ด๊ฒ์
MyObject.generated.h
์ ์๋ (ํ์ฌ ํ์ผ ID) + _ + (๋ผ์ธ์ ๋ณด) + _GENERATED_BODY ์ด ์ ์๋ ์๋ ๋ถ๋ถ์ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค. - ์ด ๋ถ๋ถ์๋ ์ธ๋ฆฌ์ผ์ด ์ ๊ณตํ๋ ํ์ด ๋ ๋ฒจ OOP ์ธ์ด์ ๊ธฐ๋ฅ๋ค์ด ํฌํจ๋์ด ์๋ค.
- ์ด๊ฒ์
UCLASS()
๋งคํฌ๋ก : ์ธ๋ฆฌ์ผ์ ๋ฆฌํ๋ ์ ํ๋กํผํฐ๋ก ๋ฑ๋กMYGAME_API
๋ฅผ ์์ ๋ถ์ด๋ฉด ์ธ๋ถ ๋ชจ๋์์ ๋์ ๊ฒ์ ํ๋ก์ ํธ์ ์ํ UMyObject์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. (MYGAME์ ๋์ ๊ฒ์ ํ๋ก์ ํธ ์ด๋ฆ)
์ธ๋ฆฌ์ผ ํค๋ ํด(UHT)
์ ์ฝ๋์์ ๋น๋ ์์ฒญ ์MyObject.generated.h
์ ์๋ ์์ฑํด์ค๋ค.
๊ณผ์ : ๋น๋ ์์ฒญ → ์ธ๋ฆฌ์ผ ํค๋ ํด์ด ์ฝ๋ ๋ถ์ →MyObject.generated.h
์์ฑ → ์ปดํ์ผ
{ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ํน์ง }
- ํน์ง : ์ธ๋ฆฌ์ผ ์์ง์ด ์ ๊ณตํ๋ ํ์ด๋ ๋ฒจ OOP ์ธ์ด์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
- ํด๋์ค ๊ธฐ๋ณธ ๊ฐ์ฒด(CDO) : ํด๋์ค์ ๊ธฐ๋ณธ ๊ฐ๊ณผ ํ์ ์ ๋ณด ์ ๊ณต
- ๋ฆฌํ๋ ์ (Reflection) : ๋ฐํ์์์ ํด๋์ค ์ ๋ณด ์ฐธ์กฐ ๊ธฐ๋ฅ
- ์ธํฐํ์ด์ค(Interface) : ๋ชจ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค ์ ๊ณต
- ํฅ์๋ ์ด๊ฑฐํ(Enum) : ๋ณด๋ค ํฅ์๋ ์ด๊ฑฐํ ์ง์
- ๋ธ๋ฆฌ๊ฒ์ดํธ(Deligate) : ๊ฐ์ฒด๊ฐ ๊ฒฐํฉ์ ๋ฎ์ถ ์ ์๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ธฐ๋ฅ ์ ๊ณต
- ๊ฐ๋น์ง์ปฌ๋ ์ (Garbage Collection) : ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- ํฅ์๋ ๊ตฌ์กฐ์ฒด(Struct) : ๋ฆฌํ๋ ์ ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฒด ์ง์
- ์ง๋ ฌํ(Serialization) : ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ์ ์ฅ, ์ ์ก, ๋ถ๋ฌ๋ค์ด๋ ๊ธฐ๋ฅ
{ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ๋ฆฌํ๋ ์ ์์คํ }
https://www.unrealengine.com/ko/blog/unreal-property-system-reflection
๋ฆฌํ๋ ์ ์ ํ๋ก๊ทธ๋จ์ด ์คํ์๊ฐ์ ์๊ธฐ ์์ ์ ์กฐ์ฌํ๋ ๊ธฐ๋ฅ์ด๋ค.
- ๋ฆฌํ๋ ์ ์ ์ธ๋ฆฌ์ผ ์์ง ๊ธฐ์ ์ ์ค์ํ ๊ทผ๊ฐ์ผ๋ก ,์๋ํฐ์ ๋ํ ์ผ ํจ๋, ์ง๋ ฌํ, ๊ฐ๋น์ง ์ปฌ๋ ์ , ๋คํธ์ํฌ ๋ฆฌํ๋ฆฌ์ผ์ด์ , ๋ธ๋ฃจํ๋ฆฐํธ/C++์ปค๋ฎค๋์ผ์ด์ ๋ฑ ๋ค์์ ์์คํ ์ธ๋ฆฌ์ผ ์์คํ ์ ํฌํจ๋์ด ์๋ค.
- ๋ฆฌ๋ฅผ๋ ์
์์คํ
์ ์ต์
์ด๋ค. ๋ฆฌํ๋ ์
์์คํ
์ ๋ณด์์ผ๋ฉด ํ๋ ์ ํ์ด๋ ํ๋กํผํฐ์ ์ฃผ์์ ๋ฌ์์ฃผ๋ฉด, ์ธ๋ฆฌ์ผ ํค๋ ํด(UHT)์ด ํด๋น ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ ๋ ํด๋น ์ ๋ณด๋ฅผ ์์งํ์ฌ {%FileName%}.generated.h ์ ํฌํจ์์ผ์ค๋ค.
- UCLASS() , UPROPERTY(), UFUNCTION() ๋ฑ์ ๋งคํฌ๋ก๋ก ํด๋นํ๋ ์์๋ฅผ ๋งํนํ๋ฉด ๋ฆฌํ๋ ์
ํ๋กํผํฐ๋ก ์ธ๋ฆฌ์ผ ์์ง์ ๋ฑ๋ก๋๋ค.
- ๋งคํฌ๋ก์ ์ธ์๋ก ์๋ํฐ์ ์ฐ๋๋๋ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ฌ ์ค์ ํ ์ ์๋ค.
- UCLASS() , UPROPERTY(), UFUNCTION() ๋ฑ์ ๋งคํฌ๋ก๋ก ํด๋นํ๋ ์์๋ฅผ ๋งํนํ๋ฉด ๋ฆฌํ๋ ์
ํ๋กํผํฐ๋ก ์ธ๋ฆฌ์ผ ์์ง์ ๋ฑ๋ก๋๋ค.
- ๋ฆฌํ๋ ์ ํ๋กํผํฐ๊ฐ ์๋ ์์๋ค์ ๋ฑ๋ก๋ ์์๋ค๊ณผ ํผํฉํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋, ์ธ๋ฆฌ์ผ ์์ง์ผ๋ก๋ถํฐ ๊ด๋ฆฌ๋ฐ์ง ๋ชปํ๋ค.
๋ฆฌํ๋ ์ ํ๋กํผํฐ ๋ฑ๋ก ๊ณผ์ (์ถ์ฒ)
1. UBT๊ฐ ๋ฆฌํ๋ ์ ํค์๋ ํ์
2. UHT๊ฐ ํด๋น .cpp๋ฅผ ํ์ฑ
3. ๋ฆฌํ๋ ์ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ์์ง
4. ์์ง๋ ์ ๋ณด๋ ๋ณ๊ฐ์ {%FileName%}.generated.h์ ๊ฐ์ ์ด๋ฆ์ .cpp๋ก ์ ์ฅ
5. ๋น๋ ์ ๊ธฐ์กด ์ฝ๋์ {%FileName%}.generated.h ์ฝ๋๋ฅผ include ํ์ฌ ์ปดํ์ผ
{ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ๊ตฌ์ฑ }
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ๋ฆฌํ๋ ์
ํ๋กํผํฐ์ ํจ์๋ฅผ ์ง์ ํ ์ ์๋ค.
- ์ธ๋ฆฌ์ผ ์์คํ
์ ์ํด ๊ด๋ฆฌ๋๋ ํด๋์ค ๋ฉค๋ฒ ๋ณ์๋
UPROPERTY()
๋งคํฌ๋ก ์ง์ ๊ฐ๋ฅ - ์ธ๋ฆฌ์ผ ์์คํ
์ ์ํด ๊ด๋ฆฌ๋๋ ํด๋์ค ๋ฉค๋ฒ ํจ์๋
UFUNCTION()
๋งคํฌ๋ก ์ง์ ๊ฐ๋ฅ - ์ง์ ํ ๋งคํฌ๋ก ์์ ์๋ํฐ์ ์ฐ๋๋๋ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ ์๋ค. ( ์ธ์๋ก ์ ๋ฌ )
- ์ธ๋ฆฌ์ผ ์์คํ
์ ์ํด ๊ด๋ฆฌ๋๋ ํด๋์ค ๋ฉค๋ฒ ๋ณ์๋
- ๋ชจ๋ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ ํด๋์ค ์ ๋ณด(UClass)์ ํจ๊ปํ๋ค.
- UClass : ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ด์ ํด๋์ค. ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ํด๋์ค๋ UClass๋ฅผ ์ฌ์ฉํด์ ์์ ์ด ๊ฐ์ง ํ๋กํผํฐ์ ํจ์ ์ ๋ณด๋ฅผ ์ปดํ์ผ ํ์๊ณผ ๋ฐํ์์ ์กฐํํ ์ ์๋ค.
- ์ด๋ ๊ฒ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ NewObjectAPI๋ฅผ ์ฌ์ฉํด ์์ฑํด์ผ ํ๋ค.
- ์ผ๋ฐ C++ ๊ฐ์ฒด๋
new()
๋ก ์์ฑ - ์ธ๋ฆฌ์ผ C++ ๊ฐ์ฒด๋
NewObject()
๋ก ์์ฑ
- ์ผ๋ฐ C++ ๊ฐ์ฒด๋
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์์
StaticClass()
์GetClass()
๋ก UClass๋ฅผ ์ป์ ์ ์๋ค.StaticClass()
์GetClass()
์ฐจ์ด :StaticClass()
๋ ์ปดํ์ผ ํ์์,GetClass()
๋ ๋ฐํ์์ UClass์ ์ ๊ทผํ๋ค.
{ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ํด๋์ค ๊ธฐ๋ณธ ์ค๋ธ์ ํธ(CDO) }
- ์ธ๋ฆฌ์ผ ํด๋์ค ์ ๋ณด์๋ ํด๋์ค ๊ธฐ๋ณธ ์ค๋ธ์ ํธ(CDO, Class Default Object)๊ฐ ํฌํจ๋์ด ์๋ค.
- CDO๋ ์ธ๋ฆฌ์ผ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ์ ์ ์ฅํ๋ ํ ํ๋ฆฟ ๊ฐ์ฒด์ด๋ค.
- ํ ํด๋์ค๋ก๋ถํฐ ๋ค์์ ๋ฌผ์ฒด๋ฅผ ์์ฑํด ๊ฒ์ ์ฝํ ์ธ ์ ๋ฐฐ์นํ ๋ ์ผ๊ด์ฑ ์๊ฒ ๊ธฐ๋ณธ ๊ฐ์ ์กฐ์ ํ๋๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
- CDO๋ UClass์์
GetDefaultObject()
ํจ์๋ฅผ ํธ์ถํด ์ป์ ์ ์๋ค. - UClass ๋ฐ CDO๋ ์์ง ์ด๊ธฐํ ๊ณผ์ ์์ ์์ฑ๋๋ฏ๋ก ์ฝํ ์ธ ์ ์์์ ์์ฌํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
{ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ์ฒ๋ฆฌ }
https://docs.unrealengine.com/5.1/ko/unreal-object-handling-in-unreal-engine/
ํด๋์ค, ํ๋กํผํฐ, ํจ์์ ์ ํฉํ ๋งคํฌ๋ก๋ก ๋งํนํด์ฃผ๋ฉด UClass, UProperty, UFunction ์ผ๋ก ๋ณํ๋ค. ๊ทธ๋ฌ๋ฉด ์ธ๋ฆฌ์ผ ์์ง์ด ์ ๊ทผํ ์ ์์ด, ๋ค์์ ๋ด๋ถ์ ์ธ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
- ์๋ ์ด๊ธฐํ
UObject๋ ์์ฑ์ ํธ์ถ ์ ์ด๊ธฐํ์ ์๋์ผ๋ก 0์ผ๋ก ์ฑ์์ง๋ค. - ๋ ํผ๋ฐ์ค ์๋ ์
๋ฐ์ดํธ
์ธ๋ฆฌ์ผ ์์ง์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ผ๋ก ์์ ํ๊ฒ ๋์ ํ ๋นํ ์ ์๋ค. - ์ง๋ ฌํ
์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ ํฌ๋งท์ ๋ง๊ฒ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ๋ค์ด๋ ๊ฒ์ ์ผ๊ด์ ์ผ๋ก ์งํํ ์ ์๋๋ฐ, ์ ์ฅ๋๋ ์ ๋ณด๋ฅผ UProperty๋ก ๋ช ์ํ๋ฉด ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๊ฐ ์๋์ผ๋ก ๋์คํฌ์ ์ ์ฅํ๊ณ ๋ถ๋ฌ๋ค์ผ ์ ์๋ค. - ํ๋กํผํฐ ๊ฐ ์
๋ฐ์ดํธ ํ๊ธฐ
ํ๋์ ํด๋์ค์์ ํ์๋ ๋ง์ ์ค๋ธ์ ํธ๋ฅผ ๊ฒ์ ์๋ ์์ ๋ฐฐ์นํ์ ๋, ํด๋์ค ๋ํดํธ ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ๋ณธ๊ฐ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค. - ์๋ํฐ ํตํฉ
๋ฆฌํ๋ ์ ๋ฉํฌ๋ก์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์๋ํฐ์ ํตํฉ๋๋ฉด์ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. - ๋ฐํ์ ์ ํ ์ ๋ณด ๋ฐ ํ๋ณํ
๋ฆฌํ๋ ์ ๊ธฐ๋ฅ์ ์ด์ฉํด ๋ฐํ์์ ์์ ์ ํ์ ์ ํ์ธํ ์ ์๊ณ ์์ ํ ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค. - ๊ฐ๋น์ง ์ปฌ๋ ์
๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ค๋ธ์ ํธ๋ ์ธ๋ฆฌ์ผ ์์ง์ด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ์ํจ๋ค. - ๋คํธ์ํฌ ๋ฆฌํ๋ฆฌ์ผ์ด์
๋คํธ์ํฌ๋ก UProperty๋ก ๋ช ์ํ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ์ก์์ ํ ์ ์๋ค.
[ ์ ๋ฆฌ ]
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ ๊ธฐ์กด์ C++ ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ค๋ธ์ ํธ์ด๋ค.
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ๋ชจ๋ ๊ฐ์ฒด ์งํฅ์ ์ธ ๊ธฐ๋ฅ์ ๋น๋์ UBT์ UHT์ ์ํด {%FileName%}.generated.h์ ์์ฑ๋๋ค.
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์๋ ํญ์ ํด๋์ค ์ ๋ณด๋ฅผ ๋ด์ UClass ๊ฐ์ฒด๊ฐ ๋งค์นญ๋์ด ์๋ค.
- UClass๋ก๋ถํฐ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ์ ์ ๋ณด๋ฅผ ํ์ ํ ์ ์๋ค.
- UClass์๋ ํด๋์ค ๊ธฐ๋ณธ ์ค๋ธ์ ํธ(CDO)๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด ์ด๋ฅผ ํ์ฉํด ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
- ํด๋์ค ์ ๋ณด(UClass)์ CDO๋ ์์ง ์ด๊ธฐํ ๊ณผ์ ์์ ์์ฑ๋๋ฏ๋ก ๊ฒ์ ๊ฐ๋ฐ์์ ์์ ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ํค๋ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ฑ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋ํฐ๋ฅผ ๋๊ณ ์ปดํ์ผ ํ๋ ๊ฒ์ด ์์ ์ ์ด๋ค.
reference
๊ฐ์ : ์ด๋์ฐ ์ธ๋ฆฌ์ผ ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ข