- Unity游戲案例開發大全
- 吳亞峰 杜化美 于復興編著
- 692字
- 2019-01-02 05:50:19
3.4 菜單界面
前一小節介紹了游戲的整體架構,從本節開始將介紹本案例場景的開發。首先介紹本案例的主菜單場景,該場景在游戲開始時呈現,控制所有界面之間的跳轉,主要開發步驟介紹如下。
3.4.1 創建項目
在這一小節首先對項目的新建以及資源的準備進行詳細的介紹,讀者可以通過一些基本的操作,對該游戲的開發有一個較好的開始。詳細步驟如下。
(1)新建項目文件夾。首先在電腦的某個磁盤下新建一個空的文件夾“Table3D”,筆者的項目文件夾新建在“F:\U3D”文件夾下,如圖3-20所示。

▲圖3-20 新建項目文件夾
(2)新建工程。雙擊桌面的Unity快捷方式打開Unity,選擇“Create New Project”,然后單擊“Browse...”按鈕選擇剛剛新建的“PlayBox”空文件夾,最后單擊“Create”按鈕,如圖3-21所示。

▲圖3-21 新建工程
(3)導入資源。將本游戲所要用到的資源分類整理好,然后將分類好的資源都復制到項目文件夾下的“Assets”文件夾下,如圖3-22所示。

▲圖3-22 導入資源
說明
本游戲中所有的資源文件都已經整理好了,放在“第03章/資源包”文件夾下。讀者可自行將“第03章/資源包”文件夾下的所有文件夾復制到項目文件夾下的“Assets”文件夾下。
(4)創建腳本文件夾。在項目資源列表中,單擊鼠標右鍵,在彈出的菜單中選擇“Create”→“Folder”,創建腳本文件夾,命名為“Scripts”,如 圖3-23所示。并用同樣的方法,在Scripts文件夾下創建“MenuScript”腳本文件夾和“GameScript”腳本文件夾,如圖3-24所示。

▲圖3-23 創建腳本文件夾

▲圖3-24 創建兩個文件夾
(5)創建腳本。單擊項目資源列表中的MenuScript文件夾,單擊鼠標右鍵,在彈出的菜單中選擇“Create”→“C# Script”,創建腳本,如圖3-25所示。將腳本命名為“ConstOfMenu.cs”,如圖3-26所示。創建好腳本后,就可以根據游戲開發的相應需要進行編寫了。

▲圖3-25 創建腳本

▲圖3-26 腳本
(6)保存場景。單擊菜單欄“File”→“Save Scene”,如圖3-27所示。在彈出的界面中選擇路徑,后輸入“MainMenus”,單擊“保存”按鈕,如圖3-28所示,即成功保存下一個主菜單場景。

▲圖3-27 選擇保存

▲圖3-28 保存場景
3.4.2 主菜單場景
前一小節,大家已經對項目的初始化有了很好的理解,下面開始介紹主菜單界面的開發,以及本游戲主菜單界面的開發所需要的各個腳本的功能。
(1)創建點光源。由于本游戲主菜單背景為一個3D立體房間,所以需要一個點光源,使畫面清晰明亮。選擇“GameObject”→“Create Other”→“Point Light”,如 圖3-29所示。調整點光源位置,如圖3-30所示。

▲圖3-29 創建點光源

▲圖3-30 點光源位置擺放
(2)創建房間。本游戲開發的主菜單界面背景是一個3D立體房間,并存在小球和三個木箱。首先創建房間所需的Cue,然后調整位置、姿態、大小,如圖3-31所示。

▲圖3-31 創建房間
(3)為房間貼紋理。將房間紋理拖曳到房間模型上,如圖3-32所示。其中,房間背景墻與其他四面墻的貼圖不同。

▲圖3-32 房間貼紋理
(4)創建小球和木箱。選擇“GameObject”→“Create Other”→“ Sphere”,并命名為“Ball”,如圖3-33所示。創建四個木箱,選擇“GameObject”→“Create Other”→“Cube”,并命名為“Box”,如圖3-34所示。調整它們的位置姿態大小,如圖3-35所示。

▲圖3-33 創建小球

▲圖3-34 創建木箱

