Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก2022/06 (11)

KoreanFoodie's Study

[์–ธ๋ฆฌ์–ผ] Widget ๋ฐ์ดํ„ฐ์™€ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ์—ฐ๋™(bind) ํ•˜๊ธฐ

Widget ์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ์™€ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์—ฐ๋™ (bind) ํ•˜๊ธฐ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•˜๋‹ค ๋ณด๋ฉด ์•„์ดํ…œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์„ค๋ช… ์ฐฝ์ด ๋œจ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์‚ฌ์‹ค ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์œ„์ ฏ(์ฐฝ)์€ ๋˜‘๊ฐ™์ด ์ƒ๊ฒผ์ง€๋งŒ, ๋‚ด์šฉ๋ฌผ์€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ... ์œ„์ ฏ์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ๊ณผ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์—ฐ๋™ํ•˜๋ฉด ์œ„์ ฏ์˜ ๋‚ด์šฉ์„ ์•„์ดํ…œ์— ๋งž๊ฒŒ ๋„์›Œ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ์ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž. 1. ๋จผ์ € Widget Blueprint ๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด์šฉ๋ฌผ์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ฑ„์›Œ๋„ฃ๋Š”๋‹ค. 2. ํ•ด๋‹น ์œ„์ ฏ์„ ๋„์šธ ํด๋ž˜์Šค์—์„œ ์œ„์ ฏ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ , ์ด๋ฅผ ๋„ฃ์–ด ์ค€๋‹ค. item.h /* Popup widget for when the players look at the item */ UPROPERTY(EditAnywhere..

Game Dev/Unreal C++ : Dev Log 2022. 6. 23. 22:26
[์–ธ๋ฆฌ์–ผ] ํ—ค๋“œ์ƒท ๊ตฌํ˜„ํ•˜๊ธฐ (๋ถ€์œ„๋ณ„ ํ”ผ๊ฒฉ ๋ฐ๋ฏธ์ง€ ์„ค์ •)

ํ—ค๋“œ์ƒท ๊ตฌํ˜„ํ•˜๊ธฐ (๋ถ€์œ„๋ณ„ ํ”ผ๊ฒฉ ๋ฐ๋ฏธ์ง€ ์„ค์ •) FPS ๊ฒŒ์ž„์„ ํ•˜๋‹ค๋ณด๋ฉด ํ—ค๋“œ์ƒท์— ์ถ”๊ฐ€ ๋ฐ๋ฏธ์ง€ (ํ˜น์€ ์ฆ‰์‚ฌ) ๋ฅผ ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋ ๊นŒ? ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ๋Š”, ์ผ๋‹จ ์ด์•Œ์„ ๋งž์€ Enemy ํด๋ž˜์Šค ๋‚ด Skeletal Mesh ์˜ Bone Name ์„ ์ฐธ๊ณ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์Šค์ผˆ๋ ˆํ†ค ํŠธ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด head ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ ๋ฐ๋ฏธ์ง€๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค. AEnemy* HitEnemy = Cast(BeamHitResult.Actor.Get()); if (HitEnemy) { if (BeamHitResult.BoneName.ToString() == HitEnemy->GetHeadBone()) { // Head shot } else {..

Game Dev/Unreal C++ : Dev Log 2022. 6. 22. 13:28
[์–ธ๋ฆฌ์–ผ] ์–ธ๋ฆฌ์–ผ ์ธํ„ฐํŽ˜์ด์Šค - Does Implement Interface ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ๋ฏธ์ง€, ์ธํ„ฐ๋ž™์…˜ ๊ตฌํ˜„ํ•˜๊ธฐ

Does Implement Interface ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ๋ฏธ์ง€, ์ธํ„ฐ๋ž™์…˜ ๊ตฌํ˜„ํ•˜๊ธฐ ์ด์„ ์˜์•˜์„๋•Œ, ๋งž์€ ๋Œ€์ƒ์ด Enemy ์ด๋ฉด ๋ฐ๋ฏธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ๊ฑฐ๋‚˜, ๋งŒ์•ฝ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ์˜ค๋ธŒ์ ํŠธ์ธ ๊ฒฝ์šฐ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹์„๊นŒ? ๋ฌผ์ฒด์˜ ๊ฒฝ์šฐ, ๊ฐ ๋ฌผ์ฒด์— ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‹ฌ๋Š” ๊ฒฝ์šฐ๋„ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋ฐฐ์น˜๋˜๋Š” ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋งˆ๋‹ค ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด์•ผ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋„ˆ๋ฌด ๋”์ฐํ•  ๊ฒƒ์ด๋‹ค. ๋ฐ๋ฏธ์ง€์˜ ๊ฒฝ์šฐ, ์ด์— ๋งž์€ ์•กํ„ฐ๊ฐ€ ๋ฐ๋ฏธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ํŒ๋ณ„ํ•˜๋ฉด ์ข‹์„๊นŒ? ์‚ฌ์‹ค Enemy ๋ง๊ณ ๋„ ๋ถ€์ˆ  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์•ผ ํ• ํ…๋ฐ, ๊ฐ ํด๋ž˜์Šค๋งˆ๋‹ค ๋ฐ๋ฏธ์ง€๋ฅผ ๋ฐ›๋Š”์ง€ ์•ˆ ๋ฐ›๋Š”์ง€๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ท€์ฐฎ์€ ์ผ์ด๋‹ค. ์–ธ๋ฆฌ์–ผ์—์„œ๋Š” Does Implemen..

Game Dev/Unreal C++ : Dev Log 2022. 6. 22. 09:48
[์–ธ๋ฆฌ์–ผ] 1์ธ์นญ ์‹œ์  ๊ตฌํ˜„ํ•˜๊ธฐ (์นด๋ฉ”๋ผ์™€ ๋ฉ”์‹œ ์—ฐ๋™)

1์ธ์นญ ์‹œ์  ๊ตฌํ˜„ํ•˜๊ธฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์–ธ๋ฆฌ์–ผ์„ ์ฒ˜์Œ ๋ฐฐ์šธ๋•Œ๋Š” ๋‹ค๋“ค 3์ธ์นญ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”๋ฐ, 3์ธ์นญ์˜ FPS ์˜ ๊ฒฝ์šฐ ์‹œ์ ๊ณผ ๋™์ž‘์ด ํ•จ๊ป˜ ์›€์ง์ด์ง€ ์•Š๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์‹œ์ ์€ ๋ฐ”๋‹ฅ์„ ๋ฐ”๋ผ๋ณด๋Š”๋ฐ ํŒ”์€ ์ด์„ ๋“  ์ƒํƒœ๋กœ ์•ž์„ ํ–ฅํ•˜๊ณ  ์žˆ๋Š” ๋ถ€์ž์—ฐ์Šค๋Ÿฌ์šด ์ƒํ™ฉ์ด ์—ฐ์ถœ๋œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•œ๋ฐ, ๋ฐ”๋กœ FirstPersonBP (์‹œ์ž‘์šฉ ์ปจํ…์ธ ) ์ฒ˜๋Ÿผ, ๊ธฐ๋ณธ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” Skeletal Mesh ๋ฅผ Clear ํ•˜๊ณ , ์นด๋ฉ”๋ผ์˜ ์ž์‹(Children)์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” Skeletal Mesh ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•Œ๋งž์€ Skeletal Mesh ๋ฅผ ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ, ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ Animation Blueprint ๋ฅผ ์„ ํƒ๋งŒ ํ•ด์ฃผ๋ฉด, ์• ๋‹ˆ๋ฉ”์ด์…˜๋„ ์ž˜ ์žฌ์ƒ๋  ๊ฒƒ์ด๋‹ค.

Game Dev/Unreal C++ : Dev Log 2022. 6. 22. 09:17
๋””์ž์ธ ํŒจํ„ด (GOF) #3 - Liskov Substitution Principle (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)

GoF ์˜ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Liskov Substitution Principle (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™) ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (์ค„์—ฌ์„œ LSP) ๋ž€, ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ณ  ํŒŒ์ƒ ํด๋ž˜์Šค๊ฐ€ ์žˆ์„๋•Œ, ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์ž๋ฆฌ์— ํŒŒ์ƒ ํด๋ž˜์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋•Œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์—ˆ์„๋•Œ์˜ ์˜๋„๋Œ€๋กœ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Rectangle ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋กœ ํ•œ Square ํด๋ž˜์Šค๋ฅผ ๋ณด์ž. process ๋ผ๋Š” ํ•จ์ˆ˜์—์„œ ๋†’์ด๋ฅผ 10์œผ๋กœ ๋งŒ๋“  ํ›„, ๋„“์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค. #include class Rectangle { protected: int width, height; public: Rectangle(const int ..

Game Dev/Design Patterns 2022. 6. 7. 16:50
๋””์ž์ธ ํŒจํ„ด (GOF) #2 - Open-Closed Principle (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)

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..

Game Dev/Design Patterns 2022. 6. 7. 16:30