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

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

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

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

▲圖3-23 創(chuàng)建腳本文件夾

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

▲圖3-25 創(chuàng)建腳本

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

▲圖3-27 選擇保存

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

▲圖3-29 創(chuàng)建點(diǎn)光源

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

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

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

▲圖3-33 創(chuàng)建小球

▲圖3-34 創(chuàng)建木箱

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

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

▲圖3-37 添加剛體
(7)編寫(xiě)常量類腳本。雙擊“ConstOfMenu.cs”腳本,進(jìn)入“MonoDevelop”編輯器中,開(kāi)始腳本的編寫(xiě)。該腳本主要負(fù)責(zé)初始化游戲開(kāi)發(fā)所需用的各類常量。詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第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; //標(biāo)準(zhǔn)屏寬度 6 public static float desiginHeight = 480.0f; //標(biāo)準(zhǔn)屏高度 7 public static int START_BUTTON = 0; //開(kāi)始按鈕圖片索引 8 public static int MUSSIC_BUTTON = 1; //音樂(lè)設(shè)置按鈕圖片索引 9 public static int HELP_BUTTON = 2; //幫助按鈕圖片索引 10 public static int ABOUT_BUTTON = 3; //關(guān)于按鈕圖片索引 11 public static int QUIT_BUTTON = 4; //退出游戲按鈕圖片索引 12 public static int BACK_BUTTON = 0; //返回按鈕圖片索引 13 public static int ONE_BUTTON = 0; //關(guān)卡一按鈕圖片索引 14 public static int TWO_BUTTON = 1; //關(guān)卡二按鈕圖片索引 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; //向下翻頁(yè)按鈕圖片索引 23 public static int HELP_UP=1; //向上翻頁(yè)按鈕圖片索引 24 public static int GAMERESULT_BACK_BUTTON = 0; //返回按鈕圖片索引 25 public static int GAMERESULT_REPEAT_BUTTON = 1;//重玩按鈕圖片索引 26 public static int GAMERESULT_NEXT_BUTTON = 2; //繼續(xù)按鈕圖片索引 27 public static int GAMEONE_INDEX; //索引 28 }
第4行~第15行聲明了標(biāo)準(zhǔn)屏的高度寬度,有便于后續(xù)代碼開(kāi)發(fā)使用。同時(shí)聲明了主界面菜單的五個(gè)按鈕,分別為開(kāi)始游戲按鈕、退出游戲按鈕、音樂(lè)設(shè)置按鈕、幫助按鈕和關(guān)于按鈕。同時(shí)聲明了關(guān)卡返回按鈕等。
第16行~第20行聲明了游戲關(guān)卡界面中調(diào)整視野范圍的按鈕,包括將攝像頭向上、向下、向左和向右移動(dòng)的按鈕,以及俯瞰和近視兩個(gè)界面的切換按鈕。
第21行~第27行聲明了幫助界面上下翻頁(yè)的兩個(gè)按鈕,和返回主界面按鈕索引。同時(shí)聲明了游戲勝利和游戲結(jié)束兩個(gè)界面的返回按鈕、重玩按鈕以及繼續(xù)按鈕。
(8)掛載常量類腳本。將Project界面內(nèi)的常量腳本拖曳到游戲?qū)ο蟆癕ain Cemera”上,如圖3-38和圖3-39所示的腳本掛載。

▲圖3-38 腳本掛載1