▲圖3-35 小球木箱擺放位置
(5)添加球體碰撞器。由于球桌需發生碰撞并反彈,所以要為其添加球體碰撞器。首先選中“Ball”游戲對象,然后選擇“Component”→“Physics”→“Sphere Collider”,Material則選擇為Bouncy。具體情況如圖3-36所示。

▲圖3-36 添加球體碰撞器
(6)添加剛體。首先選中四個“Box”對象,然后選擇“Component”→“Physics”→“Rigidbody”選項,具體情況如圖3-37所示。

▲圖3-37 添加剛體
(7)編寫常量類腳本。雙擊“ConstOfMenu.cs”腳本,進入“MonoDevelop”編輯器中,開始腳本的編寫。該腳本主要負責初始化游戲開發所需用的各類常量。詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的ConstOfMenu.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class ConstOfMenu : MonoBehaviour 4 { 5 public static float desiginWidth = 854.0f; //標準屏寬度 6 public static float desiginHeight = 480.0f; //標準屏高度 7 public static int START_BUTTON = 0; //開始按鈕圖片索引 8 public static int MUSSIC_BUTTON = 1; //音樂設置按鈕圖片索引 9 public static int HELP_BUTTON = 2; //幫助按鈕圖片索引 10 public static int ABOUT_BUTTON = 3; //關于按鈕圖片索引 11 public static int QUIT_BUTTON = 4; //退出游戲按鈕圖片索引 12 public static int BACK_BUTTON = 0; //返回按鈕圖片索引 13 public static int ONE_BUTTON = 0; //關卡一按鈕圖片索引 14 public static int TWO_BUTTON = 1; //關卡二按鈕圖片索引 15 public static int GAME_BACK=0; //返回按鈕圖片索引 16 public static int ANGLE_OF_VIEW=1; //視角切換按鈕圖片索引 17 public static int UP_BUTTON = 2; //向上按鈕圖片索引 18 public static int DOWN_BUTTON = 3; //向下按鈕圖片索引 19 public static int LEFT_BUTTON = 4; //向左按鈕圖片索引 20 public static int RIGHT_BUTTON = 5; //向右按鈕圖片索引 21 public static int HELP_BACK=0; //返回按鈕圖片索引 22 public static int HELP_DOWN=1; //向下翻頁按鈕圖片索引 23 public static int HELP_UP=1; //向上翻頁按鈕圖片索引 24 public static int GAMERESULT_BACK_BUTTON = 0; //返回按鈕圖片索引 25 public static int GAMERESULT_REPEAT_BUTTON = 1;//重玩按鈕圖片索引 26 public static int GAMERESULT_NEXT_BUTTON = 2; //繼續按鈕圖片索引 27 public static int GAMEONE_INDEX; //索引 28 }
第4行~第15行聲明了標準屏的高度寬度,有便于后續代碼開發使用。同時聲明了主界面菜單的五個按鈕,分別為開始游戲按鈕、退出游戲按鈕、音樂設置按鈕、幫助按鈕和關于按鈕。同時聲明了關卡返回按鈕等。
第16行~第20行聲明了游戲關卡界面中調整視野范圍的按鈕,包括將攝像頭向上、向下、向左和向右移動的按鈕,以及俯瞰和近視兩個界面的切換按鈕。
第21行~第27行聲明了幫助界面上下翻頁的兩個按鈕,和返回主界面按鈕索引。同時聲明了游戲勝利和游戲結束兩個界面的返回按鈕、重玩按鈕以及繼續按鈕。
(8)掛載常量類腳本。將Project界面內的常量腳本拖曳到游戲對象“Main Cemera”上,如圖3-38和圖3-39所示的腳本掛載。

▲圖3-38 腳本掛載1

▲圖3-39 腳本掛載2
(9)編寫主菜單界面腳本“MainLayer.cs”,該腳本主要負責繪制主菜單界面上的按鈕。創建腳本以及腳本掛載過程前面已經詳細介紹,這里不再贅述。詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的MainLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class MainLayer : MonoBehaviour { 4 public Texture backgroundOfMainMenu; //菜單界面背景圖片 5 public GUIStyle[] buttonStyleOfMain; //菜單界面按鈕圖樣式 6 void Start () {} 7 void OnGUI() 8 { 9 GUI.DrawTexture(newRect(18*Screen.width/100,8*Screen.height/100, //繪制背景圖片 10 66*Screen.width/100,35*Screen.height/100), backgroundOfMainMenu); 11 DrawMainMenu(); //調用繪制界面方法 12 } 13 void DrawMainMenu() //繪制主菜單界面 14 { 15 if (GUI.Button(new Rect(91*Screen.width/100,0*Screen.height/100, 16 9*Screen.width/100,16*Screen.height/100), "", 17 buttonStyleOfMain[ConstOfMenu.QUIT_BUTTON])) {//繪制退出游戲按鈕 18 Application.Quit(); //退出程序 19 } 20 if (GUI.Button(new Rect(45*Screen.width/100,42*Screen.height/100, 21 14*Screen.width/100,25*Screen.height/100), "", 22 buttonStyleOfMain[ConstOfMenu.START_BUTTON])) {//繪制開始按鈕 23 Application.LoadLevel("GamesMenu"); //加載選擇關卡界面 24 Destroy(this); 25 } 26 if (GUI.Button(new Rect(1*Screen.width/100,46*Screen.height/100, 27 9*Screen.width/100,16*Screen.height/100), "", 28 buttonStyleOfMain[ConstOfMenu.MUSSIC_BUTTON])) { //繪制設置按鈕 29 Application.LoadLevel("SetMusic"); //加載設置界面 30 Destroy(this); 31 } 32 if (GUI.Button(new Rect(1*Screen.width/100,64*Screen.height/100, 33 9*Screen.width/100,16*Screen.height/100),"", 34 buttonStyleOfMain[ConstOfMenu.HELP_BUTTON])) {//繪制幫助按鈕 35 Application.LoadLevel("HelpGames"); //加載幫助界面 36 Destroy(this); 37 } 38 if (GUI.Button(new Rect(1*Screen.width/100,82*Screen.height/100, 39 9*Screen.width/100,16*Screen.height/100), 40 "", buttonStyleOfMain[ConstOfMenu.ABOUT_BUTTON])){//繪制關于按鈕 41 Application.LoadLevel("AboutGames"); //加載關于界面 42 Destroy(this); 43 }} 44 void Update() { 45 if(Input.GetKeyDown(KeyCode.Escape)){ //如果按下返回鍵 46 Application.Quit(); //游戲退出 47 }}}
第4行~第12行聲明菜單界面背景圖片以及菜單界面按鈕樣式,同時在“OnGUI”方法中繪制背景圖片,并調用繪制界面方法,繪制主菜單界面。
第13行~第31行繪制了退出游戲按鈕、開始游戲按鈕以及設置按鈕。用戶單擊退出游戲按鈕,便會退出游戲。用戶單擊開始游戲按鈕,便會加載選擇關卡界面。用戶單擊“設置”按鈕,加載音樂開關設置界面。
第32行~第46行繪制了幫助界面按鈕、關于界面按鈕和返回鍵按鈕。用戶單擊幫助按鈕,便加載幫助界面,用戶可以查看相關操作內容。單擊關于按鈕,可以查看游戲相關信息。單擊返回鍵,就會退出游戲。
(10)主菜單界面腳本變量賦值。在該腳本中,需要為游戲標題選擇貼圖以及五個按鈕。首先打開Select Texture列表,然后選擇相應貼圖,如圖3-40所示。

▲圖3-40 主菜單界面腳本變量賦值
(11)編寫背景音樂腳本。該腳本主要負責開始游戲后背景音樂的播放與否。根據音樂設置界面傳遞的參數,判斷音樂開關與否,詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的StartMusic.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class StartMusic : MonoBehaviour { 4 public AudioSource MyAudioSource; //聲明游戲背景音 5 void Start () { 6 DontDestroyOnLoad(transform.gameObject); //保留游戲對象 7 if(PlayerPrefs.GetInt("offMusic") == 0) //若音樂索引為0 8 { 9 MyAudioSource.Play(); //播放音樂 10 }} 11 void Update () { 12 if(PlayerPrefs.GetInt("offMusic") != 0) { //若音樂索引為1 13 this.audio.Pause(); //音樂暫停 14 } 15 var cameras=GameObject.FindGameObjectsWithTag("themain");//攝像機列表 16 if(cameras.Length>1) { //若攝像機多于1個 17 GameObject.Destroy(cameras[0]); //多余的刪除 18 }}}
第4行~第9行聲明了游戲背景素材索引,腳本開始方法中,保留掛載音樂的游戲對象,若音樂索引為0,就開始播放音樂。
第11行~第17行判斷音樂索引為1,音樂就暫停。同時索取當前場景的攝像機列表,將多余的攝像機游戲對象刪除,這樣就能保留一個音樂軌道。
(12)編寫小球滾動腳本。該腳本主要負責小球根據重力移動。由于手機傾斜度不同,小球不是勻速移動,因此要根據重力加速度為其施加不同速度。詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的BallWalk.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class BallWalk : MonoBehaviour { 4 public float speed = 10.0f; //聲明速度 5 private Vector3 dir = Vector3.zero; //聲明三維方向向量 6 void Start () {} 7 void Update () { 8 dir.x=Input.acceleration.x; //獲取X軸重力 9 dir.z=Input.acceleration.y; //獲取Z軸重力 10 dir.y=Input.acceleration.y; //獲取Y軸重力 11 this.rigidbody.AddForce(dir.x*speed,dir.y*speed,dir.z*speed);//為小球施加力 12 }}
說明
由于小球根據重力移動,將初始速度定為10.0f,同時聲明X,Y和Z3個方向向量。根據手機傾斜度,判斷小球重力加速度,然后調整小球位置。
3.4.3 菜單界面其他場景
前一小節詳細介紹了主菜單場景的設計、腳本編寫、變量賦值和掛載的主要步驟,下面開始介紹幾個子菜單場景的開發,這幾個子菜單場景設計較簡單,但也是游戲開發的重要部分。
(1)音樂設置場景腳本編寫。該腳本主要負責繪制和控制游戲背景音樂開關設置,腳本詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的MusicLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class MusicLayer : MonoBehaviour 4 { 5 public Texture backgroundOfMusicLayer; //菜單界面背景圖片 6 public Texture2D[] musicBtns; //聲明音樂按鈕數組 7 public Texture2D musicTex; //聲音按鈕對應的圖片 8 public Texture2D[] effectBtns; //聲明音效按鈕數組 9 public Texture2D effectTex; //音效按鈕對應的圖片 10 private int effectIndex; //音效索引 11 private int musicIndex; //音樂索引 12 public GUIStyle btStyle; //按鈕樣式 13 public GUIStyle[] buttonStyleOfMusicLayer; //菜單界面按鈕圖樣式 14 void Start(){ 15 effectIndex = PlayerPrefs.GetInt("offEffect"); //初始化音效索引 16 musicIndex = PlayerPrefs.GetInt("offMusic"); //初始化音樂索引 17 } 18 void OnGUI() 19 { 20 GUI.DrawTexture(new Rect(0,0,1*Screen.width, 21 1*Screen.height), backgroundOfMusicLayer); //繪制背景圖片 22 GUI.DrawTexture(new Rect(30*Screen.width/100,15*Screen.height/100, 23 30*Screen.width/100,20*Screen.height/100), musicTex); 24 if (GUI.Button(new Rect(65*Screen.width/100,14*Screen.height/100, 25 13*Screen.width/100,20*Screen.height/100), 26 musicBtns[musicIndex % 2], btStyle)){ 27 musicIndex++; //按鈕索引加一 28 PlayerPrefs.SetInt("offMusic", musicIndex % 2); //將新的按鈕索引存入prefer中 29 } 30 GUI.DrawTexture(new Rect(30*Screen.width/100,40*Screen.height/100, //繪制顯示圖片 31 30*Screen.width/100,20*Screen.height/100), effectTex); 32 if (GUI.Button(new Rect(65*Screen.width/100,40*Screen.height/100, 33 13*Screen.width/100,20*Screen.height/100), 34 effectBtns[effectIndex % 2], btStyle)){ 35 effectIndex++; //按鈕索引加一 36 PlayerPrefs.SetInt("offEffect", effectIndex % 2); //將新的按鈕索引存入prefer中 37 } 38 if (GUI.Button(new Rect(91*Screen.width/100,0*Screen.height/100, 39 9*Screen.width/100,16*Screen.height/100), //繪制返回按鈕 40 "", buttonStyleOfMusicLayer[ConstOfMenu.BACK_BUTTON])){ 41 Application.LoadLevel("MainMenus"); //返回主菜單界面 42 }} 43 void Update() { 44 if(Input.GetKeyDown(KeyCode.Escape)){ //如果按下返回鍵 45 Application.LoadLevel("MainMenus"); //加載主菜單界面 46 }}}
第5行~第13行聲明了菜單界面背景圖片、音樂按鈕數組和音樂按鈕對應的圖片、音效按鈕數組和音效按鈕對應的圖片,以及音樂音效的索引和菜單界面按鈕圖樣式。
第14行~第23行表示在“Start”方法中初始化音樂索引和音效索引,這些索引用于判斷游戲初始化的時候音樂音效是開啟或者關閉。同時在“OnGUI”方法中繪制了該界面的背景圖片。
第24行~第41行繪制了音樂按鈕數組和音樂按鈕對應的圖片、音效按鈕數組和音效按鈕對應的圖片,當用戶單擊的時候,每個按鈕索引加1,表示隨時切換對應圖片,同時將索引存入PlayerPrefs。方便其他代碼部分使用。
第43行~第45行表示當用戶按下返回鍵的時候,游戲退出音樂設置界面,返回主菜單界面,并且加載主菜單界面的場景。
(2)設置場景腳本變量賦值和掛載。該腳本掛載在“Main Camera”攝像機游戲對象上,腳本變量賦值如圖3-41所示,掛載步驟在前面詳細介紹過,這里不再贅述。

▲圖3-41 設置場景腳本變量賦值
(3)幫助場景腳本編寫。該場景主要負責介紹游戲相關玩法。在該場景中有兩個“Plane”對象,貼圖為幫助界面背景素材圖。同時有一個“Main Camera”攝像機游戲對象,在該游戲對象上掛載了“HelpLayer”腳本組件,腳本詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的HelpLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class HelpLayer : MonoBehaviour { 4 public GameObject[] cameras; //攝像機列表 5 public GUIStyle[] buttonStyleOfHelpLayer; //菜單界面按鈕圖樣式 6 public static int curCam = 0; //當前攝像機編號 7 void Start () {} 8 void OnGUI(){ 9 if (GUI.Button(new Rect(91*Screen.width/100,0*Screen.height/100, 10 9*Screen.width/100,16*Screen.height/100), "", //繪制返回按鈕 11 buttonStyleOfHelpLayer[ConstOfMenu.HELP_BACK])) {//若選擇返回按鈕 12 Application.LoadLevel("MainMenus"); //返回主菜單界面 13 } 14 if (GUI.Button(new Rect(91*Screen.width/100,18*Screen.height/100, 15 9*Screen.width/100,16*Screen.height/100), "", //繪制向下翻頁按鈕 16 buttonStyleOfHelpLayer[ConstOfMenu.HELP_DOWN])) { //若選擇該按鈕 17 ChangeCam(1); //切換攝像機 18 }} 19 public void ChangeCam(int index){ //切換攝像機方法 20 cameras[curCam].SetActive(false); //設置當前攝像機不可用 21 cameras[index].SetActive(true); //啟用相應攝像機 22 } 23 void Update() { 24 if(Input.GetKeyDown(KeyCode.Escape)){ //若按下返回鍵 25 Application.LoadLevel("MainMenus"); //返回主菜單界面 26 }}}
第4行~第6行聲明了攝像機列表,存在兩個攝像機,用于切換鏡頭,實現幫助界面翻頁功能。同時聲明了菜單界面按鈕圖樣式和當前攝像機編號。
第8行~第18行繪制了幫助界面的返回按鈕,用于返回主菜單界面,以及向下翻頁按鈕,用于實現翻頁功能。在用戶按下翻頁按鈕的同時,會切換當前攝像機。
第19行~第25行是切換攝像機的方法,即關閉當前攝像機,激活另一個編號的攝像機。由于兩個攝像機所對應的畫面不同,也就間接實現了幫助界面的翻頁功能。
(4)在幫助場景中,為了實現用戶單擊翻頁按鈕,進行翻頁的功能,該場景有一個“Camera”攝像機游戲對象,并被掛載了“HelpLayerBack”腳本組件,腳本詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的HelpLayerBack.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class HelpLayer : MonoBehaviour { 4 public GameObject[] cameras; //攝像機列表 5 public GUIStyle[]buttonStyleOfHelpLayerBack; //菜單界面按鈕圖樣式 6 public static int curCam = 0; //當前攝像機編號 7 void Start () {} 8 void OnGUI(){ 9 if (GUI.Button(new Rect(91*Screen.width/100,0*Screen.height/100, 10 9*Screen.width/100,16*Screen.height/100), "", //繪制返回按鈕 11 buttonStyleOfHelpLayerBack [ConstOfMenu.HELP_BACK])){//若選擇返回按鈕 12 Application.LoadLevel("MainMenus"); //返回主菜單界面 13 } 14 if (GUI.Button(new Rect(91*Screen.width/100,18*Screen.height/100, 15 9*Screen.width/100,16*Screen.height/100), "", //繪制向上翻頁按鈕 16 buttonStyleOfHelpLayerBack [ConstOfMenu.HELP_DOWN])) { //若選擇該按鈕 17 ChangeCam(0); //切換攝像機 18 }} 19 public void ChangeCam(int index) { //切換攝像機方法 20 cameras[curCam].SetActive(false); //設置當前攝像機不可用 21 cameras[index].SetActive(true); //啟用相應攝像機 22 } 23 void Update() { 24 if(Input.GetKeyDown(KeyCode.Escape)){ //若按下返回鍵 25 Application.LoadLevel("MainMenus"); //返回主菜單界面 26 }}}
第4行~第6行聲明了攝像機列表,存在兩個攝像機,用于切換鏡頭,實現幫助界面翻頁功能。同時聲明了菜單界面按鈕圖樣式和當前攝像機編號。
第8行~第17行繪制了幫助界面的返回按鈕,用于返回主菜單界面,以及向上翻頁按鈕,用于實現翻頁功能。在用戶按下翻頁按鈕的同時,會切換當前攝像機。
第20行~第25行是切換攝像機的方法,即關閉當前攝像機,激活另一個編號的攝像機。由于兩個攝像機所對應的畫面不同,也就間接實現了幫助界面的翻頁功能。
(5)幫助場景翻頁設計。由于在幫助場景中實現了翻頁的功能,所以兩個攝像機游戲對象的設置不同,要去掉“Camera”游戲對象屬性查看器中對象名稱前單選框中的對勾,保留“Main Camera” 對象名稱前單選框中的對勾,如圖3-42、圖3-43所示。

▲圖3-42 去掉單選框的對勾

▲圖3-43 保留單選框的對勾
(6)幫助場景腳本變量賦值。“HelpLayer.cs”和“HelpLayerBack.cs”兩個腳本分別掛載在“Main Camera”攝像機游戲對象和“Camera”攝像機游戲對象上,腳本變量賦值如圖3-44、圖3-45所示。

▲圖3-44 腳本變量賦值

▲圖3-45 腳本變量賦值
(7)關于場景制作。該場景主要負責介紹游戲相關版權等。在該場景中有一個“Main Camera”攝像機游戲對象,在該游戲對象上掛載了“AboutLayer”腳本組件,腳本詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的AboutLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class AboutLayer : MonoBehaviour { 4 public Texture aboutOfAboutLayer; //關于界面背景圖片 5 public GUIStyle[] buttonStyleOfAboutLayer; //菜單界面按鈕圖樣式 6 void Start () {} 7 void OnGUI() //繪制方法 8 { 9 GUI.DrawTexture(new Rect(0,0,1*Screen.width, 10 1*Screen.height), aboutOfAboutLayer); //繪制背景圖片 11 if (GUI.Button(new Rect(1*Screen.width/100,75*Screen.height/100, 12 17*Screen.width/100,20*Screen.height/100), "", 13 buttonStyleOfAboutLayer[ConstOfMenu.BACK_BUTTON])){//如果選擇返回鍵 14 Application.LoadLevel("MainMenus"); //返回主菜單界面 15 }} 16 void Update() { 17 If(Input.GetKeyDown(KeyCode.Escape)){ //如果按下返回鍵 18 Application.LoadLevel("MainMenus"); //返回主菜單界面 19 }}}
第4行~第10行聲明了關于界面的背景圖片以及該界面的按鈕樣式,同時在“OnGUI”繪制方法中,繪制了關于界面的背景圖片。
第11行~第18行繪制了返回按鈕圖片,同時當用戶單擊該按鈕的時候加載主菜單界面。當用戶按下返回鍵的時候,游戲返回主菜單界面。
(8)關于場景腳本變量賦值。該腳本掛載在“Main Camera”攝像機游戲對象上,腳本變量賦值如圖3-46所示。掛載步驟在前面詳細介紹過,這里不再贅述。

▲圖3-46 關于場景腳本變量賦值
(9)選擇關卡場景制作。該場景主要負責用戶選擇游戲關卡。在該場景中有一個“Main Camera”攝像機游戲對象,在該游戲對象上掛載了“ChoiceLayer”腳本組件,腳本詳細代碼如下。
代碼位置:見隨書光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的ChoiceLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class ChoiceLayer : MonoBehaviour { 4 public Texture backgroundOfChoiceMenu; //菜單界面背景圖片 5 public GUIStyle[] buttonStyleOfChoice; //菜單界面按鈕圖樣式 6 public GUIStyle[] buttonStyleOfChoiceLayer; //菜單界面按鈕圖樣式 7 void OnGUI() 8 { 9 GUI.DrawTexture(new Rect(0, 0,1*Screen.width,1*Screen.height), 10 backgroundOfChoiceMenu); //繪制背景圖片 11 if (GUI.Button(new Rect(19*Screen.width/100,19*Screen.height/100, 12 20*Screen.width/100,30*Screen.height/100), "", buttonStyleOfChoice[0])){ 13 Application.LoadLevel("GameOne"); //加載游戲關卡一 14 } 15 if (GUI.Button(new Rect(45*Screen.width/100,19*Screen.height/100, 16 20*Screen.width/100,30*Screen.height/100), "", buttonStyleOfChoice[1])){ 17 Application.LoadLevel("GameTwo"); //加載關卡二 18 } 19 if (GUI.Button(new Rect(19*Screen.width/100,54*Screen.height/100, 20 20*Screen.width/100,30*Screen.height/100), "", buttonStyleOfChoice[2])){ 21 Application.LoadLevel("GameThree"); //加載關卡三 22 } 23 if (GUI.Button(new Rect(45*Screen.width/100,54*Screen.height/100, 24 20*Screen.width/100,30*Screen.height/100), "", buttonStyleOfChoice[3])){ 25 Application.LoadLevel("GameFour"); //加載關卡四 26 } 27 if (GUI.Button(new Rect(91*Screen.width/100,0*Screen.height/100, 28 9*Screen.width/100,16*Screen.height/100), "", 29 buttonStyleOfChoiceLayer[ConstOfMenu.BACK_BUTTON])) { //返回按鈕 30 Application.LoadLevel("MainMenus"); //加載主菜單界面 31 }} 32 void Update() { 33 if(Input.GetKeyDown(KeyCode.Escape)){ //如果按下返回鍵 34 Application.LoadLevel("MainMenus"); //返回主菜單界面 35 }}}
第4行~第10行聲明了選擇關卡界面的背景圖片以及該界面的按鈕樣式和關卡按鈕的按鈕樣式。同時在“OnGUI”繪制方法中,繪制了該界面的背景圖片。
第11行~第30行繪制了四個關卡的關卡按鈕圖片,當用戶單擊相應按鈕的時候,會加載相應關卡的游戲場景。
第27行~第34行繪制了返回按鈕,當用戶按下返回按鈕的時候,該游戲返回主菜單界面。當用戶按下返回鍵的時候,同樣返回主菜單界面。
(10)選擇關卡場景腳本變量賦值。該腳本掛載在“Main Camera”攝像機游戲對象上,腳本變量賦值如圖3-47所示。掛載步驟在前面詳細介紹過,這里不再贅述。

▲圖3-47 選擇關卡場景腳本變量賦值