打算写任务系统,背包系统,战斗系统三部分,但是目前只做过背包系统(跟着siki学的),战斗系统(还不是用FSM写的),决定从背包系统开始,修改下之前的框架。
先做UI:
背包系统是由很多小格子构成,每个格子也就是一个图片,创建一个image,加一个button,把所有格子放到一个空物体下面,为了对小格子进行排序所以要有Grid layout Group组件。grid layout group组件设置排序方式偏移等等。
写代码:
整体框架如下
Item基类:
public class Item { public int ID { get; set; } public string Name { get; set; } public ItemType Type{get;set;} public ItemQualitys Quality { get; set; } public string Description { get; set; } public int Capacity { get; set; }//容量 public int BuyPrice { get; set; } public int SellPrice { get; set; } public string Sprite { get; set; } public Item() { this.ID = -1; } public Item(int id,string name,ItemType type,ItemQualitys quality,string des,int capacity,int buyPrice,int sellPrice,string sprite ) { this.ID = id; this.Name = name; this.Type = type; this.Quality = quality; this.Description = des; this.Capacity = capacity; this.BuyPrice = buyPrice; this.SellPrice = sellPrice; this.Sprite = sprite; } /// <summary> /// 物品类型 /// </summary> public enum ItemType { Consumable,//消耗品 Equipment,//装备类 Weapon,//武器 Material//材料 } /// <summary> /// 物品品质 /// </summary> public enum ItemQualitys { white,//白色 yellow,//黄色 blue,//蓝色 Orange//橙色 } /// <summary> /// 得到提示面板应该显示什么样的内容 /// </summary> /// <returns></returns> public virtual string GetToolTipText() { string color = ""; switch(Quality) { case ItemQualitys.white: color = "white"; break; case ItemQualitys.blue: color = "blue"; break; case ItemQualitys.Orange: color = "orange"; break; case ItemQualitys.yellow: color = "yellow"; break; } string text = string.Format("<color={4}>{0}</color>\n<size=10>购买价格:{1}出售价格:{2}</size>\n<color=blue>{3}</color>", Name, BuyPrice, SellPrice, Description, color); return text; }消耗品:
public class Consumable : Item { public int HP { get; set; } public int MP { get; set; } public Consumable(int id, string name, ItemType type, ItemQualitys quality, string des, int capacity, int buyPrice, int sellPrice, string sprite, int hp,int mp) : base(id, name, type, quality, des, capacity, buyPrice, sellPrice,sprite) { this.HP = hp; this.MP = mp; } }武器类:
public class Weapon : Item { public int Damage { get; set; } public Weapon(int id, string name, ItemType type, ItemQualitys quality, string des, int capacity, int buyPrice, int sellPrice,int damage,string sprite) : base(id, name, type, quality, des, capacity, buyPrice, sellPrice,sprite) { this.Damage = damage; } public override string GetToolTipText() { string text= base.GetToolTipText(); int damage = Damage; string newtext = string.Format("{0}\n<color=green>攻击力:{1}</color>", text, damage); return newtext; } }装备类:
public class Equipment : Item { public int Strength { get; set; }//力量 public int Intellect { get; set; }//智力 public int Agility { get; set; }//敏捷 public int Stamina { get; set; }//体力 public EquipmentType equipType { get; set; } public enum EquipmentType { None, Head, Chest,//胸部 Leg,//腿 Boots,//腿 } public Equipment(int id, string name, ItemType type, ItemQualitys quality, string des, int capacity, int buyPrice, int sellPrice,int strength, int intellect,int agility,int stamina,EquipmentType equiptype,string sprite) : base(id, name, type, quality, des, capacity, buyPrice, sellPrice,sprite) { this.Strength = strength; this.Intellect = intellect; this.Agility = agility; this.Stamina = stamina; this.equipType = equiptype; } public override string GetToolTipText() { string equipTypeText = ""; switch(equipType) { case EquipmentType.Head: equipTypeText = "头部"; break; case EquipmentType.Chest: equipTypeText = "胸部"; break; case EquipmentType.Leg: equipTypeText = "腿"; break; case EquipmentType.Boots: equipTypeText = "靴子"; break; } string text= base.GetToolTipText(); string newText = string.Format("{0}\n<color=blue>装备类型:{5}\n力量:{1}\n智力:{2}\n敏捷:{3}\n体力:{4}</color>", text,Strength,Intellect,Agility,Stamina,equipTypeText); return newText; } }