▲圖3-39 腳本掛載2
(9)編寫(xiě)主菜單界面腳本“MainLayer.cs”,該腳本主要負(fù)責(zé)繪制主菜單界面上的按鈕。創(chuàng)建腳本以及腳本掛載過(guò)程前面已經(jīng)詳細(xì)介紹,這里不再贅述。詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第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(); //調(diào)用繪制界面方法 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])) {//繪制開(kāi)始按鈕 23 Application.LoadLevel("GamesMenu"); //加載選擇關(guān)卡界面 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])) { //繪制設(shè)置按鈕 29 Application.LoadLevel("SetMusic"); //加載設(shè)置界面 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])){//繪制關(guān)于按鈕 41 Application.LoadLevel("AboutGames"); //加載關(guān)于界面 42 Destroy(this); 43 }} 44 void Update() { 45 if(Input.GetKeyDown(KeyCode.Escape)){ //如果按下返回鍵 46 Application.Quit(); //游戲退出 47 }}}
第4行~第12行聲明菜單界面背景圖片以及菜單界面按鈕樣式,同時(shí)在“OnGUI”方法中繪制背景圖片,并調(diào)用繪制界面方法,繪制主菜單界面。
第13行~第31行繪制了退出游戲按鈕、開(kāi)始游戲按鈕以及設(shè)置按鈕。用戶單擊退出游戲按鈕,便會(huì)退出游戲。用戶單擊開(kāi)始游戲按鈕,便會(huì)加載選擇關(guān)卡界面。用戶單擊“設(shè)置”按鈕,加載音樂(lè)開(kāi)關(guān)設(shè)置界面。
第32行~第46行繪制了幫助界面按鈕、關(guān)于界面按鈕和返回鍵按鈕。用戶單擊幫助按鈕,便加載幫助界面,用戶可以查看相關(guān)操作內(nèi)容。單擊關(guān)于按鈕,可以查看游戲相關(guān)信息。單擊返回鍵,就會(huì)退出游戲。
(10)主菜單界面腳本變量賦值。在該腳本中,需要為游戲標(biāo)題選擇貼圖以及五個(gè)按鈕。首先打開(kāi)Select Texture列表,然后選擇相應(yīng)貼圖,如圖3-40所示。

▲圖3-40 主菜單界面腳本變量賦值
(11)編寫(xiě)背景音樂(lè)腳本。該腳本主要負(fù)責(zé)開(kāi)始游戲后背景音樂(lè)的播放與否。根據(jù)音樂(lè)設(shè)置界面?zhèn)鬟f的參數(shù),判斷音樂(lè)開(kāi)關(guān)與否,詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第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); //保留游戲?qū)ο? 7 if(PlayerPrefs.GetInt("offMusic") == 0) //若音樂(lè)索引為0 8 { 9 MyAudioSource.Play(); //播放音樂(lè) 10 }} 11 void Update () { 12 if(PlayerPrefs.GetInt("offMusic") != 0) { //若音樂(lè)索引為1 13 this.audio.Pause(); //音樂(lè)暫停 14 } 15 var cameras=GameObject.FindGameObjectsWithTag("themain");//攝像機(jī)列表 16 if(cameras.Length>1) { //若攝像機(jī)多于1個(gè) 17 GameObject.Destroy(cameras[0]); //多余的刪除 18 }}}
第4行~第9行聲明了游戲背景素材索引,腳本開(kāi)始方法中,保留掛載音樂(lè)的游戲?qū)ο螅粢魳?lè)索引為0,就開(kāi)始播放音樂(lè)。
第11行~第17行判斷音樂(lè)索引為1,音樂(lè)就暫停。同時(shí)索取當(dāng)前場(chǎng)景的攝像機(jī)列表,將多余的攝像機(jī)游戲?qū)ο髣h除,這樣就能保留一個(gè)音樂(lè)軌道。
(12)編寫(xiě)小球滾動(dòng)腳本。該腳本主要負(fù)責(zé)小球根據(jù)重力移動(dòng)。由于手機(jī)傾斜度不同,小球不是勻速移動(dòng),因此要根據(jù)重力加速度為其施加不同速度。詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第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 }}
說(shuō)明
由于小球根據(jù)重力移動(dòng),將初始速度定為10.0f,同時(shí)聲明X,Y和Z3個(gè)方向向量。根據(jù)手機(jī)傾斜度,判斷小球重力加速度,然后調(diào)整小球位置。
3.4.3 菜單界面其他場(chǎng)景
前一小節(jié)詳細(xì)介紹了主菜單場(chǎng)景的設(shè)計(jì)、腳本編寫(xiě)、變量賦值和掛載的主要步驟,下面開(kāi)始介紹幾個(gè)子菜單場(chǎng)景的開(kāi)發(fā),這幾個(gè)子菜單場(chǎng)景設(shè)計(jì)較簡(jiǎn)單,但也是游戲開(kāi)發(fā)的重要部分。
(1)音樂(lè)設(shè)置場(chǎng)景腳本編寫(xiě)。該腳本主要負(fù)責(zé)繪制和控制游戲背景音樂(lè)開(kāi)關(guān)設(shè)置,腳本詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第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; //聲明音樂(lè)按鈕數(shù)組 7 public Texture2D musicTex; //聲音按鈕對(duì)應(yīng)的圖片 8 public Texture2D[] effectBtns; //聲明音效按鈕數(shù)組 9 public Texture2D effectTex; //音效按鈕對(duì)應(yīng)的圖片 10 private int effectIndex; //音效索引 11 private int musicIndex; //音樂(lè)索引 12 public GUIStyle btStyle; //按鈕樣式 13 public GUIStyle[] buttonStyleOfMusicLayer; //菜單界面按鈕圖樣式 14 void Start(){ 15 effectIndex = PlayerPrefs.GetInt("offEffect"); //初始化音效索引 16 musicIndex = PlayerPrefs.GetInt("offMusic"); //初始化音樂(lè)索引 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行聲明了菜單界面背景圖片、音樂(lè)按鈕數(shù)組和音樂(lè)按鈕對(duì)應(yīng)的圖片、音效按鈕數(shù)組和音效按鈕對(duì)應(yīng)的圖片,以及音樂(lè)音效的索引和菜單界面按鈕圖樣式。
第14行~第23行表示在“Start”方法中初始化音樂(lè)索引和音效索引,這些索引用于判斷游戲初始化的時(shí)候音樂(lè)音效是開(kāi)啟或者關(guān)閉。同時(shí)在“OnGUI”方法中繪制了該界面的背景圖片。
第24行~第41行繪制了音樂(lè)按鈕數(shù)組和音樂(lè)按鈕對(duì)應(yīng)的圖片、音效按鈕數(shù)組和音效按鈕對(duì)應(yīng)的圖片,當(dāng)用戶單擊的時(shí)候,每個(gè)按鈕索引加1,表示隨時(shí)切換對(duì)應(yīng)圖片,同時(shí)將索引存入PlayerPrefs。方便其他代碼部分使用。
第43行~第45行表示當(dāng)用戶按下返回鍵的時(shí)候,游戲退出音樂(lè)設(shè)置界面,返回主菜單界面,并且加載主菜單界面的場(chǎng)景。
(2)設(shè)置場(chǎng)景腳本變量賦值和掛載。該腳本掛載在“Main Camera”攝像機(jī)游戲?qū)ο笊希_本變量賦值如圖3-41所示,掛載步驟在前面詳細(xì)介紹過(guò),這里不再贅述。

