文/吳浩煒 黃昊 朱嘉侖 陳圓 謝修娟
隨著現代科技的發展,越來越多的高樓林立,置身與城市之中,毫無方向感知力。即使用具有導航功能的軟件來找路也比較的吃力,所以提高大家的空間感思維知力非常必要。空間思維的訓練方式有很多,如:多觀察與測量模型或者實物,多做一些關于空間思維手工的訓練,增強將圖形分離或者合并的練習等。其中,最優的空間思維訓練模式則是,進行迷宮游戲通過沉浸式的視角,且迷宮模型本身是可旋轉的,可以最高的效率和效果來鍛煉空間思維能力。
因此,本文提出開發一款基于Unity 3D的迷宮手游,利用Unity 引擎構造逼真的3D物理模型,模擬較為真實的游戲場景,實現迷宮的神秘感與復雜程度,以沉浸式視角置身于迷宮之中,破解迷宮,找到出口,從而很大程度地鍛煉人的空間感知思維能力。
相比較于其他軟件類的開發,游戲開發的難度更大,對團隊的合作意識和技術基礎要求較高。本游戲的開發項目管理流程主要包括4 個階段:
(1)游戲原型階段:設計迷宮地圖以及游戲的場景,設計游戲規則,對角色進行設計,討論游戲規則的合理性,以及對游戲進行可行性分析,并對游戲規則進行修改和補充。
(2)Alpha 階段:各游戲角色的屬性和功能進行確定,游戲角色的模型建立,并且設計出各角色的數據屬性和游戲內的關卡的數量以及表現形式,游戲內的系統功能:關卡選擇,存檔與讀檔,音量調節等。
(3)Beta 版本階段:完成游戲具體內容,場景建立,模型導入,編寫各個電腦控制角色的代碼,實現NPC 的自主尋路以及自動巡邏功,自動攻擊功能,編寫玩家控制角色的代碼,實現PPC 的攻擊,防御尋路等功能,設計UI,完整一個完整的軟件。
(4)產品階段:將手游封裝出來,移植帶安卓平臺上,進行多次測試,找出游戲內的bug,并完善游戲,進行視頻錄制。
基于Unity3D 的迷宮坦克手游的元素主要有:大型的迷宮場景,玩家控制的坦克,炸藥,炮臺,藥箱,小型敵人,最終的boss;玩家控制的不同坦克擁有不同的參數,即血量,攻擊速度,移動速度等;炸藥則作為障礙放置到迷宮中,如果玩家碰到則會減少玩家角色的血量,受到傷害;炮臺同樣也是作為障礙,是不可移動的物體,并且擁有血量這一屬性,可以在一定的范圍內可以攻擊玩家,也可以被玩家攻擊,并會死亡;小型敵人是可移動的,具有少量的血量和攻擊力,可以在迷宮內移動,自主巡視功能,自主攻擊功能,在在一定范圍內追擊玩家對玩家造成傷害;最終的boss也是可移動的,擁有自主巡視功能,自主攻擊功能,在在一定范圍內追擊玩家的功能,但是具有大量的血量和極高的攻擊力,移動速度較慢,但具有多種攻擊方式有較大的難度;藥箱在游戲中負責回復玩家的血量,降低游戲難度;實現的系統功能主要有存檔與讀檔功能和地圖瀏覽與觸屏操作功能:游戲的存檔與讀檔功能保證了玩家的游戲數據不會丟失,可保存和讀取當前的游戲進度;地圖瀏覽與觸屏操作功能是將游戲移植到安卓平臺上,可進行觸屏操作,并且可以才屏幕上直接觀察小地圖。
(1)以相對于迷宮的沉浸式視角進行游戲。
(2)玩家在進行視線轉換時,由迷宮本身進行旋轉完成這一操作。
(3)設計怪物以及怪物的攻擊和巡視來達到增加游戲難度的效果。
(4)可以通過觸碰回復血設備來回復玩家控制角色的血量,提高游戲體驗。
(5)從迷宮的起始設置點開始,走到出口則本關算為通過,開啟下個新的地圖。
(6)游戲中有設置存檔點,當玩家到達存檔點時可以進行存檔,已經存檔的游戲數據可以在主機面讀取。

