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