▲圖3-41 設(shè)置場(chǎng)景腳本變量賦值
(3)幫助場(chǎng)景腳本編寫(xiě)。該場(chǎng)景主要負(fù)責(zé)介紹游戲相關(guān)玩法。在該場(chǎng)景中有兩個(gè)“Plane”對(duì)象,貼圖為幫助界面背景素材圖。同時(shí)有一個(gè)“Main Camera”攝像機(jī)游戲?qū)ο螅谠撚螒驅(qū)ο笊蠏燧d了“HelpLayer”腳本組件,腳本詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的HelpLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class HelpLayer : MonoBehaviour { 4 public GameObject[] cameras; //攝像機(jī)列表 5 public GUIStyle[] buttonStyleOfHelpLayer; //菜單界面按鈕圖樣式 6 public static int curCam = 0; //當(dāng)前攝像機(jī)編號(hào) 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), "", //繪制向下翻頁(yè)按鈕 16 buttonStyleOfHelpLayer[ConstOfMenu.HELP_DOWN])) { //若選擇該按鈕 17 ChangeCam(1); //切換攝像機(jī) 18 }} 19 public void ChangeCam(int index){ //切換攝像機(jī)方法 20 cameras[curCam].SetActive(false); //設(shè)置當(dāng)前攝像機(jī)不可用 21 cameras[index].SetActive(true); //啟用相應(yīng)攝像機(jī) 22 } 23 void Update() { 24 if(Input.GetKeyDown(KeyCode.Escape)){ //若按下返回鍵 25 Application.LoadLevel("MainMenus"); //返回主菜單界面 26 }}}
第4行~第6行聲明了攝像機(jī)列表,存在兩個(gè)攝像機(jī),用于切換鏡頭,實(shí)現(xiàn)幫助界面翻頁(yè)功能。同時(shí)聲明了菜單界面按鈕圖樣式和當(dāng)前攝像機(jī)編號(hào)。
第8行~第18行繪制了幫助界面的返回按鈕,用于返回主菜單界面,以及向下翻頁(yè)按鈕,用于實(shí)現(xiàn)翻頁(yè)功能。在用戶按下翻頁(yè)按鈕的同時(shí),會(huì)切換當(dāng)前攝像機(jī)。
第19行~第25行是切換攝像機(jī)的方法,即關(guān)閉當(dāng)前攝像機(jī),激活另一個(gè)編號(hào)的攝像機(jī)。由于兩個(gè)攝像機(jī)所對(duì)應(yīng)的畫(huà)面不同,也就間接實(shí)現(xiàn)了幫助界面的翻頁(yè)功能。
(4)在幫助場(chǎng)景中,為了實(shí)現(xiàn)用戶單擊翻頁(yè)按鈕,進(jìn)行翻頁(yè)的功能,該場(chǎng)景有一個(gè)“Camera”攝像機(jī)游戲?qū)ο螅⒈粧燧d了“HelpLayerBack”腳本組件,腳本詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的HelpLayerBack.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class HelpLayer : MonoBehaviour { 4 public GameObject[] cameras; //攝像機(jī)列表 5 public GUIStyle[]buttonStyleOfHelpLayerBack; //菜單界面按鈕圖樣式 6 public static int curCam = 0; //當(dāng)前攝像機(jī)編號(hào) 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), "", //繪制向上翻頁(yè)按鈕 16 buttonStyleOfHelpLayerBack [ConstOfMenu.HELP_DOWN])) { //若選擇該按鈕 17 ChangeCam(0); //切換攝像機(jī) 18 }} 19 public void ChangeCam(int index) { //切換攝像機(jī)方法 20 cameras[curCam].SetActive(false); //設(shè)置當(dāng)前攝像機(jī)不可用 21 cameras[index].SetActive(true); //啟用相應(yīng)攝像機(jī) 22 } 23 void Update() { 24 if(Input.GetKeyDown(KeyCode.Escape)){ //若按下返回鍵 25 Application.LoadLevel("MainMenus"); //返回主菜單界面 26 }}}
第4行~第6行聲明了攝像機(jī)列表,存在兩個(gè)攝像機(jī),用于切換鏡頭,實(shí)現(xiàn)幫助界面翻頁(yè)功能。同時(shí)聲明了菜單界面按鈕圖樣式和當(dāng)前攝像機(jī)編號(hào)。
第8行~第17行繪制了幫助界面的返回按鈕,用于返回主菜單界面,以及向上翻頁(yè)按鈕,用于實(shí)現(xiàn)翻頁(yè)功能。在用戶按下翻頁(yè)按鈕的同時(shí),會(huì)切換當(dāng)前攝像機(jī)。
第20行~第25行是切換攝像機(jī)的方法,即關(guān)閉當(dāng)前攝像機(jī),激活另一個(gè)編號(hào)的攝像機(jī)。由于兩個(gè)攝像機(jī)所對(duì)應(yīng)的畫(huà)面不同,也就間接實(shí)現(xiàn)了幫助界面的翻頁(yè)功能。
(5)幫助場(chǎng)景翻頁(yè)設(shè)計(jì)。由于在幫助場(chǎng)景中實(shí)現(xiàn)了翻頁(yè)的功能,所以兩個(gè)攝像機(jī)游戲?qū)ο蟮脑O(shè)置不同,要去掉“Camera”游戲?qū)ο髮傩圆榭雌髦袑?duì)象名稱前單選框中的對(duì)勾,保留“Main Camera” 對(duì)象名稱前單選框中的對(duì)勾,如圖3-42、圖3-43所示。

