unity 背包选中_Unity背包系统实现
MVC模式簡析:
Model:
BackpackConfig.json:存放裝備信息
Item:json文件對應的數據模型
View:
Scroll Rect:制作可滑動的背包面板
Grid Layout Group:管理物品的布局
Contentsize Fitter:布局管理
Toggle & ToggleGroup:切換框及其Group
Controller:
ItemManager.cs: 讀取json文件并存出到List中。
BackpackManager.cs:顯示具體的item。
ItemModel.cs:用來顯示物體的背景圖片和具體數量等外觀。
ItemDetail.cs:點擊物體時用來顯示其具體信息,如物品描述等
數據模型:
string:name(名稱),description(描述),icon(圖標),bgIcon(背景圖片),
int:id(唯一id),count(數量),quality(品階,一般分五品),operation(可進行的操作,分解,售賣,合成)
enum:type(武器,碎片,藥品))
Json文件(部分示例):
[
{"id":1,"name":"霜之哀傷",
"desc":"這是一把劍","icon":"",
"bgIcon":"", "count":,
"quanity":1,"oper":,
"type":},
{"id":2,"name":"火之高興",
"desc":"","icon":"",
"bgIcon":"","count":,
"quality":2,"oper":,
"type":}
]
Json的語法規則:
數據在鍵值對中
數據由逗號分隔
花括號保存對象
方括號保存數組
Json在unity中的使用:
LitJson是一個Json的開源項目,比較穩定,推薦使用。
下載:
官網:http://lbv.github.io/litjson/下載LitJson.dll
(網盤鏈接:http://pan.baidu.com/s/1i57ozml 密碼:eyd4)
導入:
把LitJson.dll放在unity項目的Assets-Plugin目錄下(如果沒有自行創建)
引入命名空間:
using LitJson;//導入LitJson
腳本文件示例:
public enum ItemType (枚舉類型,用來定義物品的類型,提高代碼的可讀性){
Unknow = -1,
Equip,
Medical
}
Item.cs(物品實體類):
成員字段:
數據模型里的內容,訪問修飾符為public
構造函數:
public BPItem(string name,string desc, string icon, string bgIcon,int id,int count,
int quality,int oper,int type)
成員函數:
public void TransType(int type){
//用switch語句把int類型的type轉換為ItemType類型
}
ItemManager.cs(不用繼承MonoBehaviou):
命名空間:
using System.IO;
using System.Text;
using litjson;
成員字段:
private static ItemManager instance;//單例
public List itemLists;//item實體類集合
public JsonData itemData;//用來接收讀取的json文件的數據類型
成員函數:
public staitc ItemManager Instance{get{}};//單例
public void LoadItemConfigData() //加載Json文件并初始化List
{
if (this.itemLists == null) {
this.itemLists = new List();
}
string url = Apllication.dataPath+"在unity中的文件路徑";
configJData = JsonMapper.ToObject(File.ReadAllText(str, Encoding.GetEncoding("GB2312")));//加載Json文件
}
public void DecodeConfig() {//解析JsonData為List
for (int i = 0; i < itemData.Count; i++) //遍歷訪問itemData的內容
{
int id = (int)itemData[i]["id"];//強制轉換為int類型
string name = itemData[i]["name"].ToString();//轉換為string類型
Item item = new Item();//實例化一個Item實體類
itemLists.Add(item);//添加到itemLists
}
}
BackpackManager.cs(顯示具體的背包物體,掛載在BackpackPanel上){
private List itemLists;//聲明一個List存儲ItemManager中的itemLists
//在命名空間引用UnityEngine.UI
//聲明item和ScrollRect組件,并在unity里拖曳賦值
public Transform itemTrans;
public ScrollRect itemScrollRect;
//獲取ItemDetail類,可以在unity中拖曳賦值
ItemDetail itemDeatil;
//在Awake函數中調用ItemManager單例調用加載函數
void Awake() {
ItemManager.Instance.LoadItemConfigData();//調用ItemManager中的加載方法
ItemManager.Instance.DecodeConfig();//解析Json
this.itemLists = ItemManager.Instance.itemLists;//獲取itemLists對象
}
//在每次啟用時調用,MonoBehaviou的OnEnable()函數可以在一個程序中重復調用
private void OnEnable(){
CreateAllItem();
}
//創建一個具體的item
private GameObject CreateItem() {
//實例化一個item,并設置父節點為ScrollView組件下的content
GameObject go = Instantiate(this.itemTrans.gameObject, this.itemScrollRect.content);
return go;//返回一個GameObject
}
//創建全部的item
private void CreateAllItem() {
//遍歷集合里的item并創建相關的item
for (int i = 0; i < this.itemLists.Count; i++){
Item item = itemLists[i];
GameObject go = CreateItem();//調用CraterItem函數創建一個item
ItemModel model = go.GetComponent();//獲取item身上的ItemModel腳本,后文會提到
model.SetData(item);//調用ItemModel里的SetData方法用來管理物體的背景圖片,數量等可視屬性
//獲取item身上的Button組件,動態添加點擊事件,當點擊item時顯示該物體的詳細信息面板
Button btu = go.GetComponent();
go.AddListener.OnClick(()=>
this.itemDetail.SetDetail(item);//使用Lamda表達式動態添加
);
}
}
}
ItemModel.cs(掛載在item上,用以管理物體的背景圖片,數量等可視屬性){
//提供顯示item的模板樣式,引用UnityEngine.UI命名空間,可在unity中拖曳賦值
public Image bgIcon;
public Image icon;
public Text count;
public GameObject isChip;
public void SetData(Item item) {
if (item == null) {//安全校驗
Debug.Log("item = null");
return;
}
//更改背景圖片和物體數量
this.item = item;
this.count.text = item.itemCount.ToString();
this.icon.sprites = Resources.Load("圖片在unity中的存儲路徑"+item.itemIcon.ToString());//獲得物體圖片的路徑
this.isChip.SetActive(item.itemType == BPItem.ItemType.Chips);
}
}
ItemDetail.cs(用來顯示物品的詳細信息,掛載在詳細信息面板上){
//引用UnityEngine.UI命名空間,可在unity中拖曳賦值
public Text detailText;
public void SetDetail(Item item){
if(item == null)
return;
this.detailText.text = item.desc;
}
}
總結
以上是生活随笔為你收集整理的unity 背包选中_Unity背包系统实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caffe data层_Caffe实现多
- 下一篇: foxmail卡顿_Foxmail