游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

2024-01-21

游戏开发中经常出现武器商店,接下来为你们带来武器装备商店系统的具体解决办法。(后续出UGUI+Json版本,敬请期待)

武器道具的具体逻辑:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EquipmentItem : MonoBehaviour
{
    private UISprite sprite;
    public int id;
    private bool isHover=false;
    //卸下面板
    public UISprite tipWindow2;
    public UIButton btntipOk;
    public UIButton btntipCancel;

    private void Awake()
    {
        sprite= this.GetComponent<UISprite>();
    }
    private void Update()
    {
        if(isHover)
        {
            //鼠标在装备栏前 检测点击
            if(Input.GetMouseButtonDown(1))
            {
                tipWindow2.gameObject.SetActive(true);
                btntipOk.onClick.Add(new EventDelegate(() =>
                {
                    EquipmentUI._instance.TakeOff(id,this.gameObject);
                    //Inventory._instance.GetId(id);
                    //GameObject.Destroy(this.gameObject);
                    //tipWindow.gameObject.SetActive(false);
                }));
                btntipCancel.onClick.Add(new EventDelegate(() =>
                {
                    tipWindow2.gameObject.SetActive(false);
                }));
            }
        }
    }

    public void SetId(int id)
    {
        this.id=id;
        ObjectInfo info=ObjectsInfo._instance.GetObjectInfoById(id);
        SetInfo(info);
    }
    public void SetInfo(ObjectInfo info)
    {
        this.id= info.id;
        sprite.spriteName= info.icon_name;
    }
    public void OnHover(bool isOver)
    {
        isHover=isOver;
    }
}

这个你还需要结合我前面的笔记里面的信息管理系统一起使用才能发挥成效(在背包系统那篇笔记之中)

控制装备系统的逻辑:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static UISpriteCollection;

//一个用于控制装备面板的类
public class EquipmentUI : MonoBehaviour
{
    public static EquipmentUI _instance;
    private TweenPosition tween;
    private bool isShow=false;
    //关联装备按钮
    public UIButton btnEquipment;
    //关联关闭按钮
    public UIButton btnClose;

    //关联物品装备格子
    public GameObject headgear;
    public GameObject armor;
    public GameObject rightHand;
    public GameObject leftHand;
    public GameObject shoe;
    public GameObject accessory;

    private PlayerStatus ps;

    public GameObject equipmentItem;
    //关联提示信息
    public UISprite uiTip;
    public UILabel uiTipText;
    private TweenPosition tween2;

    public int attack = 0;
    public int def = 0;
    public int speed = 0;

    void Awake()
    {
        _instance= this;
        tween=this.GetComponent<TweenPosition>();
        ps=GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>();
        tween2 = uiTip.GetComponent<TweenPosition>();
    }
    void Start()
    {
        btnEquipment.onClick.Add(new EventDelegate(() =>
        {
            TransformState();
        }));
        btnClose.onClick.Add(new EventDelegate(() =>
        {
            TransformState();
        }));
    }

    public void TransformState()
    {
        if(isShow==false)
        {
            tween.PlayForward();
            isShow=true;
        }
        else
        {
            tween.PlayReverse();
            isShow=false;
        }
    }
    //穿戴处理Tip
    public void DressAbout()
    {
        uiTip.enabled = true;
        uiTipText.enabled = true;
        tween2.PlayForward();
        Invoke("SprTipHide", 1);
    }
    void SprTipHide()
    {
        uiTip.enabled = false;
        uiTipText.enabled = false;
        tween2.PlayReverse();
    }
    public bool Dress(int id)
    {
        ObjectInfo info=ObjectsInfo._instance.GetObjectInfoById(id);
        if(info.type!=ObjectType.Equip)
        {
            uiTipText.text = "穿戴失败";
            DressAbout();
            return false;//穿戴不成功
        }
        if(ps.heroType==HeroType.Magician)
        {
            if(info.applicationType==ApplicationType.Swordman)
            {
                uiTipText.text = "穿戴失败";
                DressAbout();
                return false;
            }
        }
       
        if(ps.heroType==HeroType.Swordman)
        {
            if(info.applicationType==ApplicationType.Magician)
            {
                uiTipText.text = "穿戴失败";
                DressAbout();
                return false;
            }
        }
        GameObject parent = null;
        switch(info.dressType)
        {
            case DressType.Headgear:
                parent = headgear;
                break;
            case DressType.Armor:
                parent = armor;
                break;
            case DressType.RightHand:
                parent = rightHand;
                break;
                case DressType.LeftHand:
                parent = leftHand;
                break;
                case DressType.Shoe: parent = shoe;
                break;
                case DressType.Accessory: parent = accessory;
                break;
        }
        EquipmentItem item = parent.GetComponentInChildren<EquipmentItem>();
        if(item!=null)
        {
            //把已经穿戴的卸下
            Inventory._instance.GetId(item.id);
           
            //已经穿戴同一类型的装备
            item.SetInfo(info);
        }
        else
        {
            //没有穿戴同样类型的装备
            GameObject itemGo = NGUITools.AddChild(parent, equipmentItem);
            itemGo.transform.localPosition= Vector3.zero;
            itemGo.GetComponent<EquipmentItem>().SetInfo(info);
        }
        UpdatePropetry();
        uiTipText.text = "穿戴成功";
        DressAbout();
        return true;
    }
    public void TakeOff(int id,GameObject go)
    {
        Inventory._instance.GetId(id);
        GameObject.Destroy(go);
        UpdatePropetry();//更新属性
    }
    void UpdatePropetry()
    {
        this.attack = 0;
        this.def = 0;
        this.speed= 0;

        EquipmentItem headgearItem =headgear.GetComponentInChildren<EquipmentItem> ();
            PlusPropertry(headgearItem);
        EquipmentItem armorItem=armor.GetComponentInChildren<EquipmentItem> ();
        PlusPropertry(armorItem);
        EquipmentItem leftHandItem=leftHand.GetComponentInChildren<EquipmentItem> ();
        PlusPropertry(leftHandItem);
        EquipmentItem rightHandItem=rightHand.GetComponentInChildren<EquipmentItem> ();
        PlusPropertry(rightHandItem);
        EquipmentItem shoeItem=shoe.GetComponentInChildren<EquipmentItem> ();
        PlusPropertry(shoeItem);
        EquipmentItem accessoryItem=accessory.GetComponentInChildren<EquipmentItem> ();
        PlusPropertry(accessoryItem);
    }
    void PlusPropertry(EquipmentItem item)
    {
        if (item != null)
        {
            ObjectInfo equipInfo = ObjectsInfo._instance.GetObjectInfoById(item.id);
            this.attack += equipInfo.attack;
            this.def += equipInfo.def;
            this.speed += equipInfo.speed;
        }
    }
}

