zoukankan      html  css  js  c++  java
  • Unity3d

    前期工程将装备信息导入到了工程中,且实现了在背包内鼠标移动显示物品提示信息,本次工程开始构建装备穿戴功能。

    项目需求:

    右键点击背包内的装备,使其穿戴在身上。

    需求分析:

    右键点击背包内的装备,注意,此时的装备还是背包内的一个物品,即是工程所定义的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;

        }

    }

    这样就实现了右键背包中的装备图标,然后会相应装备的功能。

  • 相关阅读:
    常用linux命令
    console页面进去太慢优化
    CentOS7 查看最大线程连接数
    外部ssh连接Ubuntu系统
    Ubantu 防火墙管理
    oracle 闪回
    oracle用户密码过期
    base64编码原理
    Linux 备份数据库mysql
    python静态方法-类方法
  • 原文地址:https://www.cnblogs.com/yanbenxin/p/5870039.html
Copyright © 2011-2022 走看看