[์‹œ๋ฆฌ์ฆˆ] ์•„์ดํ…œ๊ณผ ๋ฌด๊ธฐ ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ๊ฐˆ์•„์—Ž์ž
ยท ์งฑ ์žฌ๋ฏธ์—†๋Š” ์•„์ดํ…œ ํด๋ž˜์Šค ๊ตฌ์กฐ ์„ค๊ณ„ํ•˜๊ธฐ


ใ…Žใ…‡


์ง€๋‚œ๋ฒˆ์—ย ์˜ฌ๋ ธ๋˜ ๊ธ€์—์„œ ๋Œ“๊ธ€๋กœ ์•„์ดํ…œ๊ณผ ๋ฌด๊ธฐ ํด๋ž˜์Šค ๋กœ์ง ๊ตฌํ˜„์€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ๊ฒŒ ๋‚ซ๋‹ค๊ณ  ์กฐ์–ธ๋“ค์„ ํ•ด์ค˜์„œ


์†”์งํžˆ ๋งํ•˜๋ฉด ์ฒ˜์Œ์—” ์†์œผ๋กœ '์•„๋‰œ๋ฐ ๋‚ด์ƒ๊ฐ์ด ์˜ณ์€๊ฑฐ ๊ฐ€ํŠผ๋’ˆ' ํ–ˆ์ง€๋งŒย 


๊ทธ๋ž˜๋„ ํ”„๋กœ๊ทธ๋žจ์„ย ๋งŒ๋“ค๋‹ค ๋ณด๋ฉดย ์ค‘๊ฐ„์ฏค ๊ฐ€์„œ ๋‚ด ์„ค๊ณ„๊ฐ€ ์•Œ๊ณ ๋ณด๋‹ˆ ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ๋œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋”๋ผ๊ตฌ์šฅ


๊ทธ๋ž˜์„œ ๋นˆ ์ฝ˜์†” ํ”„๋กœ์ ํŠธ(์—”์ง„๋„ ์—†๋Š”)์—๋‹ค๊ฐ€ ํ…์ŠคํŠธ ๊ฒŒ์ž„ ๋งŒ๋“ค๋“ฏ์ดย ํ•œ๋ฒˆ ๊ตฌํ˜„ํ•ด๋ณด๋ฉฐย ์„ค๊ณ„๋ฅผ ๊ณ ์ณ๋ณด์ž๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Œ


๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋‚ด๊ณ  ์‹œ์ž‘ํ•˜์ž๋ฉดย ์ฒ˜์Œ์— ์„ค๊ณ„ํ–ˆ๋˜ ๋ฐฉ๋ฒ•์€ ๋„ˆ๋ฌด ๊ณผ์„ค๊ณ„์˜€๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์ข€ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ–ˆ์Œ




1. ๊ฒŒ์ž„๊ณผ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์„ ๋ชจ์˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ์˜ ์•กํ„ฐ ํด๋ž˜์Šคย 


์ด๊ฑด ์„ค๊ณ„์— ํฌํ•จ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋Œ€์ถฉ ๋„˜์–ด๊ฐ€๊ฒ ์›Œ์š”


ํ•˜๋Š” ์ผ:


์•„์ดํ…œ๋“ค์„ ๋“ค๊ณ ์žˆ์Œ





์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ๋™ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌย ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•จ




์•กํ„ฐ์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ถ€์—๋Š” ๋ณ„๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์—†๊ณ , ๋‹จ์ง€ ํ‚ค ์ž…๋ ฅ์— ๋”ฐ๋ผ "ํ˜„์žฌ ์„ ํƒ๋œ ๋ฌด๊ธฐ"์˜ ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋ฟ์ž„





2. ์–ด๋นŒ๋ฆฌํ‹ฐ ์ปดํฌ๋„ŒํŠธ


์–ด๋นŒ๋ฆฌํ‹ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ด์ „ ๊ธ€์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ดย ๋ฌด๊ธฐ์˜ ๊ฐ์ข… ๋Šฅ๋ ฅ์น˜๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜,ย 

