官术网_书友最值得收藏!

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)景腳本變量賦值

主站蜘蛛池模板: 濮阳市| 耒阳市| 南充市| 墨竹工卡县| 云浮市| 永宁县| 凤山市| 出国| 荔波县| 卢龙县| 南澳县| 桦甸市| 阳泉市| 江永县| 沂南县| 开封市| 潜山县| 灵石县| 淅川县| 曲阳县| 达日县| 海丰县| 武安市| 沙雅县| 商水县| 郑州市| 苏尼特左旗| 沅陵县| 闻喜县| 和龙市| 嵊泗县| 岑溪市| 台前县| 保康县| 格尔木市| 天台县| 无为县| 花莲县| 华宁县| 丰原市| 秭归县|