์ง๋ฌธย
==> ์คํฌ๋ฆฝํฐ๋ธ์ค๋ธ์ ํธ ๊ทธ๋ฅ ๊ทธ๋๋ก ์ฐ๋ ๊ฒ์ด ์๋๋ผ. ์ด๊ฑธ ์ด์ฉํด์ ์ธ์คํด์ค ๋ฐ๋ก ๋ง๋ค์ด์ ์ฐ๋๊ฒ ๋ ๊น?
๊ฒ์ ๋์๊ฐ๋ฉด์ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ์ ๋ด๊ฐ ๋ง๋ค์ด๋์ ๋ฐ์ดํฐ์ ๊ฐ์ด ์๋ค๊ณ ์น๋ฉด
์๋ฅผ ๋ค์ด์ ๋ชฌ์คํฐ๋ผ๊ณ ์น๋ฉด
name=์ข๋น
hp = 100
///
๋ด๊ฐ ์ด๊ฑธ MonsterData : ScriptableObject๋ก ๋ง๋ค์๋ค๊ณ ๊ฐ์ ํ๋ฉด.ย
์ด๊ฑธ ๊ทธ๋ฅ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๋ชฌ์คํฐ๊ฐ 100๋ง๋ง๋ฆฌ๊ฐ ์์ด๋ ํฐ ์๊ด์ ์๋๋ฐ
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๊ฒ ๋ชฌ์คํฐ๊ฐ ์ฒด๋ ฅ์ด 0์ด๋๋ฉด ์ฃฝ๊ฒ ํด์ผ๋ง ํ์์?
๊ทธ๋ฐ๋ฐ 1๋ฒ ์ข๋น๊ฐ ์ฒด๋ ฅ์ด 100์์ 50์ด ๋๋ค๊ณ ย
๊ทธ๋ฅ ํด๋น MonsterData๋ฅผ ๊ฐ์ง๊ณ ์ฌ๊ธฐ๋ค๊ฐ ์ฒด๋ ฅ 100->50์ผ๋ก ๋ฐ๊พธ๋ฉด
100๋ง๋ง๋ฆฌ ๋ชฌ์คํฐ์ ์ฒด๋ ฅ์ด ์ ๋ถ ๋ค ๋ฐ๋์์?
๊ทธ๋ฌ๋๊น ์ข๋น๋ฅผ 100๋ง๋ง๋ฆฌ ๋ง๋ค ๋ย
public Monster(MonsterData _monData)
์ด๋ฐ ์์ผ๋ก ๋ชฌ์คํฐ ๋ฐ์ดํฐ ์ด์ฉํด์ ์ง์ ์ธ์คํด์ค ๋ฐ๋ก ๋ง๋ค์ด์ผํ์ง?
------
๊ทธ๋์ SriptableObject๊ฐ ํจ์จ๋ฉด์์ ์ข๋ค๊ณ ํ๋๋ฐย
์ด ๊ฐ์ ๋ณ๊ฒฝ์ด ์ ๋๋ ๊ฐ๋ค(๋ชฌ์คํฐ์ ํ์ฌ ์ฒด๋ ฅ์ด ์๋๋ผ ์ต๋์ฒด๋ ฅ๊ฐ์) ๊ฒ๋ค๋ง SO๋ก ๋นผ์ ์ฐ๋ ๊ฑฐ๊ณ ?
๋ง์ฝ์ ๋ชฌ์คํฐ ์ด๋์๋๊ฐ 100์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด
MonsterData
- Speed = 100 ๋ฃ์ด๋๊ณ .ย
๊ฐ์ ธ๋ค ์ฐ๋ค๊ฐ ๋ง์ฝ์ ๋ด๊ฐ ๋ชฌ์คํฐ ์ด์ ์ฆ๊ฐํ๋ ์ด๋ค ๋ฒํ(?)๋ฅผ ๋ง๋ค์ด์ 20% ์ฆ๊ฐ(๊ทธ๋ฌ๋๊น 20์ด ์ฆ๊ฐํ๊ฒ ์ง๋ง) ํ๋ ๊ฒฝ์ฐ์
MonsterData์ Speed ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผย
Monster ๊ฐ์ฒด ์์ ํจ์ GetSpeed()์ด๋ฐ๊ฑธ ๋ง๋ค์ด์
int GetSpeed()
{
MonsterData.speed(100์ด๊ฒ ์ง)*1.2 ์ด๋ฐ ์์ผ๋ก ํ๋ ๋ฐฉ์์ผ๋ก ์ฐ์ด๋๊ฒ ๋ง์ง?
}
/////////
์ด๋ฐ ์ผ์ ๋ฐฉ์งํ๋ ค๋ฉด SO๋ง๋ค ๋ ์ธ์คํํฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์์?
readonly๋ก๋ง ํด๋์ ์ข ์ค์ ์ํ๊ณ ์ถ์๋ฐ
์ด๋ฐ ๋ฐฉ์์ ์ด๋ป๊ฒ ํ ์ ์์??
๊ทธ๋ฅ ์ด๋ฐ ์์ผ๋ก
MonsterData
{
ย ย [serialized field] private int speed;
ย ย public int GetSpeed
{
return speed;
}
}
์ด๋ฐ ์์ผ๋ก ๋ณ์์ ์ ๊ทผ ๋ชปํ๊ฒ ๋ง๊ณ ๊ทธ๋ฅ getter/setter๋ ํ์ฌ๊ฐ ์ ๊ทผ ํ ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ฐฉ๋ฒ๋ง์ด ์๋๊ฑด๊ฐ?
์ง๋ฌธ์ด ์ข ๋์กํด์ ๋ฏธ์!
์๋ ์ ๋ฐ ๋ฐฉ์์ด ์ ์์ธ๊ฐ?
ScriptableObject๋ CSV๋ฐ์ดํฐ๋ Json๋ฐ์ดํฐ๋ ๊ฐ์, ์ ์ ์ธ ๋ฐ์ดํฐ(static)์ ๋ฌด์ ๊ถ ์คํ์ค(runtime)์๋ ๊ฑด๋๋ฆฌ์ง ๋ง๊ณ ์ฐธ์กฐ๋ง ํ๋ค๋ ๊ตฌ์กฐ๋ก ์ง๋๊ฒ ํธํจ. ๋๊ฐ ์์ค๋ฅผ ๋ ๋ชฌ์คํฐhp๊ฐ์ ๊ฒฝ์ฐ ๊ทธ๋ฅ hp๊ฐ ์๋๋ผ ์ต๋hp,ํน์ ์์hp๋ผ๋ ๊ฒ์ด๊ณ . ๊ฒ์์คํ๋๋ public RuntimeMoster(MonsterData data) ์์ฑ์๋ก RuntimeMonster๋ฅผ ์์ฑํ๋ฉด์ RuntimeMonster์์๋ currentHP = data.maxHP;๋ก ์์ํ๊ณ currentHP๋ก ๊ฒ์๋ด๋ด ๊น๋ ๋๋ฆฌ๋ ํ๋ฉด ๋ ๊ฑฐ์. ๋ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ๋ค์ Data๋ผ๊ณ ๋ถ์ด๊ณ , ์คํ๋์์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ Runtime์ ๋ถ์.
์ด๋ฆ ์ง๋ ๊ฒ๋ ๊ฝค ๊ฟํ์ธ๋ฏ ๊ฐ์ฌ. ํด์ผํ ์ผ์ด ์๊ฒผ๋ค!
๋๋ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ ์ฌ์ฉํ๋ ค๊ณ ๊ฒ์ํด๋ดค๋๋ ์์๋ค์ด ๋๋ถ๋ถ ์ ํ์ ์ ๋ฐ๋ผ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด์ ํ์ ๋ณ๋ก ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ๋ฅผ ์ฐธ์กฐ์ํค๋ฉด ๋๋ค์์. ๊ทผ๋ฐ ์ด๊ฑด ์์๊ฐ ์๋ชป๋๊ฒ ๊ฐ๊ณ ์๋๋ง๋๋ก csv๋ json์ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉํ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํจ. ์์๊ฐ ๊ฐ ๊ฐ์ฒด์์ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ๋ฅผ ์ฐธ์กฐํ๋ค๊ฐ ์๋๋ผ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํด ๊ฐ๋จํ๊ฒ ์ด๊ธฐํํ ์ ์๋ค ๋ผ๋ ๋๋์ผ๋ก ๋ฐ๊ปด์ผํ ๋ฏ ํ๊ณ ์ฐจ๋ผ๋ฆฌ ๋ ์ข์ ์์๋ ์ฒด๋ ฅ์ฒ๋ผ ๋ณ๋์๋ ๊ฐ์ด ์๋ ๋ณ๋์ด ์๋ ๊ฐ ์์ ์์ ์์ดํ ๋ชฉ๋ก ๋ฐ ์์ดํ ์ ๊ฐ๊ฒฉ ๋ฑ์ ํํํ๋๋ฐ์ ์ข๋ค ์๋๊น ์ถ์
์คํฌ๋ฆฝํฐ๋ธ์ ๊ฐ์ด ๋ณํ์ง ์๋ ๊ฐ์ ์ฌ์ฉํ ๋ ์๋ฏธ๊ฐ ์์. ํ๋์ ๋ณ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ์ฐธ์กฐํ๋๊น ๊ทธ๋งํผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ปด์ง. ์ธ์คํด์ค๋ง๋ค ๋ค ๋ฌ๋ผ๋ดํ๋ค๋ฉด(๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ธ์คํด์ค ๋ง๋ค ์จ์ผํ๋ค๋ฉด) ๊ตณ์ด ์ธ์ด์ ๊ฐ ๋ญ ์์ด.