์ด๊ฑฐ ๋๋ฌด ์ด๋ ค์;;
์ผ๋จ ๊ตฌ๊ธ๋งํ๋ฉด์ ๊ธฐ๋ณธ๊ฐ๋
์ ์๊ฒ ๋๋ฐ
์์ ์ฝ๋ ๋ฐ๋ผํ๋ฉด์ ์ ๋ ๊ฒ ๋ง๋ค๊ธฐ๋ ํ๋๋ฐ
์ด๋ป๊ฒ ์จ๋จน์ด์ผํ ์ง๋ ์์ง ๊ฐ์ด์์ด
๊ทธ๋ฅ Console.WriteLine ์จ๋์๋ฐ์
์ฝ๋ฉํ๋ฉด๋๋๊ฑฐ์?
๋จธ๋ฆฌ๋๋น ์ ๊ณ ์์ด๋ค ์ง์ง;;
์ฝ๊ฐ๋ง๊ณ ์ฝ๊ฐ ํ๋ฆผ, ๋์ด์์ ๋ญ๋ค์์ด ๋ด๊ฐ ์ ๋ ์์์ํค์ง ๋ง๋ผํ์์, ์ ๋์ ๊ทธ๋๋ก ๋ฌ ๊ทธ๋ค์ Attack์ด๋ Move ์์์์ผฐ์ง? Unit์ด ๊ฐ๋ Attack๊ณผ Move๋ฅผ ์์ํด๋์ค๋ก ๊ฐ์ ๋ผ์์ "์กฐ.๋ฆฝ" ํ๋๊ฒ ์คํธ๋ ์ดํธ์ง ํจํด์ด์ผ ์กฐ๋ฆฝ ๋๊ฐ ํด๋์ค๋ก ์ง์ ๋ง๋ฒ์ฌ ๊ธฐ์ฌ๋ฅผ ๋ง๋๋๊ฒ ์๋๋ผ ๊ธฐ์ฌ ๋ง๋ฒ์ฌ ๊ตฌ๋ถ์ ๊ทธ๋ฅ string ์ง์ ์ด๋ฆ ๋ณ์๋ฅผ Unit์ด ๊ฐ๊ฒ ํ๊ณ ๋๊ฐ ์์๋ก ์ธํ ์ ํด
Unit Knight; Knight.ClassName = "Knight" Knight.Attackable = new MeleeSlashAttack(); Knight.Moveable = new RushMove(); Unit Archer; Archer.ClassName = "Archer" Archer.Attackable = new ShootingAttack(); Archer.Moveable = new DashMove();
๊ทธ๋ผ ์ด๊ฑธ ์ ๋ํฐ ์ค์ ์์ ์ด๋ป๊ฒ ์จ๋จน๋, Unit.SetUnit(string className); ์ด๊ธฐํ ํจ์๋ฅผ ๋ง๋ค์ด ๊ทธ๋ค์ ๋ฐ์ดํฐ ํ ์ด๋ธ์ ๋ง๋ค๊ณ className์ด ๋ฐ์ดํฐ ํ ์ด๋ธ์ ์กด์ฌํ๋ ์ด๋ฆ์ด๋ฉด Attack์ด๋ Move, ๊ทธ๋ฆฌ๊ณ ๋ณด๋์ค๋ก ๊ฐ์ ๊ฐ์ง ์คํ ๊น์ง "๊ฐ์ ธ์์" Set ํด์ฃผ๋๊ฑฐ์. ์ด๊ฒ ์ ์์ด์ผ
๋ฌธ์ ๋ Attack๊ณผ Move ๋์ ํ ๋น์ ์ํ ํด๋์ค์ ํํ์ธ๋ฐ ์ธ๋ฆฌ์ผ์ TSubClass๋ผ๊ณ ์๋ฃํ ์์ฒด๋ฅผ ๋ด์์ฃผ๋ ๋ณ์๊ฐ ์์ง๋ง ์ ๋ํฐ๋ ์์. ๊ทธ๋์ ์ ๋ํฐ์์๋ ๋ฐ์ดํฐ ํ ์ด๋ธ์ ScriptableObject๋ก ๋ง๋ ๋ค ๊ฐ์ ํ์๋ Attack๊ณผ Move๋ ScriptableObject ์์์ผ๋ก ๋ง๋๋๊ฑฐ์ผ ๋จ์ผ ์์์ ํ์์ผ๋๊น AttackMove์ Base๋ I์ธํฐํ์ด์ค๋ก ๊ตฌํํ๋๊ฑฐ๊ณ . ๋ฐ์ดํฐ ํ ์ด๋ธ์์ ScriptableObject๋ก ํํ๋ AttackMove๋ฅผ ๋๋๊ทธ๋ก ์ธํ ํด์ฃผ๊ณ SetUnitํจ์์์ ํด๋น ScriptableObject๋ฅผ Instantiate ์์ผ์ Unit์ Attack/Move์ ๋ฐ์๋ฒ๋ฆฌ๋ฉด ๋ก์ด์ง