์ปค์Šคํ…€ํ•œ ์ดํŽ™ํŠธ๋‚˜ ์‚ฌ์šด๋“œ๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ํ•˜๊ธฐ ์œ„ํ•ด์„œย ์•„์ดํ…œ DB์— ๋…ธ์ถœ์‹œํ‚ค๋Š” ๋ถ€๋ถ„์ž„.


์•„์ดํ…œย DB์™€ / ์‹ค์ œ ๋ฌด๊ธฐ์˜ ๋กœ์ง์ด ๋‹ด๊ธด ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๋˜‘๊ฐ™์€ ๋กœ์ง์„ ๊ฐ€์ง„ ๋ฌด๊ธฐ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐย ์œ„ํ•œ ๊ฑด๋ฐ


์–ธ๋ฆฌ์–ผ์—์„œ ์ง€์›ํ•˜๋Š”ย "์†Œํ”„ํŠธ ํด๋ž˜์Šค ๊ฒฝ๋กœ" ํƒ€์ž…์œผ๋กœ DB์—์„œ ์„ ํƒํ•œย ํด๋ž˜์Šค๋ฅผ ๋Ÿฐํƒ€์ž„์— ์ฝ์–ด์„œย ์Šคํฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ


์•„๋ž˜์ฒ˜๋Ÿผ "์†Œํ”„ํŠธ ํด๋ž˜์Šค ๊ฒฝ๋กœ" + "string:string ๋งต"์„ ํ•„๋“œ์— ๋„ฃ์œผ๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผย ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

(์ง„์งœ๋กœ ๋˜๋Š”์ง€๋Š” ์•„์ง ํ™•์ธ ์•ˆํ•ด๋ณด๊ธด ํ•จ.. ์ƒ๊ฐ๋‚œ ๊น€์— ๋‚ด์ผ์€ ์ด๊ฑฐ ํ•ด๋ด์•ผ ํ• ๋“ฏ)



(ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ์ด ๋ถ€๋ถ„๋งŒ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ๋ณธ ๊ฒƒ, "AKMTEST" ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์•„์ดํ…œ์„ ๋งŒ๋“  ์˜ˆ์‹œ)




๋‹ค์‹œ ํ”„๋กœํ† ํƒ€์ž… ์ฝ”๋“œ๋กœ ๋Œ์•„์™€์„œ


๋ชจ๋“  ๋ฌด๊ธฐ์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ํด๋ž˜์Šค์ธ WeaponBase๋ฅผ ๋งŒ๋“ค๊ณ 


๋ฌด๊ธฐ๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ๋“ค์ด๋ž‘ ๋”๋ถˆ์–ด์„œ, ์•กํ„ฐ๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œย ํ˜ธ์ถœ๋˜๋Š” OnFire, OnReload ๋”ฐ์œ„ ํ•จ์ˆ˜๋“ค์˜ ์›ํ˜•์„ ์„ ์–ธํ•ด๋‘ 




๊ทธ๋ฆฌ๊ณ  ์–ด๋นŒ๋ฆฌํ‹ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด WeaponBase ํด๋ž˜์Šค์— ๋ถ™๋„๋ก ๊ตฌํ˜„ํ•จ


๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๊ณต๊ฒฉ๋ ฅ, ์žฅํƒ„์ˆ˜, ๋ฐ˜๋™๊ณผ ๊ฐ™์€ ์†์„ฑ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ์œ„์— ๋ณด์ด๋Š”ย ๋”•์…”๋„ˆ๋ฆฌ์— Key(์†์„ฑ๋ช…)-Value(๊ฐ’ ํด๋ž˜์Šค) ํ˜•ํƒœ๋กœ ๋“ค์–ด ์žˆ๋Š” ๊ฒƒ





์–ด๋นŒ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ์ž์ฒด๋Š” ๋ณต์žกํ•  ๊ฒƒ ์—†์ดย int, float, string๊ฐ™์€ย ๊ฐ’ ํ•˜๋‚˜๋งŒ ๊ฐ–๊ณ  ์žˆ๋„๋ก ํ•˜๊ณ 


