本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如NoticeUI等)。

本篇涉及的功能用加出标出,具体的功能如下:

1、实现了两个窗口,通过点击键盘I来,打开或者关闭窗口也就是Toggle功能

2、装备窗口中的物品栏空格数量动态生成可控,可以在属性窗口手动配置

3、窗口具有拖拽功能

4、窗口物品具有拖拽,及窗口间拖拽

5、可以在窗口使用物品的功能,物品有消耗扇形显示功能

6、通用窗口的类体系结构

具体的插件使用和功能已经在上篇中说明了这里就不多说了

1、本篇重点分析 6通用窗口的类体系结构,类组织和类图如下所示:

类的继承体系结构这里就说了,在第一篇有可以自行查阅

类的引用关系、核心字段和方法已经在类图中标记的很清楚,用简单的几句话说明下,装备窗口中的每个格子是由一个空格子具有背景的UIItem和InventoryItemBase Model组成的,而整个装备窗口是一个InventoryUI,该类继承了ItemCollectionBase类,也就是说它是具有一组UIItem的装备集合窗口,添加上UIWindow组件、DraggableWindow就具有了普通窗口的拖拽移动和显示关闭的功能了。

2、装备窗口中的物品栏空格数量动态生成可控,可以在属性窗口手动配置

如何实现动态装备窗口主要有两个核心技术:一个是UI中的自适应排列,也就是Grid layout Group组件;一个是U3D的prefab实例化技术

动态初始化Cell数据核心代码如下

 1         protected virtual void FillUI()
 2         {
 3             if (manuallyDefineCollection == false)
 4             {
 5                 items = new InventoryUIItemWrapperBase[initialCollectionSize];
 6
 7                 // Fill the container on startup, can add / remove later on
 8                 for (uint i = 0; i < initialCollectionSize; i++)
 9                 {
10                     items[i] = CreateUIItem<InventoryUIItemWrapper>(i, itemButtonPrefab != null ? itemButtonPrefab : InventorySettingsManager.instance.itemButtonPrefab);
11                 }
12             }
13             else
14             {
15                 for (uint i = 0; i < items.Length; i++)
16                 {
17                     items[i].itemCollection = this;
18                     items[i].index = i;
19                 }
20             }
21         }
22
23         protected T CreateUIItem<T>(uint i, GameObject prefab) where T : InventoryUIItemWrapperBase
24         {
25             T item = GameObject.Instantiate<GameObject>(prefab).GetComponent<T>();
26             item.transform.SetParent(container);
27             item.transform.localPosition = new Vector3(item.transform.localPosition.x, item.transform.localPosition.y, 0.0f);
28             item.itemCollection = this;
29             item.transform.localScale = Vector3.one;
30             item.index = i;
31
32             return item;
33         }

是不是很简单 initailCollectionSize是InventoryUI基类的一个共有field也就是说这个装备格子的数量,这个可以根据自己设计的装备窗口手动设置,然后根据这个循环调用CreateUIItem<T>泛型方法通过,GameObject.Instantiate动态实例化预设装备格子对象,并设置Parent和位置,在我看来Prefab的 GameObject.Instantiate实际是一种深克隆(如果理解错了欢迎大家拍砖)

转载于:https://www.cnblogs.com/IlidanStormRage/p/5780372.html

通用窗口类 Inventory Pro 2.1.2 Demo1(中)相关推荐

  1. 通用窗口类 Inventory Pro 2.1.2 Demo1(下)

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

  2. 【Unity3D插件】Inventory Pro插件分享《游戏背包系统》

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.前言 发现就喜欢研究这些插件,为什么呢,因为方便快捷啊.基本不用研究源代 ...

  3. Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)

    背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...

  4. 第七章:无模式对话框 和 Windows通用对话框类

    第七章:无模式对话框 和 Windows通用对话框类 1,[无模式对话框]在它处于激活状态下还允许用户在(同一个应用程序中)其它地方工作. [通用对话框]则是C++和一组Windows的实用对话框之间 ...

  5. 注册窗口类 registerclass

    window把窗口以不同的类别进行设计,通过不同的类别来管理不同的资源,体现模块化管理的思想.以mfc为例Button类别有ccheckbox,cbutton,radiobutton等 ,Static ...

  6. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇

    前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...

  7. php分页类示例下载,PHP 通用分页类的简单示例

    这篇文章主要为大家详细介绍了PHP 通用分页类的简单示例,具有一定的参考价值,可以用来参考一下.对PHP通用分页类感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 写了个php的通用分页类 ...

  8. win32开发(窗口类和窗口)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也编写win32代码,比如使用visual studio自动生成的win32框架.但是对 ...

  9. 窗口句柄、窗口类对象的关系

    HWND hwnd://窗口句柄 CWnd wnd://窗口类对象 窗口类对象中有一个成员是窗口句柄. 窗口句柄,提供了窗口的一个标识,类似于指针的概念,每一个窗口都对应了一个窗口句柄作为其标识,通过 ...

最新文章

  1. 2022-2028年中国香薰行业市场研究及前瞻分析报告
  2. 码教授告诉你人工智能如今涉及的领域你无法想象
  3. 记录避免一些逻辑问题的过程
  4. SRM 440(1-250pt, 1-500pt)
  5. a jquery 标签点击不跳转_form标签的action属性怎么用?form标签action属性的用法介绍(附实例)...
  6. linux下软件发布,Linux Kernel 5.12发布下载,附新特性及新功能介绍
  7. Redis:Cannot assign requested address的解决办法
  8. uniapp ---- 树组件
  9. 泛泰A870S官方4.4.2系统S0218210 内核版本号信息
  10. Physics Bodies(中文翻译)—UE4官方文档
  11. 浏览器插件Octotree的下载安装
  12. Excel怎么对比两个表格数据
  13. WiFi基础知识解析
  14. 【论文精读1】CSDI: Conditional Score-based Diffusion Models for Probabilistic Time Series Imputation
  15. 面试技巧之如何面试与如何应试
  16. linux scp 输入密码,scp 在脚本中使用输入密码的解决方法
  17. 如果感觉没有动力或是心情很失落,那就听听战歌吧!(可免费下载)
  18. 华为手机自带邮箱如何添加新浪邮箱账号
  19. 传输线设计的参量解析
  20. 在word如何显示左侧的索引目录

热门文章

  1. Button with Round Progress
  2. pythonlambda菜鸟教程-Python reduce() 函数
  3. 如何用Postman mock服务?
  4. [斯坦福]距离编码-更为强大的GNN
  5. SAP License:一句话让你明白FICO
  6. SAP全日志管理系统(堡垒机)
  7. 手把手教你怎么给客群分级(上)
  8. log4j.properties配置与将异常输出到Log日志文件实例
  9. 前后端数据交互之前端传值到后台
  10. static变量的作用(转)