第八章 装备系统
装备系统是提升角色属性的重要系统,本篇博客重点实现装备系统UI的设计以及装备栏与物品栏的交互。
8.1 基础界面的设计
导入装备UI的模型,命名为Equipment,并添加5个方框,用以放置装备,如下图
当点击功能面板的装备按钮时,显示动画(方法见
https://blog.csdn.net/s1314_JHC/article/details/79690742 下的5.5节),不赘述。
我们在每个格子中再创建一个Child Sprite,当实例化时直接给这个Child Sprite添加装备图标即可。拖放到Prefab之中,方便之后使用
在Equipment脚本中管理这6个格子
private GameObject headgear; //创建GameObject并赋值
void Awake()
{
headgear = transform.Find ("Headgear").gameObject;
armor = transform.Find ("Armor").gameObject;
left_hand = transform.Find ("Left_hand").gameObject;
right_hand = transform.Find ("Right_hand").gameObject;
shoe = transform.Find ("Shoe").gameObject;
accessory = transform.Find ("Accessory").gameObject;
}
8.2 装备信息的添加与管理
这节我们实现装备信息的添加以及模拟拾取功能,与药品信息类似,我们创建装备信息的格式如下。
内容依旧添加在之前的文档ObjectsInfoInList之中,创建示例如下所示。
2001,simpleHeltForMagician,icon-helm-03,Equip,0,10,0,Headgear,Magician,60,150
2002,fineHeltForMagician,icon-helm-02,Equip,0,20,0,Headgear,Magician,80,200
2003,brokenArmorForMagician,armor3-icon,Equip,0,30,0,Armor,Magician,60,150
2004,fineArmorForMagician,armor2-icon,Equip,0,50,0,Armor,Magician,80,200
2005,brokenShield,icon-shield,Equip,0,30,0,Left_hand,Common,80,200
2006,fineShield,icon-shield1,Equip,0,50,0,Left_hand,Common,100,250
2007,brokenRod,rod-icon,Equip,30,0,0,Right_hand,Magician,60,150
2008,fineRod,rod-icon02,Equip,30,0,0,Right_hand,Magician,80,200
2009,brokenShoe,icon-boot0,Equip,0,0,30,Shoe,Common,60,150
2010,fineShoe,icon-boot0-01,Equip,0,0,50,Shoe,Common,80,200
2011,brokenRing,icon-ring-01,Equip,0,30,0,Accessory,Common,60,150
2012,fineRing,icon-ring,Equip,0,50,0,Accessory,Common,80,200
在ObjectsInfo之中,我们在public class ObjectInfo添加几个适用于装备的成员变量
public class ObjectInfo{
public int attack; //攻击
public int defense; //防御
public int speed; //速度
public ApplicationType appType; //武器适用角色
public DressType dressType; //穿戴部位
}
其中ApplicationType和DressType单独定义为枚举类型,即
public enum ApplicationType{
Swordman,
Magician,
Common
}
public enum DressType{
Headgear,
Armor,
Left_hand,
Right_hand,
Shoe,
Accessory
}
在从ObjectsInfoInList.txt文档中读取数据到字典objectInfoDict的时候,之前在药品信息系统中所采用的判断语句if(type == ObjectType.Drug),对其进行修改,即可添加装备信息
else if(type == ObjectType.Equip)
{
info.attack = int.Parse(proArray[4]);
info.defens