▲圖3-42 去掉單選框的對(duì)勾

▲圖3-43 保留單選框的對(duì)勾
(6)幫助場(chǎng)景腳本變量賦值。“HelpLayer.cs”和“HelpLayerBack.cs”兩個(gè)腳本分別掛載在“Main Camera”攝像機(jī)游戲?qū)ο蠛汀癈amera”攝像機(jī)游戲?qū)ο笊希_本變量賦值如圖3-44、圖3-45所示。

▲圖3-44 腳本變量賦值

▲圖3-45 腳本變量賦值
(7)關(guān)于場(chǎng)景制作。該場(chǎng)景主要負(fù)責(zé)介紹游戲相關(guān)版權(quán)等。在該場(chǎng)景中有一個(gè)“Main Camera”攝像機(jī)游戲?qū)ο螅谠撚螒驅(qū)ο笊蠏燧d了“AboutLayer”腳本組件,腳本詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第03章/PlayBox/Assets/Scripts/MenuScript目錄下的AboutLayer.cs。
1 using UnityEngine; 2 using System.Collections; 3 public class AboutLayer : MonoBehaviour { 4 public Texture aboutOfAboutLayer; //關(guān)于界面背景圖片 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行聲明了關(guān)于界面的背景圖片以及該界面的按鈕樣式,同時(shí)在“OnGUI”繪制方法中,繪制了關(guān)于界面的背景圖片。
第11行~第18行繪制了返回按鈕圖片,同時(shí)當(dāng)用戶單擊該按鈕的時(shí)候加載主菜單界面。當(dāng)用戶按下返回鍵的時(shí)候,游戲返回主菜單界面。
(8)關(guān)于場(chǎng)景腳本變量賦值。該腳本掛載在“Main Camera”攝像機(jī)游戲?qū)ο笊希_本變量賦值如圖3-46所示。掛載步驟在前面詳細(xì)介紹過(guò),這里不再贅述。

