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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径

發(fā)布時間:2025/3/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

01.概念:管理場景中所有的面板,控制面板之間的跳轉(zhuǎn)

02.項目層級目錄:

Resources:存放UIPanel,習(xí)慣把所有的一個個面板做成預(yù)制源,使用時加載

Scenes:存放場景

UIFrameWork:單獨的文件,存放UI框架的文件夾,方便以后導(dǎo)出給別的項目使用

?

架構(gòu)圖:

?

?

?

03.設(shè)計主菜單(將所有的面板設(shè)置為prefab)

canvas scales中UI scale model設(shè)置為 Constane Pixel Size表示窗口像素大小與實際運行的界面像素一樣,但是UI組件比如Text不會改變(字體固定的)。

scale with screen size:隨著屏幕的大小變化,所有的UI組件都會改變,分為根據(jù)高度與寬度適配,高度適配就是ui隨著高度的變化而變化,寬度變化是不會影響UI的,設(shè)置match屬性。

?

設(shè)置UI時按住shift:等比例縮放,ctrl:中心縮放

?

04.框架開發(fā)之保存面板信息(通過json和枚舉)

層級結(jié)構(gòu):

首先創(chuàng)建面板枚舉類UIPanelType(一個面板對應(yīng)一個枚舉成員):

1 using UnityEngine; 2 using System.Collections; 3 using System; 4 5 6 public enum UIPanelType { 7 ItemMessage, 8 Knapsack, 9 MainMenu, 10 Shop, 11 Skill, 12 System, 13 Task 14 }

創(chuàng)建文本文件,保存面板的類型和路徑(這樣面板只要放在Resources文件夾下,路徑保存好可以隨意放,寫完一個Json文檔后可以百度Json校驗檢查是否正確:http://www.json.cn/):

注意:因為用JsonUtility解析json文件,不是別數(shù)組的格式,要把數(shù)組包裝成一個對象就是外面加{}。同時在VS編輯json文件一般會保存成以前的目錄(如果你一直沒有移動不會有問題,比如這個項目移動到了resource文件夾下,但是還是會保存在它初始創(chuàng)建的文件夾,這樣識別的還是前面的文件,還是會有同樣的錯誤)。

? 解析Json文件得到面板路徑:

? ? ?首先創(chuàng)建json腳本對應(yīng)的類UIPanelInfo:

? ??

1 using UnityEngine; 2 using System.Collections; 3 using System; 4 //序列化:把內(nèi)存上的東西放在硬盤上成為文本文件,命名空間using System; 5 //ISerializationCallbackReceiver:接口,實現(xiàn)OnAfterDeserialize OnBeforeSerialize兩個方法,與JsonUtility相對應(yīng),是其擴展自定義的內(nèi)容 6 [Serializable] 7 public class UIPanelInfo :ISerializationCallbackReceiver { 8 [NonSerialized] 9 //注意要跟json腳本里面的類型對應(yīng),否則無法解析,json文件就相當于UIPanelInfo類型數(shù)組 10 public UIPanelType panelType;//不能解析該類型,因此讓其不序列化和反序列化 11 public string panelTypeString; 12 //{ 13 // get //進行序列化 14 // { 15 // return panelType.ToString(); 16 // } 17 // set//進行反序列化 18 // { 19 // UIPanelType type =(UIPanelType)System.Enum.Parse(typeof(UIPanelType), value);//寫在這時候不會調(diào)用這個方法 20 // panelType = type; 21 // } 22 //} 23 public string path; 24 25 // 反序列化成功會調(diào)用該方法 反序列化:從文本信息 到對象的過程 相當于set方法 26 public void OnAfterDeserialize() 27 { 28 UIPanelType type = (UIPanelType)System.Enum.Parse(typeof(UIPanelType), panelTypeString);//把字符串轉(zhuǎn)換成枚舉類型,枚舉類型無法使用as,只能強轉(zhuǎn) 29 panelType = type; 30 } 31 //在序列化之前調(diào)用 相當于get方法 32 public void OnBeforeSerialize() 33 { 34 35 } 36 }

?

? ? ? 建立UIManager腳本讀取面板類型和信息:

?

1 using UnityEngine; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System; 5 6 public class UIManager { 7 private Dictionary<UIPanelType, string> panelPathDict;//存儲所有面板Prefab的路徑 8 [Serializable] 9 //UIPanelInfo類,json腳本整體對應(yīng)的一個類,即解析json腳本得到就是這個類的對象 10 class UIPanelTypeJson 11 { 12 public List<UIPanelInfo> infoList; 13 } 14 private void ParseUIPanelTypeJson() 15 { 16 panelPathDict = new Dictionary<UIPanelType, string>(); 17 18 TextAsset ta = Resources.Load<TextAsset>("UIPanelType");//加載進來就是TextAsset類型 19 20 UIPanelTypeJson jsonObject = JsonUtility.FromJson<UIPanelTypeJson>(ta.text);//注意<>里面一定要傳類,//會調(diào)用反序列化 序列化方法 21 22 foreach (UIPanelInfo info in jsonObject.infoList) 23 { 24 //Debug.Log(info.panelType); 25 panelPathDict.Add(info.panelType, info.path);//字典方便用類型找到路徑 26 } 27 } 28 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/dsh20134584/p/7338671.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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