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界面的切換