AbilityComponentBase์—์„œย "๋ฌธ์ž์—ด์„ ๋ฐ›์•„์„œ ๊ฐ’์„ ์ดˆ๊ธฐํ™”์‹œํ‚ค๋Š” ๊ฐ€์ƒ ํ•จ์ˆ˜"๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•จ.






๊ทธ๋ฆฌ๊ณ  WeaponBase๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ย ์‹ค์ œ ๋ฌด๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š”ย ์ด๋Ÿฐ์‹์œผ๋กœ ์–ด๋นŒ๋ฆฌํ‹ฐ๋ฅผ ์ƒ์„ฑํ•จ


์œ„ ์˜ˆ์‹œ์—์„œ๋Š” Init ํ•จ์ˆ˜์—์„œ ์–ด๋นŒ๋ฆฌํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ ๋‚ด๋ถ€์— ์บ์‹ฑํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ,


์ดˆ๊ธฐํ™”๋ฅผ ์–ด๋А ๋‹จ๊ณ„๋‚˜ย ์–ด๋А ํด๋ž˜์Šค์—์„œ ์ฃผ๋„ํ•ด์„œ ์‹œํ‚ฌ์ง€๋Š” ์•„์ง ํ™•์ •ํ•˜์ง€ ๋ชปํ–ˆ์Œ.ย 


๋ฌด๊ธฐ ํด๋ž˜์Šค์—์„œ ์œ„์ฒ˜๋Ÿผย ์ƒ์„ฑ์„ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด์„œ,ย ํ…Œ์ด๋ธ”์—์„œย Stat์„ ์ฝ์–ด์˜ค๋Š” ๋‹จ๊ณ„์—์„œ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ณ 


ํ›„์ˆ ํ•  Behaviour ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ WeaponBase๋ฅผ ํ˜ธ์ถœํ•ด์„œย ์ƒ์„ฑ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Œ.


์ด๊ฑด ์ฒ˜์Œ์— ์ข€ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ฐ€ ์˜ค๋Š˜ ๊ณ ์นœ ๊ฑฐ๋ผ์„œ ๋น„ํšจ์œจ์ ์ด๊ฑฐ๋‚˜ ํ•œ ๋ถ€๋ถ„์ด ๋‚จ์•„์žˆ๋Š”๋ฐ ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ์— ๋„ฃ์„ ๋• ์ข€ ๋” ๋‹ค๋“ฌ์–ด์„œ ๋„ฃ์„ ๋“ฏ



3. ๋น„ํ—ค์ด๋น„์–ด ์ปดํฌ๋„ŒํŠธ


์ฒ˜์Œ ์„ค๊ณ„ํ•  ๋•Œ๋Š” ๋น„ํ—ค์ด๋น„์–ด ๋ง๊ณ ๋„ ๋น„ํ—ค์ด๋น„์–ด์˜ ๋™์ž‘ ์—ฌ๋ถ€๋ฅผย ๊ฒฐ์ •ํ•˜๋Š” ExecuteCondition ์ปดํฌ๋„ŒํŠธ๋„ ๊ณ ๋ คํ–ˆ์—ˆ์ง€๋งŒ


์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด๋‹ˆ ๊ตณ์ด ์“ธ๋ฐ์—†์ด ๋ณต์žกํ•˜๊ธฐ๋งŒ ํ•˜๊ณ  ๋ณ„ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒฐ๋ก ์— ์ด๋ฅด๋ €์Œ


์™œ๋ƒ๋ฉด ์–ด์ฐจํ”ผ ์–‘์‚ฌ ์—”์ง„์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค๋„ ๋‚ด๋ถ€์ ์ธ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ์•Œ์•„์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด๊ณ 


๋ฌด๊ธฐ ๋Šฅ๋ ฅ์น˜์•ผ ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œ์ผœ์•ผ ๋˜๋‹ˆ๊น ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ๊น”๋”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ


๋ฌด์Šจ "์ด์•Œ์ด ์ถฉ๋ถ„ํ•œ์ง€?" ๊ฐ™์€ ์กฐ๊ฑดํ•จ์ˆ˜๋ฅผย ์—ฌ๊ธฐ์ €๊ธฐ์„œ ์จ ๋ด์•ผ ์–ผ๋งˆ๋‚˜ ์“ฐ๊ฒ ๋‹ค๊ณ  ๊ทธ๊ฑธ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜๋ ค ํ–ˆ๋‚˜ ์‹ถ์Œ


๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์€ Condition์„ ์—†์• ๊ณ , "ํƒ„์•ฝ" ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๋†ˆ์ด ํƒ„์•ฝ์ด๋ž‘ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ๋“ค์„ ๋‹ค ๋งก์•„์„œ ํ•˜๊ณ ย 


๊ทธ ๊ธฐ๋Šฅ๋“ค์„ ์ด์šฉํ•ด์„œ ๋ฌด๊ธฐ ํด๋ž˜์Šค์—์„œ ์‹คํ–‰์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Œย 



์•„๋ฌดํŠผ ์—ฌ๊ธฐ์„œ๋Š”

ย 


๋น„ํ—ค์ด๋น„์–ด ์ปดํฌ๋„ŒํŠธ ์›ํ˜•์„ ๋งŒ๋“ค๊ณ  (๋ฌด๊ธฐ ํด๋ž˜์Šค์— ๋ถ™์€ ์ฑ„๋กœย ์ด๋Ÿฐ์ €๋Ÿฐ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ฐ›์Œ)





์ด๋ ‡๊ฒŒ "Ammo"์™€ ๊ด€๋ จ๋œ ์กฐ๊ฑดย ํ•จ์ˆ˜๋‚˜ ์žฌ์žฅ์ „ ๊ฐ™์€ ๊ธฐ๋Šฅ ํ•จ์ˆ˜๋“ค์„ ๋งŒ๋“ค์—ˆ์Œ







๋งˆ์ง€๋ง‰์œผ๋กœ ๋น„ํ—ค์ด๋น„์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌด๊ธฐ ํด๋ž˜์Šค์˜ "์‚ฌ๊ฒฉ"๊ณผ "์žฅ์ „" ๋™์ž‘์„ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ์ž„






์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ๋‹ค ์“ดย ๊ฒƒ ๊ฐ™๋‹ค


์œ„ ์˜์ƒ์ด ์ด๋ฒˆ์— ๋งŒ๋“  ์ฝ”๋“œ์˜ย ๋™์ž‘๊ฒฐ๊ณผ์ž„


๋ณ„๋กœ ๋Œ€๋‹จํ•œ ๊ฒƒ๋„ ์—†์ง€๋งŒ ํ˜น์‹œ๋‚˜ ๋„์›€์ด ๋ ๊นŒ? ํ•ด์„œ ๊นƒํ—ˆ๋ธŒ์—๋‹ค ์ผ๋‹จ ์˜ฌ๋ ค๋’€์œผ๋‹ˆ ๋ณผ์‚ฌ๋žŒ์€ ๋ณด์…ˆ


https://github.com/Jaygan-s/ComponentBasedItem



์†Œ๋ชจ์„ฑ/๋ฐœ๋™ํ˜• ์•„์ดํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š”ย ๋ถ€๋ถ„์€ ์—ฌ๊ธฐ์„œ ์•ˆ ๋‹ค๋ค˜์ง€๋งŒย 


์–ด์ฐจํ”ผ ์ด ๋ฐฉ์‹์ด๋ž‘ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง„ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์„œ (๊ทธ๋ž˜๋„ ๋ฌด๊ธฐ ๋กœ์ง์ด๋ž‘์€ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ ๋งž๋Š”๋“ฏํ•จ)


๋‹ค์Œ์—” ์‹ค์ œ ๊ฒŒ์ž„์— ํ•œ๋ฒˆ ์ ์šฉํ•ด๋ณด๋ ค๊ณ  ํ•จ


์ด๊ฒƒ์ €๊ฒƒ ์ผ์ •์ด ์ข€ ์žˆ์–ด์„œ ์ข€ ๊ฑธ๋ฆด๋“ฏํ•œ๋ฐ ์•”ํŠผ ๊ฒฐ๊ณผ๋ฌผ ๋‚˜์˜ค๋ฉด ๋“ค๊ณ ์™€ ๋ณผ๊ฒŒ์œ ~