張佳豪?許向榮?李光印



摘? 要:一個國家的文化傳承很大程度上是基于這一國家所特有的文字。漢字是中華文化最博大精深的部分之一,更是中國文化傳承最依賴的方法之一,漢字對于我國文化的重要性不言而喻。而當下人們對各種創新想法抱著接受的態度的背景下,創新出一款能夠使得孩童們增進對于中華文化的認同感與歸屬感的游戲逐漸有了市場。這一游戲在推動中國文化的傳播方面做出自己的貢獻。在現有的游戲設計軟件中,Unity3D軟件是極為優秀的游戲創建軟件。
關鍵詞:漢字;中華文化;Unity3D;游戲
中圖分類號:TP311? ? ? ? 文獻標識碼:A文章編號:2096-4706(2022)06-0024-04
Design and Implementation of Chinese Character Hopping Algorithm Based on Unity3D
ZHANG Jiahao, XU Xiangrong, LI Guangyin
(School of Information Engineering, Zhengzhou University of Science and Technology, Zhengzhou? 450064, China)
Abstract: The cultural inheritance of a country is largely based on its unique script. Chinese characters are not only one of the most profound parts of Chinese culture, but also one of the most dependent methods for Chinese cultural inheritance. The importance of Chinese characters for Chinese culture is self-evident. In the current era, under the background of people accept all kinds of innovative ideas, there is a market for a game that can help children enhance their sense of identity and belonging to Chinese culture. The game makes its own contribution to promoting the spread of Chinese culture. Among the existing game design software, Unity3D is an excellent game creation software.
Keywords: Chinese character; Chinese culture; Unity3D; game
0? 引? 言
隨著時代的前進、科技的不斷發展,新的科學理念也在這一歷史車輪下不斷涌現,技術也在時代進步中不斷更新換代,新的概念也被人們不斷提出,新的體系改革也隨著而來。新時代的技術發展帶來的是新的機遇和新的挑戰,許多領域的結構體系因此發生了巨大改變。近年來隨著計算機物理硬件的提升以及社會經濟的進步,游戲技術也得到了空前的發展[1]。Unity3D這一游戲創作平臺在游戲創作領域占據著不可或缺的地位,也是現有創作領域內最為常見的游戲創作軟件。目前國內外許多專家在Unity平臺研發了多種游戲[2],如伍傳敏等人基于Unity3D完成了第一人稱射擊游戲的設計與開發[3];張典華等人基于Unity3D實現了多平臺兼容的三維空戰游戲[4];劉晉鋼等人則研究了Unity3D與Kinect整合數據技術在體感游戲中的應用價值[5]。
目前市面上的游戲的設計針對對象并不是為兒童,主要是瞄向青少年這一年齡段并對此進行游戲設計,因此對于專用于兒童方面的游戲是極少出現的,現有市場上的游戲缺乏對兒童學習認知的提升,尤其是在教育方面。因此通過以上調查,得出可以通過對微信跳一跳這一小程序的創新來設計新穎且具有一定教育能力的新游戲是具有一定的市場的,也能使得幼兒孩童對于學習這一行為充滿興趣。希望在未來,這一游戲能夠在教育新興行業中占據一定的位置,補足可能存在于孩童學前教育階段的一部分空缺,并使得孩童能夠認知漢字并不斷學習,對漢字有更大的興趣。
1? 概要
本文主要以Unity3D引擎為游戲開發平臺,C#等程序語言為基礎設計出一款關于漢字的跳一跳游戲,主要闡述程序中的一些重要的關鍵算法與思路,以漢字為游戲的主要特征元素并以跳一跳類型游戲,通過按照給出的音頻、拼音等提示判斷正確的條約方向,當棋子從正確的方向跳躍到正確的區塊上時,這便是一次成功過關,達到設定的通關條件時即為成功通關。
2? 案例的關鍵算法與思路
游戲在創立的初期是需要確立起游戲整體的構架以及預想設定的大致結構,然后通過對預想設定剖析分解成不同的情況,并按照預想情況來分別解決未來可能遇到問題與困難,建立的總體架構如圖1所示。
2.1? 如何使用漢字元素
漢字元素是漢字跳一跳游戲的顯著游戲元素特征,對于漢字元素的應用也是貫穿整個游戲,如漢字文字顯示與漢字文字音頻等方面,對于文字音頻的引用、文字顯示以及隨機拼音生成都是整個漢字跳一跳游戲的漢字元素的展現,如圖2所示。對于在跳一跳程序中使用漢字元素主要用于各種過關的提示以及對孩童的教育,使得孩子能夠明白漢字的意義,這些目的的實現則是要基于漢字的隨機生成與應用,而隨機生成整體設計思路是實現這一目的最主要的程序設計,在整個文字范圍中按照數組排列在其中隨機出一個數組,將其中的漢字音頻元素提出使用,并使用do-while循環來預防重復出現同一元素,避免出現相同的漢字元素以干擾游戲體驗。81A203D7-76DF-4C5D-9311-955E3A045C57
2.2? 如何建立游戲檢測判定機制
游戲的檢測機制是游戲能否正常運行的關鍵,也是整個游戲對游戲選擇行為的判斷,并對不同的判斷顯示不同的反應。對于漢字跳一跳這一游戲來說主要需要判定以下進入漢字時、待在漢字時、退出漢字時以及保持進入的方向這幾種情況,在對不同的情況時分別建立不同的檢測判定機制來判斷接下來將使用怎樣的判定或輸出怎樣的結果,因此整個判定機制使用OnTriggerEnter來作為觸發機制。當進入漢字時,首先判斷棋子是否落在地面上,若是落在地面上即無法過關并重新再來;若是落在正確的區塊上觸發刪除錯字以及區塊并加分的判定,但在跳躍過程中觸發判定棋子是處于鎖死的狀態不接受任何操作,防止棋子跳躍未完成,但又重新開始跳躍;若是落在錯誤的區塊上觸發判斷提示跳躍方向錯誤,然后重置位置。當退出漢字時即棋子離開漢字區塊時,鎖定棋子的移動跳躍,防止在跳躍過程中的再次移動,在跳躍時限制跳躍次數,只能夠跳躍一次。當待在漢字時,需要判斷是否在正確的區塊內,若是在錯誤的區塊內,則在提示完畢后再對棋子的位置進行重置;若是在正確的區塊內,則判斷接下來棋子跳躍方向以及跳躍遠近。如圖3、圖4所示。
2.3? 如何實現棋子跳躍以及跳躍距離
在最開始的跳一跳程序中,棋子跳躍的距離的判定就是整個游戲一大特征以及最為核心的程序,也是跳一跳這個程序的有趣之處,在整個游戲中棋子跳躍以及跳躍的距離是依據設定的施加力以及施加力的大小來決定的,其中要實現跳躍的定義以及施加力大小的定義,如圖5所示。其中實現跳躍是依據代碼進行定義,定義棋子接受施加力后以某一跳躍方式實現,而對于跳躍的距離的判斷則是依據一定的算法,依據時間鐘timer來對跳躍的時間進行記錄,定義跳躍的力以及跳躍的距離,如圖6所示。
2.4? 如何自動生成與消除障礙
Unity3D游戲引擎能夠快速開發,并具有高的擴展性,其腳本不僅支持JavaScript,還能夠支持C#,還支持C編寫的DLL插件,可以提高代碼的重復使用率。在漢字跳一跳中棋子在設想中是以跳躍到障礙上來作為玩家是否確認自己的選擇,因此在游戲中會涉及許多障礙的創立以及刪除,若是將障礙一個個單獨設計并保存會將游戲占用空間過大以及很多的問題。在上述情況下,根據預想需求的自動生成與銷毀障礙的程序代碼便因此而被設計出來。在整個代碼程序中障礙的生成、消除等功能以及障礙的材質選擇是依據代碼設定隨機生成,使得游戲中的障礙可以依據游戲進度無限生成并減少原本需要設計的內容物體。按照設計思路來說,根據攝像頭的位置設定來顯示棋子的跳躍,但棋子跳躍方向選擇是依據三維坐標軸中X軸、Y軸進行生成與確定,之后再將資源庫中選取資源并表現,銷毀則是對已經經過的X軸、Y軸上的障礙的資源以及創建的物體進行刪除、銷毀,減少電腦和手機內存的占用。
3? 關鍵算法與思路的實現
基于上述的基礎程序設計與大致算法思路,可以在Unity3D中實現漢字跳一跳的游戲程序制作并加以完善,對于上述問題分別作出實現步驟與代碼。
3.1? 資源導入以及棋子、障礙等預制體創建
在Unity3D中創建初步的棋子以及障礙的預制體,將游戲所需資源導入其中,資源中包含預制使用的漢字音頻以及漢字圖像,用來提示正確與否以及其他各項情景時使用的音效。之后便將棋子以及障礙的預設調整到合適的大小,將其作為預制體進行保存。
3.2? 棋子跳躍距離
游戲的面臨的首要問題便是如何實現棋子的跳躍,而要實現這一功能則是依據對力這一概念在Unity3D中編寫相應代碼以及操作來使得棋子接受力的作用,從而進行跳躍,但是在跳躍中按照原本的預想實現棋子按照一定的角度進行跳躍,因此對力賦予向量角度值實現預想。棋子的跳躍距離是對棋子本身進行設定,選擇使用基礎的函數來解決這一問題:記錄按動按鍵的時間長短并將時間帶入預設好的函數中,根據常量以及函數運算得出結果,這個結果就是跳躍距離的長短。在實現跳躍距離后對跳躍的動畫效果進行設計,實現障礙壓縮、頂出等動態動作,在動作完成時鏈接棋子跳躍,其中部分核心代碼如下:
if (Input.GetMouseButtonDown(0)&&SafeManager._instances.isSafe)
{
isPop = false;
oldTime = Time.time;
isForcetimer = true;
isPush = true;
}
if (isPush)
{
PushBarrierPlayerScale(barriers[barriers.Count - 2],player);
}
if (isForcetimer)
{
forceSize = Time.time - oldTime;
if (forceSize > 1)
{
forceSize = 1;
Addforze += 0.005f;
}
}
if (Input.GetMouseButtonUp(0) )
{
isForcetimer = false;
isPush = false;
isPop = true;
newTime = Time.time;
gameObject.GetComponent
Addforze = 1;
forceSize = 0;
}
3.3? 棋子跳躍方向
根據游戲的初始設想是使得玩家在跳躍前能夠對棋子跳躍的路徑進行判斷與選擇,使得整個游戲能夠使人認知漢字,達到程序設計的目的,這一想法需要對其進行新的代碼設計,使得棋子能夠對跳躍的方向進行選擇,也就是能夠轉向,按照預想是根據按鍵按下來對方向進行轉換,部分核心代碼如下;
if (Input.GetMouseButtonDown(1) && PlayerManager._instances.isGo == false)
{
if (currentLookPos.Equals(PlayerManager._instances.nextPos))
{
currentLookPos = PlayerManager._instances.nextFalseChineseBarrier.transform.position;
}
else
{
currentLookPos = PlayerManager._instances.nextPos;
}
}
3.4? 檢測棋子跳躍正確與否
棋子在跳躍前選擇跳躍方向、決定跳躍的距離之后便是對跳躍方向是否正確,跳躍距離是否符合以及可能出現的情況進行建立檢測以及觸發的機制,在棋子的多項判斷的根據中主要是對可能出現的情況來進行分別整理,如跳躍中無法繼續跳躍、并未跳躍成功且貼住障礙等可能出現的情況,一一進行分析并思考應該用怎樣的代碼程序去編寫判定觸發的機制。在對整體的游戲進程進行分析并對流程中預定步驟逐步分解,分成三個基本情況;進入漢字時、離開漢字時、呆在漢字時,并在此基礎上對整個機制進行程序設計以及代碼編寫,部分代碼如下:
if (other.gameObject == PlayerManager._instances.currentBarrier)
{
PlayerManager._instances.isLastLeftBarrier = PlayerManager._instances.isLeftBarrier;
isSafe = false;
}
3.5? 障礙的自動生成與銷毀
在跳一跳本來的游戲設計中,障礙是作為棋子的類似“墊腳石”的存在,通過跳躍在障礙上方來達到過關的目的,因此障礙也是游戲過關的條件,但在整體的游戲設計中不可能設計太多的障礙與相同的代碼占據不必要的空間以一種死板的方式來完成游戲,而是通過多項程序設計來實現障礙的生成與銷毀實現代碼的簡潔明了化。在整個游戲中障礙是棋子落下的地方,也是棋子判斷跳躍方向以及跳躍距離的根據,障礙不是將其作為單體并多次建立組成路徑,而是將其作為一個循環,能夠使得障礙可以多次重復的生成與銷毀,并對其賦予新的材質,部分核心代碼如下:
if (barriers.Count > 4) //自動刪除
{
Destroy(barriers[0]);
barriers.RemoveAt(0);
}
if (falseChineseBarriers.Count != 0)
{
Destroy(falseChineseBarriers[0]);
falseChineseBarriers.RemoveAt(0);
}
4? 結? 論
漢字跳一跳是在程序算法設計與思路實現過程中較為注重程序的實現,在不斷地測試中找到意料之外的錯誤并對其加以改良完善,通過對整體游戲的程序設計不斷改善以及根據情況進行修改來使得整個游戲達到理想化的普遍情況。而在游戲中則是以Unity3D作為開發平臺進行程序設計開發初步實現程序雛形,在之后對這一程序的不斷完善中發布到普通PC電腦、iOS、Android、mac電腦等多項游玩平臺,具備更加優秀的跨平臺性能,能夠在不同平臺間流暢運行。
參考文獻:
[1]胡靜,胡欣宇.基于Unity3D引擎的游戲設計與開發 [J].電子元器件與信息技術,2021,5(2):138-140+154.
[2] 宣雨松.Unity3D游戲開發 [M].北京:人民郵電出版社,2012.
[3] Unity Technologies.Unity5.x 從入門到精通 [M].北京:中國鐵道出版社,2016.
[4] SKEET J.深入理解C#:第3版 [M].姚琪琳,譯.北京:人民郵電出版社,2016.
[5] 盧金浩,張帥,伍傳敏.基于Unity3D三維游戲場景與AI系統的設計與實現 [J].三明學院學報,2013,30(6):31-35+44.
作者簡介:許向榮(2000—),男,漢族,河南周口人,本科在讀,研究方向:數字媒體技術;張佳豪(2001—),男,漢族,河南周口人,本科在讀,研究方向:數字媒體技術;李光印(2001—),男,漢族,河南許昌人,本科在讀,研究方向:數字媒體技術。
收稿日期:2022-02-06
基金項目:河南省高校省級大學生創業創新訓練計劃項目(S202112746002)81A203D7-76DF-4C5D-9311-955E3A045C57