Unity3D UGUI與2D游戲(項(xiàng)目)UI框架

1狮鸭、搭建UI界面

1.1準(zhǔn)備工作

1、調(diào)整Game視圖中的分辨率800*480

2多搀、在 Edit --Project? Setting--Editor中歧蕉,將Mode改為2D模式

3、調(diào)整攝像機(jī)為正交攝像機(jī)康铭,調(diào)整攝像機(jī)的Clear Flags 為 Soild Color 惯退,選擇自己喜歡的顏色,調(diào)整Size 為 800/480

4从藤、創(chuàng)建一個(gè)Canvas

4.1催跪、在Canvas組件里,將Render Mode 改為 Screen Space - Camera夷野,Render Camera中拖入Main Camera

4.2懊蒸、在Canvas Scaler 組件中,UIScaleMode 改為 Scaler With Screen Size悯搔,把Refernce ?Ressolution 改為 與分變率一致800*480骑丸,因?yàn)槭菣M屏的Match選擇 Weight=1

1.2、搭建界面(展示一下效果圖)

開(kāi)始界面:

選項(xiàng)界面:


2、UIManager:UI界面的切換

2.1者娱、 首先創(chuàng)建兩個(gè)腳本 UIBase抡笼,UIManager,一個(gè)空的游戲?qū)ο驧anager,UIManager掛載到Manager

UIbase:

public class UIBase : MonoBehaviour {

? ? ? ? public virtual void UserInterfaceEnter(){}

? ? ? ?public virtual void UserInterfacePause(){}

? ? ? ?public virtual void UserInterfaceResume(){}

? ? ? ?public virtual void UserInterfaceExit(){}

}

UImaneger:

第一步創(chuàng)建腳本的單例:

static UIManager instance;

public static UIManager Instance{

get{return instance;}

}

void Awake(){

instance = this;

// ?下面兩行代碼是加載UI界面

LoadUIPerfabByName ("UIstart");

LoadUIPerfabByName ("UIoption");

}

第二步:UI界面的顯示就好比棧的形式黄鳍,使用棧來(lái)控制

Stack<UIBase> ?UIStack =new Stack<UIBase>();

// 界面入棧:讓界面顯示出來(lái)

public void PushUserInterface(string UIName){

if (UIStack.Count>0) {

UIBase old_UI = UIStack.Peek ();

old_UI.UserInterfacePause ();

}

UIBase newUI = InstantiateUIByName (UIName); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//InstantiateUIByName方法:創(chuàng)建UI界面

UIStack.Push (newUI);

newUI.UserInterfaceEnter (); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 通過(guò)UserInterfaceEnter這個(gè)方法顯示界面

}

// 界面出棧:讓界面不顯示出來(lái)

public void PopUserInterface(){

if (UIStack.Count == 0)

{return;}

UIBase old_UI = UIStack.Pop ();

old_UI.UserInterfaceExit ();

if (UIStack.Count>0) {

UIBase newUI = UIStack.Peek();

newUI.UserInterfaceResume ();

? ? ? ? ? }

}

// ? InstantiateUIByName方法:創(chuàng)建UI界面

Dictionary<string,UIBase> currentUIDict =new Dictionary<string,UIBase>(); ? ? // ? 存儲(chǔ)到當(dāng)前為止推姻,所有已出現(xiàn)過(guò)的UI界面的字典

public UIBase InstantiateUIByName(string UIName){?

if (currentUIDict.ContainsKey(UIName)) {

return currentUIDict [UIName];

}

GameObject objPrefab = UIobject[UIName] ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // ? UIobject:一個(gè)存儲(chǔ)所有已加載界面的字典

GameObject obj = GameObject.Instantiate (objPrefab);

UIBase uibase = obj.GetComponent();

currentUIDict.Add (UIName, uibase);

obj.name = UIName;

return uibase;

}

//? 創(chuàng)建UIobject:一個(gè)存儲(chǔ)所有已加載界面的字典

public ? string perfabDir ="Perfab";

Dictionary<string,GameObject>UIobject =new Dictionary<string,GameObject>();

void LoadUIPerfabByName(string UIName){

if (UIobject.ContainsKey(UIName))

?{return;}

string path =perfabDir+"/"+UIName;

GameObject UIobj = Resources.Load(path);

if (UIobj!=null) {

UIobject.Add (UIName, UIobj);}

}