具体思路和核心方法全在代码里讲述了,如果你有什么不懂的,欢迎来问我,我很高兴为您解答!(有一些代码结合了其它系统,你可以直接修改它们),如果对你有一些帮助就点个赞支持一下吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游戏开发之常见操作梳理——武器装备商店系统(NGUI版) 的相关文章

随机推荐

  • 一直可以投到4月初的【央企】金融科技岗&;综合类岗位!

    题解 判断字母 include
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来
  • 打造视听盛宴——Resolume Arena 7,一款强大的VJ音视频软件

    在当今数字时代 视觉艺术和音乐的融合已经成为了许多娱乐活动和演出的重要组成部分 而在这个领域中 Resolume Arena 7无疑是一款备受赞誉的VJ音视频软件 Resolume Arena 7具备强大的功能和直观的界面设计 使得用户能够
  • 打造完美人像,PixCake像素蛋糕助您一键修图

    您是否曾经为自己的人像照片需要进行繁琐的修图而感到困扰 是否曾经想要打造出完美的自拍照 却不知道该如何下手 现在 我们为您推荐一款强大的人像处理技术修图软件 PixCake像素蛋糕 PixCake像素蛋糕是一款基于AI人像处理技术的修图软件
  • 【计算机毕业设计】springbootstone音乐播放器的设计与实现

    随着我国经济的高速发展与人们生活水平的日益提高 人们对生活质量的追求也多种多样 尤其在人们生活节奏不断加快的当下 人们更趋向于足不出户解决生活上的问题 stone音乐播放器展现了其蓬勃生命力和广阔的前景 与此同时 为解决用户需求 stone
  • RubyMine for Mac/win:提升Ruby和Rails开发的强大IDE

    随着Ruby和Rails在Web开发领域的广泛应用 一款高效的开发工具对于提高生产力至关重要 JetBrains RubyMine正是这样一款值得信赖的集成开发环境 IDE 作为Mac和Windows平台上的强大工具 RubyMine为开发
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • iStat Menus:Mac用户的系统状态守护者

    iStat Menus 一款为Mac用户精心设计的系统状态监控工具 致力于为用户提供关于系统性能 硬件状态和网络活动的实时信息 它不仅是一个监控工具 更是一个守护者 始终守护着Mac系统的安全与稳定 通过直观的仪表盘风格 iStat Men
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 提升编程效率,Sublime Text 4 for Mac 让代码编辑更高效!

    作为一名开发人员或程序员 一个高效且功能强大的文本编辑器是必不可少的工具 而 Sublime Text 4 for Mac 正是为满足这一需求而设计的 无论你是初学者还是经验丰富的专业人士 Sublime Text 4 都将成为你编程生涯中
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网
  • 解锁思维潜能,畅享XMind 2024 Mac/win中文版思维导图软件

    XMind 2024是一款功能强大的思维导图软件 旨在帮助用户提高工作效率和组织思维 它的核心特点包括多平台同步 强大的协作功能和丰富的导图模板 首先 XMind 2024支持多平台的无缝同步 用户可以在电脑 手机和平板上随时随地访问和编辑
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 用Growly Draw for Mac,释放您的创意绘画天赋!

    在数字化时代 绘画已经不再局限于传统的纸笔之中 如今 我们可以借助强大的绘画应用软件 将创意化为独特的艺术作品 而Growly Draw for Mac就是一款让您能够快速释放创意 创作精美绘画作品的应用软件 Growly Draw for
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge