天天看點

《Unity 遊戲案例開發大全》一6.4 主菜單場景

本節書摘來異步社群《unity 遊戲案例開發大全》一書中的第6章,第6.4節,作者: 吳亞峰 , 杜化美 , 于複興 責編: 張濤,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

unity 遊戲案例開發大全

前一小節介紹了遊戲的整體架構,從本節開始将介紹本案例各個場景的開發,首先介紹本案例的主菜單場景,該場景在遊戲開始時呈現,控制所有界面之間的跳轉。本節将在前面介紹的基礎上對此場景的開發細節進行進一步的介紹。

場景搭建主要是針對遊戲地圖、燈光、天空盒等環境因素的設定。通過本小節學習,讀者将會了解到如何建構出一個基本的遊戲世界,接下來将具體介紹場景的搭建步驟。

(1)建立一個場景作為主菜單場景,具體步驟為“file”→“new scene”,如圖6-9所示。單擊file選項中的“save scene”選項,或者使用儲存快捷鍵“ctrl+c”,在儲存對話框中将場景名重命名為“zhujiemian”。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(2)設定遊戲中的環境光。環境光指的是在遊戲場景中除去燈光後環境的亮度或顔色,具體步驟為單擊“edit”→“render setting”,單擊屬性檢視器中的“ambient light”設定環境光的顔色和亮度,在這裡選擇白色,其他參數設定如圖6-10所示。

(3)建立主菜單背景。按步驟“gameobject”→“creat other”→“plane”建立出一個平面并重命名為“beijing”作為主菜單的背景。調整其大小和位置,并将紋理圖“zhucaidan.png”拖拉到此對象上。效果如圖6-11所示。

(4)選中“beijing”遊戲對象,按步驟單擊工具欄的“component”→“physic”→“meshcollider”為背景遊戲對象添加網格碰撞器。并将該對象勾選為“static”靜态的,使該背景螢幕不參加運動。參數設定如圖6-12所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(5)為該對象指定層,在遊戲中通過層的概念可以輕松地管理一批相同性質的對象。選中“beijing”遊戲對象,在屬性面闆中單擊“layer”下拉清單,選擇“add layer…”建立層beijing,并将該遊戲對象設定為“beijing”層,如圖6-13所示。

(6)建立遊戲名稱闆。将模型“gamename.fbx”導入并從資源清單中拖拉到遊戲場景中,自動生成gamename遊戲對象。調整其大小和位置并将圖檔“youximing.png”拖拉到該遊戲對象上,如圖6-14所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(7)選中“gamename”遊戲對象,按步驟單擊工具欄的“component”→“physic”→“rigidbody”、“component”→“physic”→“boxcollider”,分别為遊戲名稱闆遊戲對象添加剛體和盒子碰撞器。元件清單如圖6-15所示。

(8)下面是遊戲開始按鈕的建立。将模型“gamestart.fbx”導入并拖曳到遊戲場景中,生成“gamestart”遊戲對象。調整其大小和位置後并将圖檔“youxikaishi.png”拖到該遊戲對象上。最終效果如圖6-16所示。

(9)為遊戲開始按鈕對象添加剛體和盒子碰撞器,選中“gamestart”遊戲對象,按步驟單擊,“component”→“physic”→“rigidbody”、“component”→“physic”→“boxcollider”,分别為遊戲對象添加剛體和盒子碰撞器。并将其勾選為靜态的,如圖6-17所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(10)下面建立遊戲中的設定按鈕、退出按鈕、靜音按鈕、左右箭頭按鈕。将模型“gameoption.fbx”拖拉到遊戲場景中,調整大小後為其添加剛體和盒子碰撞器元件并将其設定為靜态的。五種按鈕使用相同的模型,貼圖分别是“shezhi.png”、“tuichu.png”、“jingyin.png”、“jixu.png”。建立好後在資源清單中如圖6-18所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(11)建立選關按鈕,将“gamename.fbx”拖到場景中,并重命名為“xuanguan2”,調整大小和位置後将紋理圖“bj1.png”拖拉到該遊戲對象上,将其勾選為靜态的,并添加剛體和盒子碰撞器,如圖6-19所示。

(12)按步驟“gameobject”→“create other”→“plane”建立一個平面,重命名為“guanshu”,并使其成為xuanguan1的子對象。調整大小後将數字圖檔“num-03”拖拉到該對象上,并将其shader選為帶有透明通道的transparent/diffuse。将其勾選為靜态的,效果如圖6-20所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(13)下面建立選關按鈕上的分數闆,這個遊戲對象的主要功能是在“choose.cs”腳本的左右下在按鈕上繪制出獲得的星星。将模型“gamestart.fbx”拖到場景中并使其成為xuanguan1的子對象,調整大小後将“xingxingban.png”拖拉到該遊戲對象上,并将其勾選為靜态的。

(14)建立三個plane,調整大小并對應放在星星闆上的星星位置分别重命名為“star1”、“star2”、“star3”,使其成為fenshuban遊戲對象的子對象。為其附加貼圖numnull.png并将其着色器設定為帶有透明通道的transparent/diffuse。效果如圖6-21所示。

(15)本場景中共有四個選關按鈕“xuanguan1”、“xuanguan2”、“xuanguan3”、“xuanguan4”,制作方法相同,讀者可以參照步驟(11)~步驟(14)的方法自行制作和擺放,并将其子對象“guanshu”的貼圖改為相應的關卡數字。

(16)開始層的建立,通過将相似的遊戲對象分到同一層,可以在代碼中友善地進行統一處理。建立一個層方法時單擊屬性面闆中的“layer”→“add layer…”,建立一個“jinshu”層。并将所有按鈕以及遊戲名稱闆都勾選為此層。

