日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

unity 背包选中_Unity背包系统实现

發(fā)布時(shí)間:2024/9/30 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity 背包选中_Unity背包系统实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。