unity客户端背包

unity使用MVC实现客户端动态页数效果

当点击背包页面时,初始化背包界面的方法。

参数:

  • obj:传入的参数对象,包含背包数据、最大页面数和当前页面数。

解析参数:

  • 将传入的参数对象转换为对应的变量。
  • vs[0]:背包数据,类型为List<BagData>。
  • vs[1]:最大页面数,类型为int。
  • vs[2]:当前页面数,类型为int。

创建页面toggle:

  • 如果页面父物体下的子物体数量小于最大页面数,则创建新的页面toggle。
  • 使用循环从当前页面开始创建到最大页面的toggle。
  • 对于每个页面toggle,设置其对应的索引值为index。
  • 实例化页面toggle,并获取其Toggle组件。
  • 添加toggle的值改变监听事件。
    • 如果toggle的值为true(选中状态),则显示toggle下的Label对象,并广播获取页面数据的消息。
    • 如果toggle的值为false(未选中状态),则隐藏toggle下的Label对象。
  • 设置toggle的ToggleGroup为页面父物体的ToggleGroup组件。
  • 设置toggle的文本内容为索引值加1。

设置当前页面toggle:

  • 根据当前页面数,将对应索引的toggle设为选中状态。

设置背包数据:

  • 调用SetBagData方法,将背包数据和当前页面数传入。
private void InitBag(object obj) { 
object[] vs = obj as object[]; 
List<BagData> bags = vs[0] as List<BagData>; // 获取背包数据 
int maxPage = (int)vs[1]; // 获取最大页面数 
int nowPage = (int)vs[2]; // 获取当前页面数

if (pageParent.childCount < maxPage)  // 如果页面父物体下的子物体数量小于最大页面数
{
    for (int i = (nowPage - 1); i < maxPage; i++)  // 从当前页面开始创建到最大页面的toggle
    {
        int index = i;  // 当前toggle的索引值
        Toggle toggle = Instantiate(ResMgr.Instance.LoadAsset<GameObject>(ResType.UIPanel, "Page"), pageParent).GetComponent<Toggle>();  // 实例化页面toggle
        toggle.onValueChanged.AddListener((flag) =>  // 添加toggle的值改变监听事件
        {
            if (flag)  // 如果toggle的值为true(选中状态)
            {
                toggle.transform.Find("Label").gameObject.SetActive(true);  // 显示toggle下的Label对象
                MsgCtr.Instance.BroadCast(MsgId.GET_PAGE_DATA, index + 1);  // 广播获取页面数据的消息
            }
            else  // 如果toggle的值为false(未选中状态)
            {
                toggle.transform.Find("Label").gameObject.SetActive(false);  // 隐藏toggle下的Label对象
            }
        });
        toggle.group = pageParent.GetComponent<ToggleGroup>();  // 设置toggle的ToggleGroup为页面父物体的ToggleGroup组件
        toggle.GetComponentInChildren<Text>().text = (i + 1).ToString();  // 设置toggle的文本内容为索引值加1
    }
}

pageParent.GetChild(nowPage - 1).GetComponent<Toggle>().isOn = true;  // 设置当前页面toggle为选中状态

SetBagData(bags, nowPage);  // 设置背包数据
}
private void SetBagData(List<BagData> bags, int nowPage)
    {
        for (int i = 0; i < parent.Count; i++) // 遍历所有父物体 { if (parent[i].childCount > 0) // 如果父物体下有子物体 { for (int j = 0; j < parent[i].childCount; j++) // 遍历子物体 { Destroy(parent[i].GetChild(j).gameObject); // 销毁子物体 } } }

            if (nowPage * 20 < bags.Count)  // 如果当前页面的物品数量小于背包数据总数
            {
                for (int i = (nowPage - 1) * 20; i < nowPage * 20; i++)  // 从当前页面的起始索引到结束索引
                {
                    Instantiate(ResMgr.Instance.LoadAsset<GameObject>(ResType.UIPanel, "BagItem"), parent[i - (nowPage - 1) * 20].transform).GetComponent<BagItem>().Init(bags[i]);  // 实例化背包物品,并初始化物品数据
                }
            }
            else  // 如果当前页面的物品数量大于等于背包数据总数
            {
                for (int i = (nowPage - 1) * 20; i < bags.Count; i++)  // 从当前页面的起始索引到背包数据总数
                {
                    Instantiate(ResMgr.Instance.LoadAsset<GameObject>(ResType.UIPanel, "BagItem"), parent[i - (nowPage - 1) * 20].transform).GetComponent<BagItem>().Init(bags[i]);  // 实例化背包物品,并初始化物品数据
                }
            }
    }

model层

private void GetPage(object obj)
        {
            object[] vs = obj as object[]; int page = (int)vs[0]; // 获取要切换的页面数
            nowPage = page; // 更新当前页面数
            MsgCtr.Instance.BroadCast(MsgId.INIT_BAG, bags, maxPage, nowPage); // 广播消息,初始化背包数据
        }

        private void BuyItem(object obj)
        {
            object[] vs = obj as object[]; BagData bag = vs[0] as BagData; // 获取购买的物品数据
            bags.Add(bag); // 将物品数据添加到背包数据列表
            if (bags.Count > maxPage * 20) // 如果背包数据数量超过当前最大页面能容纳的数量
            {
                maxPage++; // 更新最大页面数
            }
            nowPage = maxPage; // 更新当前页面数为最大页面数
            MsgCtr.Instance.BroadCast(MsgId.INIT_BAG, bags, maxPage, nowPage); // 广播消息,初始化背包数据
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值