U3D游戏开发之中制作道具替换界面

这两天没有接到新的策划案子需求,突然想起CSDN很久没有更新,就翻开之前制作的一些小系统准备梳理分享,然后发现一大坨屎山,有一部分代码例如剧情系统啥的我觉得处理的非常丑陋,本来昨天预计要分享的,但是代码实在是过分丑陋就一直拖着。目前这篇我也感觉代码非常一般,可能是不那么屎的代码,可以大致看个思路。

首先我们先接到替换界面的需求:对于一个有上限格子的背包,我们的道具不能无限添加,一旦超过上限就需要玩家替换道具,替换道具之后之前的道具自动丢弃,道具栏只显示当前道具。鼠标移动到道具之时显示的是已替换的物品信息。替换界面的具体需求是左边是道具栏的所有道具名称,右侧是新获取的道具,选择左侧任意一个已拥有的道具之后点击中间的替换按钮实现道具替换,替换成功之后替换界面自动隐藏。

梳理好需求之后,我们开始分析代码:

对于一些替换界面的逻辑,首先拼接好对应的替换界面(拼接界面按照UI策划案进行),然后左侧按钮显示的是背包内拥有的道具,所以我们需要控制左侧道具名称与背包内玩家拥有的道具名称一致,右侧是新获得的道具,我们要控制右侧出现的名字与新获得的道具一致,并且通过道具表锁定他们的ID。(在这之前制作一个背包系统,里面包含初始化背包内一个新的格子的方法,以及丢弃一个道具置空格子的方法)锁定ID之后,我们还能通过背包系统获得具体是背包内哪一个格子被替换,这样我们只要替换格子内的信息即可。

我们梳理好代码逻辑,开始写代码:

using JetBrains.Annotations;
using NicoleFrameWork;

public enum E_ChooseType
{
    Null,
    BaoXiang,
}
public class TiHuanPanel : TiHuanPanelBase
{
    [CanBeNull] public ItemInfo itemInfos;
    private int? _num;
    public E_ChooseType eChooseTypes = E_ChooseType.Null;
    public bool isHide = false;
    public override void Start()
    {
        base.Start();
        Init();
    }
    /// <summary>
    /// 初始化界面
    /// </summary>
    private void Init()
    {
        txt1.text = Bag.Instance.GridItems[0]._itemInfo.Name;
        txt2.text = Bag.Instance.GridItems[1]._itemInfo.Name;
        txt3.text = Bag.Instance.GridItems[2]._itemInfo.Name;
        txt4.text = Bag.Instance.GridItems[3]._itemInfo.Name;
        txt5.text = itemInfos?.Name;
    }

    protected override void btn1Click()
    {
        base.btn1Click();
        _num = 0;
    }

    protected override void btn2Click()
    {
        base.btn2Click();
        _num = 1;
    }

    protected override void btn3Click()
    {
        base.btn3Click();
        _num = 2;
    }

    protected override void btn4Click()
    {
        base.btn4Click();
        _num = 3;
    }
    /// <summary>
    /// 替换按钮
    /// </summary>
    protected override void btn6Click()
    {
        base.btn6Click();
        Bag.Instance.GridItems[_num??0].InitNull();
        Bag.Instance.GridItems[_num??0].Init(itemInfos?.ID??0);
        UIMgr.Instance.HidePanel<TiHuanPanel>(true);
        if(isHide)
        {
            switch (eChooseTypes) 
            {
               case E_ChooseType.BaoXiang:
                   isHide = false;
                   UIMgr.Instance.GetPanel<BaoXiangPanel>((panel) =>
                   {
                       panel.HideIt();
                   });
                  break;
               
           }
            
        }
    }

    public override void HideMe()
    {
        base.HideMe();
        
    }

    public override void ShowMe()
    {
        base.ShowMe();
        
    }

}

此处进行了一些其他的处理,由于在宝箱之中也有获得道具的途径,所以如果在宝箱之中获取道具上限,我们也需要替换道具,替换完成之后还要完成剩下的步数,所以单独列出来处理。对于商店购买或者奖励之中获得的道具就没有其他的操作。(其中背包系统是写死的,按钮对应操作也比较死)

对于最近几篇的小系统是基于UIMGR的基础上开发,类似UI框架在之前的UGUI按钮之中有分享。

喜欢就请点赞收藏吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicole Potter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值