2.2、創(chuàng)建UIOption框沟、UIStart腳本藏古,分別掛載到Option和Start UI界面

UIStart:

public override void UserInterfaceEnter (){

GetComponent().worldCamera = Camera.main;

gameObject.SetActive (true);}

public override void UserInterfacePause ()

{gameObject.SetActive (false);}

public override void UserInterfaceResume ()

{gameObject.SetActive (true);}

public override void UserInterfaceExit ()

{gameObject.SetActive (false);}

//UIStart界面 ? ? 選項(xiàng)Button添加監(jiān)聽(tīng)事件

public void GoToOptionUI(){

UIManager.Instance.PushUserInterface ("UIoption");

}

UIOption:

public override void UserInterfaceEnter (){

GetComponent().worldCamera = Camera.main;

gameObject.SetActive (true);}

public override void UserInterfacePause ()

{gameObject.SetActive (false);}

public override void UserInterfaceResume ()

{gameObject.SetActive (true);}

public override void UserInterfaceExit ()

{gameObject.SetActive (false);}

// ?Option界面:后退Button添加監(jiān)聽(tīng)事件

public void Back(){

UIManager.Instance.PopUserInterface ();

}

到這一步,就完成了兩個(gè)UI界面的切換

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忍燥,一起剝皮案震驚了整個(gè)濱河市拧晕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梅垄,老刑警劉巖厂捞,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異队丝,居然都是意外死亡靡馁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門机久,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)臭墨,“玉大人,你說(shuō)我怎么就攤上這事膘盖‰食冢” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵侠畔,是天一觀的道長(zhǎng)结缚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)践图,這世上最難降的妖魔是什么掺冠? 我笑而不...
    開(kāi)封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮码党,結(jié)果婚禮上德崭,老公的妹妹穿的比我還像新娘。我一直安慰自己揖盘,他們只是感情好眉厨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著兽狭,像睡著了一般憾股。 火紅的嫁衣襯著肌膚如雪鹿蜀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天服球,我揣著相機(jī)與錄音茴恰,去河邊找鬼。 笑死斩熊,一個(gè)胖子當(dāng)著我的面吹牛往枣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粉渠,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼分冈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了霸株?” 一聲冷哼從身側(cè)響起雕沉,我...
    開(kāi)封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎去件,沒(méi)想到半個(gè)月后坡椒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箫攀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肠牲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靴跛。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渡嚣,靈堂內(nèi)的尸體忽然破棺而出梢睛,到底是詐尸還是另有隱情,我是刑警寧澤识椰,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布绝葡,位于F島的核電站,受9級(jí)特大地震影響腹鹉,放射性物質(zhì)發(fā)生泄漏藏畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一功咒、第九天 我趴在偏房一處隱蔽的房頂上張望愉阎。 院中可真熱鬧,春花似錦力奋、人聲如沸榜旦。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溅呢。三九已至澡屡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咐旧,已是汗流浹背驶鹉。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铣墨,地道東北人梁厉。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踏兜,于是被迫代替她去往敵國(guó)和親词顾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 寫框架就相當(dāng)與管理一個(gè)公司碱妆,如何能夠使公司正常運(yùn)轉(zhuǎn)并且井井有條肉盹?在寫框架的時(shí)候,可以以全局的眼光和思維思考問(wèn)題疹尾,這...
    菊妙君嬌閱讀 3,237評(píng)論 0 0
  • 框架思路: 1.創(chuàng)建一個(gè)綜合管理類(UIManager)來(lái)管理全部的界面操作 設(shè)置單例 2.創(chuàng)建一個(gè)基類UIBas...
    你這樣我很吃驚閱讀 552評(píng)論 0 1
  • 效果圖,素材是網(wǎng)上隨便拉的 這是運(yùn)行后的Hierarchy的界面,其中最下面的Item是放在攝像機(jī)不能拍到的位置,...
    Unity學(xué)習(xí)的路上閱讀 6,320評(píng)論 1 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理上忍,服務(wù)發(fā)現(xiàn),斷路器纳本,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 清晨窍蓝,迎著朝陽(yáng),你大步大步地向前走繁成。 初升的太陽(yáng),在你的背后面睛,投下了淺淺的影叁鉴, 發(fā)梢的汗珠在晨光里,躍動(dòng)著佛寿,金金閃...
    毛栗小呀蟈閱讀 220評(píng)論 2 4