์Šคํ‚ฌ์ชฝ์„ ๋ฆฌํŒฉํ† ๋งํ–ˆ์–ด์š”


๋จผ์ € UI_Skill์— Static์œผ๋กœ ๋ฐ›์•„์˜ค๋˜ ๊ผด๋ณด๊ธฐ ์‹ซ์€ Player๋ฅผ ์ง€์šฐ๊ณ  BattleManager๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์•ˆ์— ์žˆ๋Š” nowPlayer๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ์–ด์š”


์ €๋ฒˆ์—๋Š” ๊ทธ์ € ์Šคํ‚ฌ ์•„์ด์ฝ˜, ์„ค๋ช…, ๋‚จ์€ PP๋งŒ์„ ๊ฐ€์ง€๊ณ  ์™”์ง€๋งŒ, ์Šคํ‚ฌ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋Š” ์ด๊ฒŒ ๋์ด ์•„๋‹ˆ๊ธฐ์—(์•„์ด์ฝ˜, ์ด๋ฆ„, ์„ค๋ช…, PP, MaxPP, ํƒ€๊ฒŸ(enum)ย (์ „์ฒด์ธ์ง€, ํ•˜๋‚˜์ธ์ง€, ์ ์ธ์ง€, ์•„๊ตฐ์ธ์ง€), ์—ฐ,๋‹จํƒ€ ๊ตฌ๋ถ„, ํƒ€์ž…(enum) (๊ณต๊ฒฉ์ธ์ง€, ๋””๋ฒ„ํ”„์ธ์ง€, ๋ฒ„ํ”„์ธ์ง€, ๋ฐฉ์–ด์ธ์ง€), ๋ฐ๋ฏธ์ง€ ๋ฐฐ์œจ ๋“ฑ) ์ด๊ฑฐ๋ฅผ ๋ญฃ๋„ ์•„๋‹Œ Icon์— ๋•Œ๋ ค๋ฐ•๊ณ , ๋‹ค์‹œ BattleManager์— ์ด์ฃผ๊ธฐ๋Š” ๋ฏธ์นœ ์ง“ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ Skill Class๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์–ด์š”


์ „์— ๋ฐฐ์› ๋˜ Json์— ๋„ฃ์–ด์„œ ๋ฝ‘์•„์“ฐ๊ธฐ๋ฅผ ๋‹ค์‹œ ๋ณต์Šตํ•  ๊ฒธ ๋จผ์ € Json์„ ๋งŒ๋“ค์–ด์คฌ์–ด์š”


๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€ ํ›„

public interface ILoader<Key, Value>
{
ย  ย  Dictionary<Key, Value> Load();
}


์ฝ”๋“œ๋ฅผ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก Skill Class์™€ SkillData Class๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ ,

[Serializable]
public class Skill
{
ย  ย  public string skillname;
ย  ย  public int spritenum;
ย  ย  public string description;
ย  ย  public float damagerate;
ย  ย  public int count;
ย  ย  public int pp;
ย  ย  public int maxpp;
ย  ย  public Define.actionType type;
ย  ย  public Define.Target target;
}

[Serializable]
public class SkillData : ILoader<string, Skill>
{
ย  ย  public List<Skill> skills;

ย  ย  public Dictionary<string, Skill> Load()
ย  ย  {
ย  ย  ย  ย  Dictionary<string, Skill> result = new Dictionary<string, Skill>();
ย  ย  ย  ย  foreach (Skill skill in skills)
ย  ย  ย  ย  ย  ย  result.Add(skill.skillname, skill);

ย  ย  ย  ย  return result;
ย  ย  }
}


์—ฌ๊ธฐ์„œ ์‚ด์ง ๊ณ ์ƒํ–ˆ๋Š”๋ฐ, 18๋ฒˆ์งธ ์ค„์˜ skills์™€ JsonํŒŒ์ผ์˜ ๋‘๋ฒˆ์งธ์ค„ skills -> ์ด ๋‘˜์˜ ์ด๋ฆ„์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๋ฐ›์ง€๋ฅผ ๋ชปํ•˜๋”๋ผ๊ตฌ์š”.. ์—ฌ๊ธฐ์„œ ์‹œ๊ฐ„ ์—„์ฒญ ๋‚ ๋ฆผ

