一、什么是UI ToolKit
1.前言
我们之前使用过的UI解决方案有UGUI,这里学习的UIToolKit是unity新推出的UI解决方案,目的是为了让我们更高效得开发出可复性性高且复杂的UI界面,在unity2021.3版本之前好像是直接可以创建好的,之前的版本是需要去unity资源商店下载。
2.UI ToolKit设计原理
二、搭建UI背包界面
创建UI界面面板,在里面可以进行UI面板的搭建,面板名称为demo,双击demo.cs文件,
[MenuItem("UI Toolkit/demo")] //和编辑器交互的,表示打开窗口的位置--这个路径跟菜单栏打开的路径一致
这个路径表示在我们菜单栏会生成UI Toolkit工具,里面存放了我们编辑好后的demo
创建ItemDataList_SO脚本,继承ScriptableObject,里面主要存放的是背包左侧列表的数据类型。并且
[CreateAssetMenu(fileName="ItemDataList_SO",menuName ="Inventory/ItemDataList")]
通过以上代码我们可以创建ItemDataList_SO,里面是一个集合,每一条数据里面存放的是左侧列表对应的数据。例如:
我们可以往ItemDataList_SO右侧添加两条数据。这个数据相当于就是临时数据库的数据,后期我们要读取这个数据文件拿到对应的值
双击ItemEditor,我们会打开UI编辑面板。
在这里我们进行UI面板的编辑,这里的具体步骤就不演示了,这种搭建的类似于将前端代码都分支成一个工具,通过点击的方式我们就可以实现很容易的排版效果。这里设计到了flex布局的知识。
创建好后,我们双击ItemRowTemplate,在这里面是我们创建的关联面板,里面有对应的模块类型。
三、背包数据初始化
1.创建DataCollection存放所有数据集合
在数据集合中创建物品详情列表
using UnityEngine;
[System.Serializable] //让下面的类在实例化的时候能够序列化,在检查器inspector能够显示出来
public class ItemDetails //物品详情信息
{
//物品id
public int ItemId;
//物品名称
public string ItemName;
//物品的类型
public ItemType Type;
//物品价格
public float Ttemprice;
//物品图片 --精灵图--显示在UI界面
public Sprite ItemTcon;
//物品在世界的图片
public Sprite ItemOnWorldIcon;
//物品可显示的网格大小
public int ItemUseRadius;
//物品的详情
public string Description;
//物品可以折扣的范围
[Range(0f, 1f)] public float PricePercentage; //等下在inspector窗口中会出现一个0-1的滚动条
//物品能否被拾取
public bool CanPickUp;
//物品能否被扔出
public bool CanDropDown;
//物品能否被举起
public bool CanCarried;
}
复制代码
2.创建Enum文件存储所有枚举类型的数据
编写存储物品类型的枚举
//Enums文件中存取了所有的枚举类型
//物品的类型
public enum ItemType
{
//种子,商品,家具,
Seed,Commodity,Furniture,
//锄头,砍树的工具,砸石头的工具,割草的工具,浇水的工具,菜篮子,可以被割的杂草
HoeTool,ChopTool,BeakTool,ReapTool,WaterTool,CollectTool,ReapableScenery
}
复制代码
3.这里出现的中括号相关的代码参考其他博客文档
4.在Script文件中创建一个inventory类库存放我们的SO数据类
5.数据列表类ItemDataList_SO
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
////让它在编辑器窗口右击创建的时候会出现ItemDataList,点击可以创建一个ItemDataList实例,显示在inspector检查器窗口中,
///文件名是ItemDataList_SO,菜单名是Inventory/ItemDataList
[CreateAssetMenu(fileName="ItemDataList_SO",menuName ="Inventory/ItemDataList")]
public class ItemDataList_SO : ScriptableObject //ItemDataListSO数据列表
{
public List<ItemDetails> ItemDataList;
}
复制代码