zoukankan      html  css  js  c++  java
  • Unity3d

    上期工程完成了装备的穿戴功能,本期开始创建装备的卸下功能和属性加成功能。

    需求:

    右键点击装备栏上的装备图标,使其返回至背包中。

    需求拆解:

    鼠标移动至装备图标上,右键点击,销毁装备,在背包中生成该装备的镜像,完毕。

    根据上述思路,这个功能实现起来比较简单:

    ①首先为EquipmentItem添加BoxCollider,使装备栏中的装备可以被点击;

    ②对该EquipmentItem添加脚本如下:

    Class EquipmentItem

    {

           private bool isHovering = false;

           void OnHover( bool isTagert )

           {

                 isTarget = isHovering; 

           }

           void Update()

           {

                if(isHovering)

                {

                    if(Input.GetMouseDown(1))

                    {

                        Inventory._instance.GetId(id);

                        GameObject.Destory(this.gameObject);

                    }

                } 

           }

    }

    这样就实现了卸下装备的功能。

    属性加成功能:

    需求:将装备上的attack、def和speed值加算到人物上。

    需求解析:

    将装备中的属性值赋值给加算变量即可。

    对Class EquipmentUI进行更新

    Class EquipmentUI

    {

        private int attack;

        private int def;

        private int speed;

        public void UpdatePropety( )

        {

            attack = 0;

            def = 0;

            speed = 0;

            EquipmentItem headgearItem = headgear.GetCompnentInChild<EquipmentItem>();

            EquipmentItem armorItem = armor.GetCompnentInChild<EquipmentItem>(); 

            EquipmentItem leftHandItem = leftHand.GetCompnentInChild<EquipmentItem>(); 

            EquipmentItem rightHandgearItem = rightHand.GetCompnentInChild<EquipmentItem>();

            EquipmentItem ShoeItem = shoe.GetCompnentInChild<EquipmentItem>();

            EquipmentItem AccessoryItem = accessory.GetCompnentInChild<EquipmentItem>();

            PlusProperty(headgearItem);

            PlusProperty(armorItem);

            PlusProperty(leftHandItem);

            PlusProperty(rightHandItem);

            PlusProperty(shoeItem);

            PlusProperty(accessoryItem);

        }

        void PlusProperty(EquipmentItem item)

        {

            if(item != null)

            {

                ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(item.id);

                attack += info.attack;

                def += info.def;

                speed += info.speed;

            }

         public bool Dress()//在return true前更新一句

        {

            UpdateProperty();

            return true;

        }

        //创建TakeOff方法,处理卸掉装备的方法

        public void TakeOff(int id,GameObject go)

        {

            Inventory._instance.GetId(id);

            GameObject.Destroy(go);

            UpdateProperty();

        }

    }

    这样就可以了

  • 相关阅读:
    测试策略如何制定
    python atexit模块和register函数
    使用Redis实现异步消息队列
    python 处理中文 读取数据库输出全是问号
    TCP和UDP的区别和优缺点
    怎样ping网络
    ImportError: libpng12.so.0: cannot open shared object file: No such file or directory
    tensorrtx/retinaface/calibrator.cpp:4:31: 致命错误:opencv2/dnn/dnn.hpp:没有那个文件或目录
    编译tensorrtx/retinaface遇到报错/usr/local/cuda/include/vector_types.h(421): error: identifier "constexpr" is undefined
    RetinaFace.cpp:112:37: 错误:‘std::chrono’尚未声明
  • 原文地址:https://www.cnblogs.com/yanbenxin/p/5875949.html
Copyright © 2011-2022 走看看