๊ทธ๋ฆฌ๊ณ  Skill Class์˜ ๋ณ€์ˆ˜๋“ค๊ณผ JsonํŒŒ์ผ ์•ˆ์˜ ๋ณ€์ˆ˜๋“ค ์ด๋ฆ„๋„ ๊ฐ™์•„์•ผ ํ•ด์š”

public Dictionary<string, Skill> SetSkillData(string player)
ย  ย  {
ย  ย  ย  ย  return LoadJson<SkillData, string, Skill>(player).Load();
ย  ย  }

ย  ย  Loader LoadJson<Loader, Key, Value>(string path = "") where Loader : ILoader<Key, Value>
ย  ย  {
ย  ย  ย  ย  TextAsset skill = Manager.Resource.Load<TextAsset>($"Data/SkillData_{path}");
ย  ย  ย  ย  return JsonUtility.FromJson<Loader>(skill.text);
ย  ย  }


TextAsset์œผ๋กœ Json ํŒŒ์ผ ๋‚ด์˜ ๋‚ด์šฉ์„ ๊ธ์–ด์™€์„œ ์ €์žฅํ•ด์ฃผ๊ณ  ์ด๋ฅผ JsonUtility.FromJson์„ ์‚ฌ์šฉํ•˜๋ฉด ์•Œ์•„์„œ ๋ณ€์ˆ˜๋ช…์— ๋งž๊ฒŒ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€์š”

์ด๋ ‡๊ฒŒ player์˜ ์ง์—…๋ช…์„ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๊ทธ ์บ๋ฆญํ„ฐ์˜ ์Šคํ‚ฌ Dictonary ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ์–ด์š”


์ด๋ ‡๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ–ˆ์œผ๋‹ˆ SkillIcon์ชฝ์—๋„ ๋ณ€ํ™”๋ฅผ ์ค˜์•ผํ•ด์š”


protected override void Init()
ย  ย  {
ย  ย  ย  ย  base.Init();
ย  ย  ย  ย  Player player = BattleManager.Instance.nowTurnPlayer;
ย  ย  ย  ย  _destext.text = player._skills[this.GetType().Name].description;
ย  ย  ย  ย  _image.sprite = Manager. Item.GetSprite(player._skills[this.GetType().Name].spritenum);
ย  ย  ย  ย  _numtext.text = $"{player._skills[this.GetType().Name].pp} / {player._skills[this.GetType().Name].maxpp}";
ย  ย  ย  ย  AddUIEvent(gameObject, (PointerEventData) => { BattleManager.Instance._skill = BattleManager.Instance.nowTurnPlayer._skills[this.GetType().Name]; }), Define.UIEvent.Click);
ย  ย  ย  ย  AddUIEvent(gameObject, (PointerEventData) => { BattleManager.Instance.onAttackButton(); }, Define.UIEvent.Click);
ย  ย  }


Player์— ํ˜„์žฌ ํ„ด์ธ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ›์•„์˜ค๊ณ , ๊ทธ ํ”Œ๋ ˆ์ด์–ด์˜ skill๋ชฉ๋ก์— ์ ‘๊ทผํ•ด์„œ ์ •๋ณด๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด์ œ Json์— ๋ฏธ๋ฆฌ ์„ค๋ช…, ์•„์ด์ฝ˜ ๋„˜๋ฒ„, PP, MaxPP๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์‹น ๋‹ค ๋ฐ›์•„์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋ผ์š”


๊ทธ๋ฆฌ๊ณ  BattleManager์— ํ˜„์žฌ ์Šคํ‚ฌ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ์–ด๋–ค ์Šคํ‚ฌ์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”. ์ด์ œ ์ด ์Šคํ‚ฌ์ด BattleManager์— ๊ฐ€์„œ ํƒ€๊ฒŸ, ํƒ€์ž… ๋“ฑ์„ ์•Œ๋ ค์ค˜์„œ ๊ทธ์— ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๊ฑฐ์—์š”


์Šคํ‚ฌ์€ ์ด์ œ JsonํŒŒ์ผ์— ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœย ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋งŒ ๋งŒ๋“ค์–ด์„œ base.Init๋งŒ ํ•ด๋‘๋ฉด ์ •๋ณด๊ฐ€ ์•Œ์•„์„œ ๋“ค์–ด๊ฐˆํ…Œ๋‹ˆ ์—ฌ๊ธฐ๋Š” ๋”์ด์ƒ ๊ฑด๋“œ๋ฆด ์ผ์ด ์•„๋งˆ๋„ ์—†์„ ๊ฒƒ ๊ฐ™๋„ค์š”