首页 > 代码库 > 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项目学习笔记(二十)