中南民族大學計算機科學學院 黃 俊
基于U n i t y 3 d拼圖游戲的設計與實現
中南民族大學計算機科學學院 黃 俊
Unity3D是由Unity Technologies公司開發的專業跨平臺游戲開發的虛擬現實引擎,其打造了一個完美的夸平臺程序開發生態鏈,用戶可以通過他輕松完成各種游戲創意和三維互動開發,創作出精彩的游戲和虛擬仿真內容。本文在介紹Unity 3D引擎的基礎上,以一款《拼圖游戲》為例,詳細講述了拼圖游戲中顯示碎片,打亂碎片,移動控制,游戲結束檢測等C#腳本的編寫方法與技巧。
Unity3d;游戲開發;拼圖游戲;C#
Unity3D是一款國際領先的專業游戲引擎,其精簡、直觀的工作流程,功能強大的工具集,使得游戲開發周期大幅度縮短。Unity3d編輯器可以運行在Windows、Mac OS X以及Linux平臺。其最主要的特點如下:一次開發就可以部署到時下所有主流游戲平臺,目前Unity能夠支持發布的平臺有23個之多。用戶無須二次開發好移植,就可以輕松部署到相應的平臺,節省了大量的開發時間和精力。在移動互聯網大行其道的今天,Unity正吸引著越來越多人的關注。本案例以Unity 5.3為例開發游戲。
在此次要完成的射擊類項目中,由于人力物力等各種客觀條件的限制,沒有特別明確的分工,包括策劃、美術和程序基本都是作者一個人完成的,特別需要指出的是,在美術和聲音資源方面借助了一部分網絡上的資源。具體制作流程圖如下所示圖2.1所示。

圖2.1 項目制流程
拼圖游戲策劃內容是:游戲由以下兩個場景組成,第一個場景是初始界面設計兩個按鈕“開始”和“退出”,單機“開始”進入第二游戲界面,在拼圖游戲界面上方有3個按鈕“3×3”,“4×4”, “5×5”可以設置游戲的難度,界面下方有一個關閉按鈕,單機鼠標左鍵能夠移動可移動的拼圖碎片,當拼圖被拼好時屏幕會顯示完成的時間。
設計拼圖游戲之前,初步設定了 600*960 的屏幕分辨率,這個分辨率基本上能和市面上主流的智能手機屏幕分辨率相匹配。在確定好了游戲的屏幕分辨率之后,游戲項目中所有的U圖片的尺寸都是圍繞這個標準來設計的。在制作這些 UI界面的時候,借助了目前最流行的平面設計軟件Photoshop。主要的制作效果會在后面展示,具體的制作流程就不在一一贅述。
2.3.1 主要UI界面展示
圖2.2所示為游戲開始界面,圖2.3所示為3×3難度界面,圖2.4所示為4×4難度界面,圖2.5所示為5×5難度界面,圖2.6所示為拼圖完成界面。

圖2.2 開始界面

圖2.3 3難度界面

圖2.4 4 難度界面

圖2.5 5難度界面

圖2.6 完成界面
2.3.2 游戲UI之間的邏輯關系
在游戲開始界面(上圖2.2)點擊開始進入游戲界面(上圖2.3),在游戲界面選擇不同的難度進入相對應的界面(上圖2.3,2.4.2.5),如果拼圖完成則進入游戲完成界面(上圖2.6),點擊關閉按鈕則退出游戲。
為了實現這款游戲,筆者共編寫了3個C#腳本程序,如下圖2.7所示,每個程序都有各自的分工,分別實現對應的功能。GridData類是拼圖游戲中的格子類,Start MenuController類是游戲開始界面的控制類,MainController類是游戲界面的控制類。

圖2.7 游戲中C#腳本
2.5.1 屏幕分辨率自適應功能的實現
為了此款拼圖游戲項目能夠適應不同分辨率的智能手機,筆者采用了固定寬高比的方法,實現了屏幕的自適應功能。在此只需要將Resolusion的腳本掛在到不同的Scene的Main Camera上面即可。Resolusion腳本的核心代碼是如下:main Camera.aspect = 0.625f。
2.5.2 拼圖碎片類
GridData.cs是拼圖碎片類,為了處理碎片類的點擊事件,所以這個類要繼承于IPointerClickHandler類。在碎片類中有三個字段分別是顯示數字的Text字段,初始位置ID的int字段,當前所在位置ID的int字段。此外還有一個判斷碎片是否到達正確位置的屬性IsFinish,如果當前位置ID和初始位置ID相等,則該碎片已經到達正確的位置。GridData.cs類中的InitData(int id)方法是用來初始化碎片信息的。
2.5.3 拼圖碎片移動功能的實現
在拼圖游戲界面中,如果被點擊拼圖在空格子周圍,則被點擊的拼圖會移動到空的給子上,否則則不能移動。
2.5.4 創建拼圖功能的實現
創建拼圖的功能是在MainController.cs類中CreateMap()方法實現的。確定創建的碎片個數MaxID之后,循環創建拼圖碎片預設體prefab,然后為創建的游戲對象添加GirdData組件,并將創建的游戲對象存儲到數組中以便管理。
2.5.5 打亂拼圖碎片順序功能的實現
在拼圖游戲中,打亂拼圖順序的功能是在MainController.cs類中Rank()方法實現的。其原理是讓空的格子和隨機和周圍的拼圖碎片隨機的交換位置,交換很多次之后拼圖的順序就會自然打亂,這里筆者的交換次數是行數乘以1000次。
游戲發布是研發游戲的最后一個環節,前面筆者講到了游戲發布的相關知識,在這里筆者把游戲項目發布成.apk格式的Android手機游戲。各種環境都配置好之后,就不需要做任何改動,點擊Build 就可以發布了。
目前,由于智能手機硬件的快速發展、智能手機的普及以及很多年輕人對于游戲的需求,手機游戲行業具有不可估量的市場潛力。Unity3D 引擎為快速開發跨平臺的移動游戲提供了完美的解決方案,未來幾年必定是移動游戲和 Unity3D 引擎大行其道的時代。在對 Unity3D 引擎研究的這段時間,筆者學到了很多有用的東西,繼續學習新的知識,并希望能做出更多更有益的游戲,豐富人們的業余生活。
[1]吳志達.一個基于 Unity3D 游戲引擎的體感游戲研究與實現[D].廣州:中山大學,2012.
[2]陳俊峰.基于 Unity3D 的跨平臺手機網絡游戲的研究與實現[D].廣州:中山大學,2013.