[Unity 강의] 뱀서라이크 강의 - 스킬(데이터)
카테고리: Class VamSurLike
태그: C#, Unity, VamSurLike
스킬
✔ 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();
}
}
이것저것 메모
잡담, 일기?
✔ 설계된 데이터가 어떻게 사용되는지? 많이 해봐야 될 거 같다.
댓글남기기