日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/9/30 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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背包系统实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。