(17)建立光源。選擇“gameobject”→“create other”→“directional light”後會自動建立一個定向光源,該種類型的光源類似太陽光,無論設定在什麼位置都可以影響到遊戲場景中的所有物體,如圖6-22所示。調整其參數如圖6-23所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(18)實作落葉效果,該效果由粒子系統實作,按步驟“gameobject”→“create other”→“particlesystem”,在元件視窗的粒子系統設計器中可以調整其參數,讀者可以自行調整或參看項目中的設定。将粒子的紋理圖替換為“shuye.png”,如圖6-24所示。

《Unity 遊戲案例開發大全》一6.4 主菜單場景

(19)檢查該場景中遊戲對象的參數設定,除了主錄影機和粒子系統,其餘遊戲對象應當全部為靜态的,所有的按鈕應當加上剛體和相應的碰撞器(meshcollider或boxcollider),自行調整燈光和環境光使得光線合适。至此,基本的主菜單場景搭建完畢。

前一小節完成了主場景的搭建,本小節将在搭建好的場景基礎上介紹主錄影機相關腳本的開發。實作相應玩家手指滑動螢幕操控錄影機移動和單擊主菜單場景中的按鈕實作按鈕的事件監聽的功能,具體步驟如下。

(1)按步驟在assets檔案夾中單擊滑鼠右鍵,選擇“create”→“folder”建立“script”檔案夾。并在該檔案夾中單擊滑鼠右鍵,在彈出的菜單中選擇“create”→“c# script”建立腳本,命名為“mymainmenu.cs”,如圖6-25所示。

圖6-25 建立腳本

(2)輕按兩下腳本,進入“monodevelop”編輯器中,開始腳本的編寫。本腳本主要功能為通過3d拾取技術判斷玩家的操控,并根據結果移動錄影機或者實作單擊按鈕的事件監聽、相應玩家的觸摸操控。腳本代碼如下。

第4行~第12行的主要功能為變量聲明,在這裡聲明了粒子系統、錄影機、音樂按鈕遊戲對象的引用,以及錄影機移動時的标志位和位置坐标,友善下面的代碼調用。

第13行~第15行是對start方法的重寫,在該場景加載時調用,用于根據判斷目前是否靜音狀态來改變靜音按鈕前的擋闆是否渲染,以此改變靜音按鈕的圖案。

第16行~第28行的主要功能為當發生觸摸事件時,從觸摸點聲明一條垂直于主錄影機射出射線的射線,通過射線碰撞判斷玩家的動作。當觸摸相位為剛按下且玩家單擊的是金屬層或背景層,則生成相應的粒子系統。

第29行~第38行的主要功能是當使用者單擊翻頁箭頭功能按鈕、開始遊戲按鈕或者遊戲設定按鈕時,根據判斷改變翻頁标志位,使其準備跳轉到相應的界面,下面有代碼會根據最終标志位狀态對錄影機進行移動實作翻頁。

第39行~第55行的主要功能為當玩家單擊靜音按鈕時,将反選圖示的顯示方式置反,這樣就做出了靜音按鈕和非靜音按鈕,若玩家單擊的是退出按鈕則退出遊戲,若玩家單擊的是選關按鈕,就加載相應的關卡。

(3)上面介紹了發生射線碰撞且觸摸相位為開始觸摸時的代碼片段,下面介紹“mymainmenu.cs”腳本中剩下的代碼,包含觸摸中相位和觸摸結束相位執行的代碼,以及最後根據目前翻頁标志位的狀态進行翻頁,代碼片段如下。

代碼位置:見随書CD光牒中源代碼/第 06 章目錄下的 colacola/assets/script/zhucaidan/ mymainmenu.cs。

第1行~第7行的功能為當發生觸摸且觸摸相位為手指觸摸移動時,記錄下手指的位置,并使螢幕随手指滑動而移動,當滑動超出背景範圍時停止移動。

第8行~第21行的主要功能是當觸摸結束時,很據手指移動的幅度及方式判斷怎樣使螢幕滑動,并根據判斷結果改變翻頁标志位。最後将正在控制标志位設定為false。

第22行~第25行的主要功能是當控制結束标志位為真時,根據翻頁标志位判斷錄影機應當向fypos3數組中具體某個位置移動,并對錄影機執行內插補點移動,實作翻頁的效果。

上一小節已經介紹了主菜單界面中主錄影機的開發過程,本小節将對主菜單界面中選關按鈕進行腳本開發的詳解,腳本實作了在每個選關按鈕上繪制該關卡獲得的最大星星數量,并控制星星和主背景的繪制順序。其具體的講解内容如下。

建立c#腳本“choose.cs”并将其挂載到前面建立好的11個選關按鈕“xuanguan1”、“xuanguan2”、“xuanguan3”、“xuanguan4”上。該腳本的主要功能是在選關按鈕上繪制各關卡已獲得的星星數量。腳本代碼如下。

第4行~第7行的主要功能為變量聲明,在這裡聲明了分數闆遊戲對象和星星闆遊戲對象數組,以及星星圖案的材質和透明材質,以便後面代碼調用。

第8行~第13行的主要功能為擷取分數闆遊戲對象的渲染次序,因為某些相距很近的物體在自動進行深層檢測時會失敗,造成“後面的擋住前面的”效果,是以擷取對象的渲染次序後可以代碼控制渲染次序,避免這種錯誤。這裡還獲得了每一關所得到的星星數量。

第14行~第36行的功能是在遊戲場景加載時根據每關獲得的星星數量在選關按鈕下的星星闆上繪制星星,并代碼控制其在分數闆渲染後渲染。

繼續閱讀