▲圖3-46 關(guān)于場(chǎng)景腳本變量賦值
(9)選擇關(guān)卡場(chǎng)景制作。該場(chǎng)景主要負(fù)責(zé)用戶選擇游戲關(guān)卡。在該場(chǎng)景中有一個(gè)“Main Camera”攝像機(jī)游戲?qū)ο螅谠撚螒驅(qū)ο笊蠏燧d了“ChoiceLayer”腳本組件,腳本詳細(xì)代碼如下。
代碼位置:見(jiàn)隨書(shū)光盤中源代碼/第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"); //加載游戲關(guān)卡一 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"); //加載關(guān)卡二 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"); //加載關(guān)卡三 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"); //加載關(guān)卡四 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行聲明了選擇關(guān)卡界面的背景圖片以及該界面的按鈕樣式和關(guān)卡按鈕的按鈕樣式。同時(shí)在“OnGUI”繪制方法中,繪制了該界面的背景圖片。
第11行~第30行繪制了四個(gè)關(guān)卡的關(guān)卡按鈕圖片,當(dāng)用戶單擊相應(yīng)按鈕的時(shí)候,會(huì)加載相應(yīng)關(guān)卡的游戲場(chǎng)景。
第27行~第34行繪制了返回按鈕,當(dāng)用戶按下返回按鈕的時(shí)候,該游戲返回主菜單界面。當(dāng)用戶按下返回鍵的時(shí)候,同樣返回主菜單界面。
(10)選擇關(guān)卡場(chǎng)景腳本變量賦值。該腳本掛載在“Main Camera”攝像機(jī)游戲?qū)ο笊希_本變量賦值如圖3-47所示。掛載步驟在前面詳細(xì)介紹過(guò),這里不再贅述。

▲圖3-47 選擇關(guān)卡場(chǎng)景腳本變量賦值
- Core Data應(yīng)用開(kāi)發(fā)實(shí)踐指南
- MacTalk 跨越邊界
- 高質(zhì)量軟件構(gòu)建方法與實(shí)踐
- 大數(shù)據(jù)處理系統(tǒng):Hadoop源代碼情景分析
- App草圖+流程圖+交互原型設(shè)計(jì)教程
- Java高手真經(jīng)·編程基礎(chǔ)卷:Java核心編程技術(shù)
- 軟件開(kāi)發(fā)生產(chǎn)率改進(jìn):軟件管理的有效領(lǐng)導(dǎo)力與量化方法
- 鑄魂:軟件定義制造
- 軟件研發(fā)效能提升之美
- SQL Server應(yīng)用與開(kāi)發(fā)范例寶典
- 架構(gòu)基礎(chǔ):從需求到架構(gòu)
- 從隱秩序到顯規(guī)則:工程體系基于V++規(guī)則引擎的生態(tài)演進(jìn)
- 火災(zāi)與逃生模擬仿真:PyroSim+Pathfinder中文教程與工程應(yīng)用
- 軟件平臺(tái)架構(gòu)設(shè)計(jì)與技術(shù)管理之道
- AR與VR開(kāi)發(fā)實(shí)戰(zhàn)