[Unity 강의] 뱀서라이크 강의 - 스킬(데이터)

업데이트:

카테고리:

태그: , ,




스킬

✔ Materials, Sprites 준비하기
✔ 이펙트를 사용해 더 화려하게 가능
✔ 피격 판정 어떻게 할 것인가?
✅ 싱글게임 - 스킬 쓸 때 판정 범위를 켜 범위에 있으면 대미지
✅ 온라인게임 - 서버에서 계산해서 판정
피격 판정 모양은 다양하게 만들 수 있다.





스킬 데이터

✔ 스킬 데이터 설계도 중요하다 (어렵다)
✔ 정해진 규칙이 없어 게임마다 다르다.
✔ 스킬업 시 대미지만 변경? 스킬이 업그레이드된다? nextSkillID?
✔ 스킬에 대한 정보가 많아지면 복잡해진다 -> 계층구조로 세분화
✔ 필요한 데이터만 받고 조립할 수 있는 데이터는 조립

Data.Contents
namespace Data
{
    #region SkillData 

    [Serializable]
    public class HitEffect 
    {
        [XmlAttribute]
        public string type;
        [XmlAttribute]
        public int templateID;
        [XmlAttribute]
        public int value;
    }
    public class SkillData
    {
        [XmlAttribute]
        public int templateID;
        [XmlAttribute(AttributeName = "type")]
        //public string skillTypeStr;
        public SkillType skillType = SkillType.None;
        [XmlAttribute]
        public int nextID;
        public int prevID =0;//Todo

        [XmlAttribute]
        public string prefab;

        //아주많이
        [XmlAttribute]
        public int damage;

        //[XmlAttribute("HitEffect")]
        //public List<HitEffect> hitEffects = new List<HitEffect>();
    }

    [Serializable, XmlRoot("SkillDatas")]
    public class SkillDataLoader : ILoader<int, SkillData>
    {
        [XmlElement("PlayerData")]
        public List<SkillData> skills = new List<SkillData>();

        public Dictionary<int, SkillData> MakeDict()
        {
            Dictionary<int, SkillData> dict = new Dictionary<int, SkillData>();
            foreach (SkillData skill in skills)
                dict.Add(skill.templateID, skill);
            return dict;
        }
    }
    #endregion
}
SkillDatas.xml
<?xml version="1.0" encoding="utf-8"?>
<SkillDatas>
  <SkillData templateID ="1" name ="화염구" type ="projectile" prefab ="FireProjectile.prefab" damage="100"speed="2">
  </SkillData>
  <!--
  <SkillData templateID ="1" name ="화염구" type ="projectile" prefab ="FireProjectile.prefab" damage="100">
    <ProjectileData speed="3" damage="10" hitCount ="1">
      <OnHit>
        <HitEffect type="buff" templateID="30"></HitEffect>
      </OnHit>
      <SpawnData></SpawnData>
    </ProjectileData>
  </SkillData>
  <SkillData templateID ="11" NextTemplateID ="12" name ="평타" type ="melee" prefab ="" damage="100">
  </SkillData>
  <SkillData templateID ="12" NextTemplateID ="13" name ="평타" type ="melee" prefab ="" damage="100">
  </SkillData>
  <SkillData templateID ="13" name ="평타" type ="melee" prefab ="" damage="100">
  </SkillData>
  -->
</SkillDatas>
DataManager에 스킬 데이터 추가

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

public class DataManager
{
    public Dictionary<int, Data.PlayerData> PlayerDic { get; private set; } = new Dictionary<int, Data.PlayerData>();
    public Dictionary<int, Data.SkillData> SkillDic { get; private set; } = new Dictionary<int, Data.SkillData>();

    public void Init()
    {
        PlayerDic = LoadXml<Data.PlayerDataLoader, int, Data.PlayerData>("PlayerData.xml").MakeDict();
        SkillDic = LoadXml<Data.SkillDataLoader, int, Data.SkillData>("SkillData.xml").MakeDict();
    }

}





이것저것 메모





잡담, 일기?

✔ 설계된 데이터가 어떻게 사용되는지? 많이 해봐야 될 거 같다.




📔

댓글남기기