圖1:游戲開發流程圖
游戲的結構設計主要有三層,分別是:第一,視圖層:這一層的主要內容是加入到場景層次結構的渲染的對象或者是各視角的攝像機,主要功能為將游戲畫面優質的提供給玩家;第二,控制層:將管理腳本的組件加入到主攝像機或空對象中,這層實現的是玩家與游戲的交互,即對游戲畫面與游戲任務的控制;第三,模型層:主要是在渲染對象中加入的邏輯腳本組件,這些腳本對游戲對象進行邏輯處理,便于更好的管理導入的3D 模型,使不同類型的模型實現不同的功能。
迷宮手游的實現流程主要從兩部分進行,如圖1所示,第一部分為游戲場景與角色設計,第二部分為系統功能實現;游戲的場景與角色設計部分可以并行開發,游戲系統功能作為一部分進行開發:
4.1.1 場景搭建與渲染
創建一個新的工程和場景,在菜單欄中create 一個 terrain,對terrain 的大小進行設置,利用多個立體模型和地圖設計以及場景設計,完成多個大型復雜的迷宮場景,將場景內的天空盒、地形、外部導入的3D 模型、投影、粒子系統等進行渲染。
4.1.2 3D 建模與模型導入
通多3Dmax 軟件根據角色設計對游戲角色進行建模,建模完成之后從3Dmax 軟件內導入并且導入到Unity3D 游戲引擎的工程內。
4.1.3 普通怪物設計
根據導入普通小怪物的3D 模型,編寫相應的代碼,普通小怪物是可移動的,血量和攻擊力均比較低,但數量較多,分布在迷宮的各個角落,可以在迷宮內移動,自主巡視功能,自主攻擊功能,在在一定范圍內追擊玩家對玩家造成傷害;是關于計算可行走區域的判定:靜態障礙物在 Bake 時指定,場景中選中不可移動的障礙無 -> Navigation Window 的 Object 標簽頁 ->勾選 Navigation Static -> Navigation Layer 選擇 Not Walkable;動態障礙物不是在 Bake 時指定的,動態障礙物的判定通過給游戲對象添加一個 Nav Mesh Obstacle 組件;而關于普通小怪物的生成:新建物理范圍碰撞器對象,設定為當坦克進入這一物理范圍內,會生產小怪,在代碼中創建一個攻方模型對象Prefabs,而生成位置的設定有物理碰撞器來確定關于自動尋路功能的實現;普通小怪物在一定范圍內可以自動尋路,自動尋路功能的實現由A Star 算法完成,A Star 算法是貪心算法的改進,通過縮減貪心算法的回溯計算而實現,下面是關于AStar 算法的實現過程:
(1)通過Unity3D 引擎將網格節點地圖進行渲染;
(2)定義兩個變量來存儲已經計算過的到點稱為關閉列表和還沒有被計算的點成為開放列表;
(3)在開放列表內設定一個當前節點,作為將物理碰撞器范圍內的起始點;
(4)計算開放列表內所有不在關閉列表內的鄰近節點到玩家角色的位置節點的代價值;
(5)將處理之后的鄰近節點中代價最小的節點作為當前節點并保留在開放列表中,其它已經處理過的鄰近點(即路徑較長的路線),被存入關閉列表內;
(6)再次執行第4 步,當現在所在位置的節點就是玩家角色的位置的節點或現在所在位置的節點不是玩家角色的位置的節點但是已經沒有鄰近節點可以被處理,就退出路徑尋找,到玩家角色當前位置的最短路徑已經被找到。節點代價值的計算公式B 為:F=G+H 其中F代表節點的代價值,G 表示從網格節點地圖內的上一個位置到現在位置的兩節點之間的幾何距離,H 表示從網格節點地圖內的現在位置到玩家角色的位置的兩節點之間的幾何距離。
4.1.4 關卡boss 設計
導入關卡boss 的模型,設計boss 的算法,實現boss 在一定范圍內可以追擊玩家游戲角色,擁有自動尋路,自主巡視功能,自主攻擊功能,但是具有大量的血量和極高的攻擊力,移動速度較慢,但具有多種攻擊方式有較大的難度,并且可以在一定范圍內躲避玩家游戲角色的攻擊;關于計算可行走區域的判定與普通怪物相同;而boss 的不會生產,boss 相對于迷宮來說一直都是存在的:新建物理范圍碰撞器對象,設定為當坦克進入這一物理范圍內,會就執行遮蔭攻方模型對象Prefabs,開始對玩家進行攻擊;自動尋路功能也是由A Star 算法實現。
4.1.5 玩家角色設計
對實現了玩家控制角色進行游戲的功能進行代碼編寫,可通過游戲角色進行攻擊功能,防御功能,子彈軌道的設計,血量設計,移動功能,并且可切換游戲角色。

圖2:游戲開始及游戲主界面

圖3:游戲讀檔界面

圖4:游戲關卡選擇和游戲進行界面
4.2.1 攝像機
迷宮的地圖非常大,所以需要移動攝像機才可以實現破解迷宮,尋找出口的結果。并且給為場景攝像機添加腳本,在觸屏移動時攝像機也會跟隨玩家移動,此外攝像機需要相對來說寬廣的視野,可以使玩家可以及時了解游戲內的形況,且要通過較高的攝像機綁定和畫面設置實現部分小地圖預覽。
4.2.2 游戲數據與存檔讀檔
游戲內的一部分數據的本地長期保存和與讀取有由PlayerPrefs 類實現,如:游戲角色的血量屬性,攻擊力屬性,攻擊冷缺時間等;另一部分的數據存儲與讀取由XML 文檔實現,如:游戲的存檔與讀檔功能就是通過XML 文檔來實現的。
UI 設計:根據前期的設計直接制作UI。
游戲開始及游戲主界面,如圖2所示。游戲讀檔功能界面如圖3所示,點擊存檔文件游戲能實現存檔功能,而在游戲中到達存檔點存檔將直接進入存檔的游戲。關卡界面如圖4所示,直接點擊關卡進入游戲,游戲過程中通過鍵盤控制坦克移動和攻擊。
通過邀請多位玩家數次試玩,得到的反饋結果是:迷宮場景的逼真度非常高,有身臨其境的感覺,并且操作簡單,玩家能夠輕易理解規則,容易上手,此外,攝像機鏡頭轉換速度較慢,避免了在3D 場景中因為鏡頭轉換過快而產生的3D 眩暈癥狀;也存在一些需要改進的地方,如觸屏靈活度較低,因為降低了鏡頭轉換速度,迷宮難度較高,比較復雜等。
利用Unity 游戲引擎的強大功能,構造逼真的3D 物理模型,模擬真實的迷宮手游場景,能較好地鍛煉空間的認知和思考能力。在完成游戲,通過全部關卡之后,按照文獻給出的測試空間的認知與思考能力的題目進行測試,筆者研究小組內的所有成員的空間的認知與思考能力均有不同程度的提高。