๋ชฉ๋ก์ ์ฒด ๊ธ (1096)
KoreanFoodie's Study
Widget ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ์ ํด๋์ค ๋ฉค๋ฒ ๋ณ์ ์ฐ๋ (bind) ํ๊ธฐ ๊ฒ์์ ํ๋ ์ดํ๋ค ๋ณด๋ฉด ์์ดํ ๋ง๋ค ๋ค๋ฅธ ์ค๋ช ์ฐฝ์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, ์ฌ์ค ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ ฏ(์ฐฝ)์ ๋๊ฐ์ด ์๊ฒผ์ง๋ง, ๋ด์ฉ๋ฌผ์ ๋ค๋ฅธ ๊ฒ์ ์ ์ ์๋๋ฐ... ์์ ฏ์ ๋ค์ด๊ฐ๋ ๋ด์ฉ๊ณผ ํด๋์ค์ ์ ๋ณด๋ฅผ ์ฐ๋ํ๋ฉด ์์ ฏ์ ๋ด์ฉ์ ์์ดํ ์ ๋ง๊ฒ ๋์ ์ค ์ ์๋ค. ์์๋๋ก ์ด๋ฅผ ๋ง๋ค์ด ๋ณด์. 1. ๋จผ์ Widget Blueprint ๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด์ฉ๋ฌผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ์ฑ์๋ฃ๋๋ค. 2. ํด๋น ์์ ฏ์ ๋์ธ ํด๋์ค์์ ์์ ฏ ์ปดํฌ๋ํธ๋ฅผ ์ ์ธํ๊ณ , ์ด๋ฅผ ๋ฃ์ด ์ค๋ค. item.h /* Popup widget for when the players look at the item */ UPROPERTY(EditAnywhere..
int8 ์ด ์ธ์๋? ๋ฌผ๋ก Visual Studio ์์๋ int8 ์ ์๋ง ์ธ ์ ์๋ค. ํ์ง๋ง ๋ง์ฝ int8 ๋ณ์๋ฅผ ์ธ๋ฆฌ์ผ์์๋ ์ฐ๋ ค๊ณ ํ๋ค๋ฉด... /* Item count (ammo, etc) */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Item Properties", meta = (AllowPrivateAccess = "true")) int8 ItemCount; ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ฐพ์๋ณด๋ ๋ฒ๊ทธ ํฝ์ค๋ฅผ ์์ฒญํ๋๋ฐ... ๋จ์ํ ์ธ๋ฆฌ์ผ์์๋ int8 ์ ์ง์ํ์ง ์์์ ๊ทธ๋ฐ๊ฒ ์๋๊น? ๋ญ, uint8 ์ ์ง์ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด uint8 ์ ์ฐ๋ฉด ๋๊ฒ ๋ค. int8 ์ ์จ์ ์๋ฌ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ, ์ด๋์ ์๋ฌ๊ฐ ์๊ฒผ๋์ง ์ง์ด์ฃผ..
ํค๋์ท ๊ตฌํํ๊ธฐ (๋ถ์๋ณ ํผ๊ฒฉ ๋ฐ๋ฏธ์ง ์ค์ ) FPS ๊ฒ์์ ํ๋ค๋ณด๋ฉด ํค๋์ท์ ์ถ๊ฐ ๋ฐ๋ฏธ์ง (ํน์ ์ฆ์ฌ) ๋ฅผ ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด๋ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ๋ ๊น? ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก๋, ์ผ๋จ ์ด์์ ๋ง์ Enemy ํด๋์ค ๋ด Skeletal Mesh ์ Bone Name ์ ์ฐธ๊ณ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ค์ผ๋ ํค ํธ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด head ๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด์ ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ฉด ๋๋ค. AEnemy* HitEnemy = Cast(BeamHitResult.Actor.Get()); if (HitEnemy) { if (BeamHitResult.BoneName.ToString() == HitEnemy->GetHeadBone()) { // Head shot } else {..
Does Implement Interface ๊ธฐ๋ฅ์ผ๋ก ๋ฐ๋ฏธ์ง, ์ธํฐ๋์ ๊ตฌํํ๊ธฐ ์ด์ ์์์๋, ๋ง์ ๋์์ด Enemy ์ด๋ฉด ๋ฐ๋ฏธ์ง๋ฅผ ์ ๋ฌํ๊ณ ์ถ๊ฑฐ๋, ๋ง์ฝ ์ํธ์์ฉ ๊ฐ๋ฅํ ์ค๋ธ์ ํธ์ธ ๊ฒฝ์ฐ ์ํธ์์ฉ์ ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ์. ํด๋น ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ์ข์๊น? ๋ฌผ์ฒด์ ๊ฒฝ์ฐ, ๊ฐ ๋ฌผ์ฒด์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ๋ ๊ฒฝ์ฐ๋ ์๊ฐํด ๋ณผ ์ ์๊ฒ ์ง๋ง, ๋ฐฐ์น๋๋ ๋ชจ๋ ์ค๋ธ์ ํธ๋ง๋ค ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ๋ก ์ค์ ํด์ผ ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ฌด ๋์ฐํ ๊ฒ์ด๋ค. ๋ฐ๋ฏธ์ง์ ๊ฒฝ์ฐ, ์ด์ ๋ง์ ์กํฐ๊ฐ ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ์ ์ ์๋์ง ์๋์ง๋ฅผ ์ด๋ป๊ฒ ํ๋ณํ๋ฉด ์ข์๊น? ์ฌ์ค Enemy ๋ง๊ณ ๋ ๋ถ์ ์ ์๋ ์ค๋ธ์ ํธ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ์์ผ ํ ํ ๋ฐ, ๊ฐ ํด๋์ค๋ง๋ค ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ๋์ง ์ ๋ฐ๋์ง๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋งค์ฐ ๊ท์ฐฎ์ ์ผ์ด๋ค. ์ธ๋ฆฌ์ผ์์๋ Does Implemen..
1์ธ์นญ ์์ ๊ตฌํํ๊ธฐ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ฆฌ์ผ์ ์ฒ์ ๋ฐฐ์ธ๋๋ ๋ค๋ค 3์ธ์นญ์ผ๋ก ์์ํ๋๋ฐ, 3์ธ์นญ์ FPS ์ ๊ฒฝ์ฐ ์์ ๊ณผ ๋์์ด ํจ๊ป ์์ง์ด์ง ์๋ ํน์ง์ด ์๋ค. ๋ฐ๋ผ์, ์์ ์ ๋ฐ๋ฅ์ ๋ฐ๋ผ๋ณด๋๋ฐ ํ์ ์ด์ ๋ ์ํ๋ก ์์ ํฅํ๊ณ ์๋ ๋ถ์์ฐ์ค๋ฌ์ด ์ํฉ์ด ์ฐ์ถ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ฐ, ๋ฐ๋ก FirstPersonBP (์์์ฉ ์ปจํ ์ธ ) ์ฒ๋ผ, ๊ธฐ๋ณธ์ผ๋ก ์ฃผ์ด์ง๋ Skeletal Mesh ๋ฅผ Clear ํ๊ณ , ์นด๋ฉ๋ผ์ ์์(Children)์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ Skeletal Mesh ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค. ์๋ง์ Skeletal Mesh ๋ฅผ ์ฐ๊ฒฐํ ๋ค์, ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ Animation Blueprint ๋ฅผ ์ ํ๋ง ํด์ฃผ๋ฉด, ์ ๋๋ฉ์ด์ ๋ ์ ์ฌ์๋ ๊ฒ์ด๋ค.
UFUNCTION ๊ณผ FORCEINLINE ์ผ๋ฐ์ ์ผ๋ก, UFUNCTION ๊ณผ FORCEINLINE ์ ํธํ๋์ง ์๋๋ค. ์ฐ๋ฆฌ๊ฐ UFUNCTION ์ ๋ถ์ด๋ ์ด์ ๋ ๋๊ฐ ๋ธ๋ฃจํ๋ฆฐํธ์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, C++ ์์ ์์ฑ๋ ์ฝ๋๋ฅผ BP ์์ ์ฝ์ด์ค๋ ค๋ฉด, FORCEINLINE ์ ๋ถ์ด์ง ์์์ผ ํ๋ค(Function call ์ ํํ์ด์ด์ผ ํจ). ๋ฐ๋ผ์ ์๋์ ๊ฐ์ ํจ์๋ ๋ธ๋ฃจํ๋ฆฐํธ์์ ์ธ์๋์ง ์๋๋ค. UFUNCTION(BlueprintCallable) FORCEINLINE void Foo() {}
GoF ์ ๋์์ธ ํจํด๊ณผ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋์์ธ ํจํด์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. Dependency Injection Principle (์์กด์ฑ ์ญ์ ์๋ฆฌ) ๋ถ๋ชจ - ์์ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ Relationship ํด๋์ค์ ๊ด๊ณ๋ฅผ ๊ฒ์ํ๋ Research ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์ง ๋ค๋ฉด ์ด๋จ๊น? #include #include #include #include using namespace std; // A. High-level modules should not depend on low-level modules. // Both should depend on abstractions. // B. Abstractions should not depend on details. // Deta..
GoF ์ ๋์์ธ ํจํด๊ณผ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋์์ธ ํจํด์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. Interface Segregation Principle (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น, ISP ๋ ๊ฐ ์ธํฐํ์ด์ค๊ฐ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋๋ง ์ง์ํด์ผ ํจ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ํ๋ฆฐํธ์ ์ค์บ๋ ๊ธฐ๋ฅ์ ํ๋ ๊ธฐ๊ณ๋ฅผ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ๋ค๊ณ ํ์. struct IMachine { virtual void print(Document& doc) = 0; virtual void fax(Document& doc) = 0; virtual void scan(Document& doc) = 0; }; struct MFP : IMachine { void print(Document& doc) override; void fax(..
GoF ์ ๋์์ธ ํจํด๊ณผ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋์์ธ ํจํด์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. Liskov Substitution Principle (๋ฆฌ์ค์ฝํ ์นํ ์์น) ๋ฆฌ์ค์ฝํ ์นํ ์์น (์ค์ฌ์ LSP) ๋, ๊ธฐ๋ฐ ํด๋์ค๊ฐ ์๊ณ ํ์ ํด๋์ค๊ฐ ์์๋, ๊ธฐ๋ฐ ํด๋์ค๊ฐ ๋ค์ด๊ฐ๋ ์๋ฆฌ์ ํ์ ํด๋์ค๊ฐ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋ฉฐ, ์ด๋ ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ๋ฃ์์๋์ ์๋๋๋ก ์ฝ๋๊ฐ ์ ๋์ํด์ผ ํจ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, Rectangle ํด๋์ค๋ฅผ ๊ธฐ๋ฐ ํด๋์ค๋ก ํ Square ํด๋์ค๋ฅผ ๋ณด์. process ๋ผ๋ ํจ์์์ ๋์ด๋ฅผ 10์ผ๋ก ๋ง๋ ํ, ๋์ด๋ฅผ ๋ฐํํ๊ณ ์๋ค. #include class Rectangle { protected: int width, height; public: Rectangle(const int ..
GoF ์ ๋์์ธ ํจํด๊ณผ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋์์ธ ํจํด์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. Open-Closed Principle (๊ฐ๋ฐฉ-ํ์ ์์น) OCP ๋ ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ํ์์ ์ธ ๋์์ธ ์์น์ ์๋ฏธํ๋ค. (Open for extension, Closed for modification) ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ Product ๋ฅผ ๋ถ๋ฅํด์ผ ํ๋ ์ฝ๋๋ฅผ ์ง ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์๊น๊ณผ ์ฌ์ด์ฆ ๋ฑ์ ๊ธฐ์ค์ผ๋ก ์ ํ์ ๋ถ๋ฅํ ๊ฒ์ด๋ค. struct Product { string name; Color color; Size size; }; ์ ๊ฒฝ์ฐ, enum class ์ functor ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์งค ์ ์์ ๊ฒ์ด๋ค. #include #include #include using n..