首页 > 代码库 > Unity3d - RPG项目学习笔记(二十)
Unity3d - RPG项目学习笔记(二十)
前期工程将装备信息导入到了工程中,且实现了在背包内鼠标移动显示物品提示信息,本次工程开始构建装备穿戴功能。
项目需求:
右键点击背包内的装备,使其穿戴在身上。
需求分析:
右键点击背包内的装备,注意,此时的装备还是背包内的一个物品,即是工程所定义的id为2001-2010的InventoryItem而已;需求可以抽象为右键点击背包内的一个物品,如果该物品是装备类,则在角色的EquipmentUI相应的位置生成一个与之图标相同的EquipmentItem,则视为“装备”了该物品。
具体实现:
①右键点击:
更新InventoryItem类中的 void Update方法为:
Class InventoryItem
{
void Update( )
{
if(isHover) //检鼠标是否在图标上
{
InventoryDes._instance.Show(id);
if(Input.GetMouseDown(1))
{
EquipmentUI._instance.Dress(id); //调用EquipmentUI中的Dress方法(下一步构建)
}
}
}
}
构建EquipmentUI中的Dress方法,实现在装备栏上生成装备图标,更新脚本如下:
首先需要在PlayerState脚本中加入角色的分类,作为装备能否的标识位
public eunm CharacterType { Swordman,Magician }
Class PlayerState
{
public CharacterType herotype;
}
Class EquipmentUI
{
private PlayerState ps;
public GameObject equipitem;
void Awake( )
{
ps = GameObject.FindGameObjectWithTag(Tag.player).GetCompnent<PlayerState>( );
}
public bool Dress(int id)
{
ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id);
if(info.Type != ObjectType.Equip)
{
return false;
}
if(ps.horetype == Magician)
{
if(info.CharaterType == charactertype.Swordman)
return false;
}
if(ps.horetype == Swordman)
{
if(info.CharaterType == charactertype.Magician)
return false;
}
//排除一切不能装备的情况,下面处理可以装备的情况,首先确定装备要装备在哪个框中,即确定生成装备的父类物体
private GameObject parent = null;
Swtich(info.dressType)
{
case DressType.Headgear:
parent = headgear;
break;
case DressType.Armor:
parent = armor;
break;
case DressType.LeftHand:
parent = lefthand;
break;
case DressType.RightHand:
parent = righthand;
break;
case DressType.Shoe:
parent = shoe;
break;
case DressType.Accessory:
parent = accessory;
break;
}
//将装备图示的范例创建在父类下,使用EquipmentItem下的SetInfo方法(下步构建)来改变装备的图标
//检测该处是否装备了物品
EquipmentItem item = parent.GetCompnentInChild<EquipmentItem>();
if( item = null )
{
GameObject GOitem = UITool.AddChild(parent,equipitem);
Goitem.transform.localPosition = Vector3.zero;
GOitem.GetCompnent<EquipmentItem>().SetInfo(info);
}
else
{
item.SetInfo(info);
}
}
}
最后构建EquipmentItem中的SetInfo方法
Class EquipmentItem
{
private UISprite sprite;
private int id;
void Awake()
{
sprite = GetCompnent<UISprite>();
}
public void SetId(int id)
{
this.id = id;
SetInfo(ObjectsInfo._instance.GetObjectInfoById(id));
}
public void SetInfo(ObjectInfo info)
{
this.id = info.id;
sprite.SpriteName = info.icon_Name;
}
}
这样就实现了右键背包中的装备图标,然后会相应装备的功能。
Unity3d - RPG项目学习笔记(二十)