張佳豪?許向榮?李光印
摘? 要:一個(gè)國(guó)家的文化傳承很大程度上是基于這一國(guó)家所特有的文字。漢字是中華文化最博大精深的部分之一,更是中國(guó)文化傳承最依賴的方法之一,漢字對(duì)于我國(guó)文化的重要性不言而喻。而當(dāng)下人們對(duì)各種創(chuàng)新想法抱著接受的態(tài)度的背景下,創(chuàng)新出一款能夠使得孩童們?cè)鲞M(jìn)對(duì)于中華文化的認(rèn)同感與歸屬感的游戲逐漸有了市場(chǎng)。這一游戲在推動(dòng)中國(guó)文化的傳播方面做出自己的貢獻(xiàn)。在現(xiàn)有的游戲設(shè)計(jì)軟件中,Unity3D軟件是極為優(yōu)秀的游戲創(chuàng)建軟件。
關(guān)鍵詞:漢字;中華文化;Unity3D;游戲
中圖分類號(hào):TP311? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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? 引? 言
隨著時(shí)代的前進(jìn)、科技的不斷發(fā)展,新的科學(xué)理念也在這一歷史車輪下不斷涌現(xiàn),技術(shù)也在時(shí)代進(jìn)步中不斷更新?lián)Q代,新的概念也被人們不斷提出,新的體系改革也隨著而來(lái)。新時(shí)代的技術(shù)發(fā)展帶來(lái)的是新的機(jī)遇和新的挑戰(zhàn),許多領(lǐng)域的結(jié)構(gòu)體系因此發(fā)生了巨大改變。近年來(lái)隨著計(jì)算機(jī)物理硬件的提升以及社會(huì)經(jīng)濟(jì)的進(jìn)步,游戲技術(shù)也得到了空前的發(fā)展[1]。Unity3D這一游戲創(chuàng)作平臺(tái)在游戲創(chuàng)作領(lǐng)域占據(jù)著不可或缺的地位,也是現(xiàn)有創(chuàng)作領(lǐng)域內(nèi)最為常見(jiàn)的游戲創(chuàng)作軟件。目前國(guó)內(nèi)外許多專家在Unity平臺(tái)研發(fā)了多種游戲[2],如伍傳敏等人基于Unity3D完成了第一人稱射擊游戲的設(shè)計(jì)與開(kāi)發(fā)[3];張典華等人基于Unity3D實(shí)現(xiàn)了多平臺(tái)兼容的三維空戰(zhàn)游戲[4];劉晉鋼等人則研究了Unity3D與Kinect整合數(shù)據(jù)技術(shù)在體感游戲中的應(yīng)用價(jià)值[5]。
目前市面上的游戲的設(shè)計(jì)針對(duì)對(duì)象并不是為兒童,主要是瞄向青少年這一年齡段并對(duì)此進(jìn)行游戲設(shè)計(jì),因此對(duì)于專用于兒童方面的游戲是極少出現(xiàn)的,現(xiàn)有市場(chǎng)上的游戲缺乏對(duì)兒童學(xué)習(xí)認(rèn)知的提升,尤其是在教育方面。因此通過(guò)以上調(diào)查,得出可以通過(guò)對(duì)微信跳一跳這一小程序的創(chuàng)新來(lái)設(shè)計(jì)新穎且具有一定教育能力的新游戲是具有一定的市場(chǎng)的,也能使得幼兒孩童對(duì)于學(xué)習(xí)這一行為充滿興趣。希望在未來(lái),這一游戲能夠在教育新興行業(yè)中占據(jù)一定的位置,補(bǔ)足可能存在于孩童學(xué)前教育階段的一部分空缺,并使得孩童能夠認(rèn)知漢字并不斷學(xué)習(xí),對(duì)漢字有更大的興趣。
1? 概要
本文主要以Unity3D引擎為游戲開(kāi)發(fā)平臺(tái),C#等程序語(yǔ)言為基礎(chǔ)設(shè)計(jì)出一款關(guān)于漢字的跳一跳游戲,主要闡述程序中的一些重要的關(guān)鍵算法與思路,以漢字為游戲的主要特征元素并以跳一跳類型游戲,通過(guò)按照給出的音頻、拼音等提示判斷正確的條約方向,當(dāng)棋子從正確的方向跳躍到正確的區(qū)塊上時(shí),這便是一次成功過(guò)關(guān),達(dá)到設(shè)定的通關(guān)條件時(shí)即為成功通關(guān)。
2? 案例的關(guān)鍵算法與思路
游戲在創(chuàng)立的初期是需要確立起游戲整體的構(gòu)架以及預(yù)想設(shè)定的大致結(jié)構(gòu),然后通過(guò)對(duì)預(yù)想設(shè)定剖析分解成不同的情況,并按照預(yù)想情況來(lái)分別解決未來(lái)可能遇到問(wèn)題與困難,建立的總體架構(gòu)如圖1所示。
2.1? 如何使用漢字元素
漢字元素是漢字跳一跳游戲的顯著游戲元素特征,對(duì)于漢字元素的應(yīng)用也是貫穿整個(gè)游戲,如漢字文字顯示與漢字文字音頻等方面,對(duì)于文字音頻的引用、文字顯示以及隨機(jī)拼音生成都是整個(gè)漢字跳一跳游戲的漢字元素的展現(xiàn),如圖2所示。對(duì)于在跳一跳程序中使用漢字元素主要用于各種過(guò)關(guān)的提示以及對(duì)孩童的教育,使得孩子能夠明白漢字的意義,這些目的的實(shí)現(xiàn)則是要基于漢字的隨機(jī)生成與應(yīng)用,而隨機(jī)生成整體設(shè)計(jì)思路是實(shí)現(xiàn)這一目的最主要的程序設(shè)計(jì),在整個(gè)文字范圍中按照數(shù)組排列在其中隨機(jī)出一個(gè)數(shù)組,將其中的漢字音頻元素提出使用,并使用do-while循環(huán)來(lái)預(yù)防重復(fù)出現(xiàn)同一元素,避免出現(xiàn)相同的漢字元素以干擾游戲體驗(yàn)。81A203D7-76DF-4C5D-9311-955E3A045C57
2.2? 如何建立游戲檢測(cè)判定機(jī)制
游戲的檢測(cè)機(jī)制是游戲能否正常運(yùn)行的關(guān)鍵,也是整個(gè)游戲?qū)τ螒蜻x擇行為的判斷,并對(duì)不同的判斷顯示不同的反應(yīng)。對(duì)于漢字跳一跳這一游戲來(lái)說(shuō)主要需要判定以下進(jìn)入漢字時(shí)、待在漢字時(shí)、退出漢字時(shí)以及保持進(jìn)入的方向這幾種情況,在對(duì)不同的情況時(shí)分別建立不同的檢測(cè)判定機(jī)制來(lái)判斷接下來(lái)將使用怎樣的判定或輸出怎樣的結(jié)果,因此整個(gè)判定機(jī)制使用OnTriggerEnter來(lái)作為觸發(fā)機(jī)制。當(dāng)進(jìn)入漢字時(shí),首先判斷棋子是否落在地面上,若是落在地面上即無(wú)法過(guò)關(guān)并重新再來(lái);若是落在正確的區(qū)塊上觸發(fā)刪除錯(cuò)字以及區(qū)塊并加分的判定,但在跳躍過(guò)程中觸發(fā)判定棋子是處于鎖死的狀態(tài)不接受任何操作,防止棋子跳躍未完成,但又重新開(kāi)始跳躍;若是落在錯(cuò)誤的區(qū)塊上觸發(fā)判斷提示跳躍方向錯(cuò)誤,然后重置位置。當(dāng)退出漢字時(shí)即棋子離開(kāi)漢字區(qū)塊時(shí),鎖定棋子的移動(dòng)跳躍,防止在跳躍過(guò)程中的再次移動(dòng),在跳躍時(shí)限制跳躍次數(shù),只能夠跳躍一次。當(dāng)待在漢字時(shí),需要判斷是否在正確的區(qū)塊內(nèi),若是在錯(cuò)誤的區(qū)塊內(nèi),則在提示完畢后再對(duì)棋子的位置進(jìn)行重置;若是在正確的區(qū)塊內(nèi),則判斷接下來(lái)棋子跳躍方向以及跳躍遠(yuǎn)近。如圖3、圖4所示。
2.3? 如何實(shí)現(xiàn)棋子跳躍以及跳躍距離
在最開(kāi)始的跳一跳程序中,棋子跳躍的距離的判定就是整個(gè)游戲一大特征以及最為核心的程序,也是跳一跳這個(gè)程序的有趣之處,在整個(gè)游戲中棋子跳躍以及跳躍的距離是依據(jù)設(shè)定的施加力以及施加力的大小來(lái)決定的,其中要實(shí)現(xiàn)跳躍的定義以及施加力大小的定義,如圖5所示。其中實(shí)現(xiàn)跳躍是依據(jù)代碼進(jìn)行定義,定義棋子接受施加力后以某一跳躍方式實(shí)現(xiàn),而對(duì)于跳躍的距離的判斷則是依據(jù)一定的算法,依據(jù)時(shí)間鐘timer來(lái)對(duì)跳躍的時(shí)間進(jìn)行記錄,定義跳躍的力以及跳躍的距離,如圖6所示。
2.4? 如何自動(dòng)生成與消除障礙
Unity3D游戲引擎能夠快速開(kāi)發(fā),并具有高的擴(kuò)展性,其腳本不僅支持JavaScript,還能夠支持C#,還支持C編寫的DLL插件,可以提高代碼的重復(fù)使用率。在漢字跳一跳中棋子在設(shè)想中是以跳躍到障礙上來(lái)作為玩家是否確認(rèn)自己的選擇,因此在游戲中會(huì)涉及許多障礙的創(chuàng)立以及刪除,若是將障礙一個(gè)個(gè)單獨(dú)設(shè)計(jì)并保存會(huì)將游戲占用空間過(guò)大以及很多的問(wèn)題。在上述情況下,根據(jù)預(yù)想需求的自動(dòng)生成與銷毀障礙的程序代碼便因此而被設(shè)計(jì)出來(lái)。在整個(gè)代碼程序中障礙的生成、消除等功能以及障礙的材質(zhì)選擇是依據(jù)代碼設(shè)定隨機(jī)生成,使得游戲中的障礙可以依據(jù)游戲進(jìn)度無(wú)限生成并減少原本需要設(shè)計(jì)的內(nèi)容物體。按照設(shè)計(jì)思路來(lái)說(shuō),根據(jù)攝像頭的位置設(shè)定來(lái)顯示棋子的跳躍,但棋子跳躍方向選擇是依據(jù)三維坐標(biāo)軸中X軸、Y軸進(jìn)行生成與確定,之后再將資源庫(kù)中選取資源并表現(xiàn),銷毀則是對(duì)已經(jīng)經(jīng)過(guò)的X軸、Y軸上的障礙的資源以及創(chuàng)建的物體進(jìn)行刪除、銷毀,減少電腦和手機(jī)內(nèi)存的占用。
3? 關(guān)鍵算法與思路的實(shí)現(xiàn)
基于上述的基礎(chǔ)程序設(shè)計(jì)與大致算法思路,可以在Unity3D中實(shí)現(xiàn)漢字跳一跳的游戲程序制作并加以完善,對(duì)于上述問(wèn)題分別作出實(shí)現(xiàn)步驟與代碼。
3.1? 資源導(dǎo)入以及棋子、障礙等預(yù)制體創(chuàng)建
在Unity3D中創(chuàng)建初步的棋子以及障礙的預(yù)制體,將游戲所需資源導(dǎo)入其中,資源中包含預(yù)制使用的漢字音頻以及漢字圖像,用來(lái)提示正確與否以及其他各項(xiàng)情景時(shí)使用的音效。之后便將棋子以及障礙的預(yù)設(shè)調(diào)整到合適的大小,將其作為預(yù)制體進(jìn)行保存。
3.2? 棋子跳躍距離
游戲的面臨的首要問(wèn)題便是如何實(shí)現(xiàn)棋子的跳躍,而要實(shí)現(xiàn)這一功能則是依據(jù)對(duì)力這一概念在Unity3D中編寫相應(yīng)代碼以及操作來(lái)使得棋子接受力的作用,從而進(jìn)行跳躍,但是在跳躍中按照原本的預(yù)想實(shí)現(xiàn)棋子按照一定的角度進(jìn)行跳躍,因此對(duì)力賦予向量角度值實(shí)現(xiàn)預(yù)想。棋子的跳躍距離是對(duì)棋子本身進(jìn)行設(shè)定,選擇使用基礎(chǔ)的函數(shù)來(lái)解決這一問(wèn)題:記錄按動(dòng)按鍵的時(shí)間長(zhǎng)短并將時(shí)間帶入預(yù)設(shè)好的函數(shù)中,根據(jù)常量以及函數(shù)運(yùn)算得出結(jié)果,這個(gè)結(jié)果就是跳躍距離的長(zhǎng)短。在實(shí)現(xiàn)跳躍距離后對(duì)跳躍的動(dòng)畫效果進(jìn)行設(shè)計(jì),實(shí)現(xiàn)障礙壓縮、頂出等動(dòng)態(tài)動(dòng)作,在動(dòng)作完成時(shí)鏈接棋子跳躍,其中部分核心代碼如下:
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? 棋子跳躍方向
根據(jù)游戲的初始設(shè)想是使得玩家在跳躍前能夠?qū)ζ遄犹S的路徑進(jìn)行判斷與選擇,使得整個(gè)游戲能夠使人認(rèn)知漢字,達(dá)到程序設(shè)計(jì)的目的,這一想法需要對(duì)其進(jìn)行新的代碼設(shè)計(jì),使得棋子能夠?qū)μS的方向進(jìn)行選擇,也就是能夠轉(zhuǎn)向,按照預(yù)想是根據(jù)按鍵按下來(lái)對(duì)方向進(jìn)行轉(zhuǎn)換,部分核心代碼如下;
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? 檢測(cè)棋子跳躍正確與否
棋子在跳躍前選擇跳躍方向、決定跳躍的距離之后便是對(duì)跳躍方向是否正確,跳躍距離是否符合以及可能出現(xiàn)的情況進(jìn)行建立檢測(cè)以及觸發(fā)的機(jī)制,在棋子的多項(xiàng)判斷的根據(jù)中主要是對(duì)可能出現(xiàn)的情況來(lái)進(jìn)行分別整理,如跳躍中無(wú)法繼續(xù)跳躍、并未跳躍成功且貼住障礙等可能出現(xiàn)的情況,一一進(jìn)行分析并思考應(yīng)該用怎樣的代碼程序去編寫判定觸發(fā)的機(jī)制。在對(duì)整體的游戲進(jìn)程進(jìn)行分析并對(duì)流程中預(yù)定步驟逐步分解,分成三個(gè)基本情況;進(jìn)入漢字時(shí)、離開(kāi)漢字時(shí)、呆在漢字時(shí),并在此基礎(chǔ)上對(duì)整個(gè)機(jī)制進(jìn)行程序設(shè)計(jì)以及代碼編寫,部分代碼如下:
if (other.gameObject == PlayerManager._instances.currentBarrier)
{
PlayerManager._instances.isLastLeftBarrier = PlayerManager._instances.isLeftBarrier;
isSafe = false;
}
3.5? 障礙的自動(dòng)生成與銷毀
在跳一跳本來(lái)的游戲設(shè)計(jì)中,障礙是作為棋子的類似“墊腳石”的存在,通過(guò)跳躍在障礙上方來(lái)達(dá)到過(guò)關(guān)的目的,因此障礙也是游戲過(guò)關(guān)的條件,但在整體的游戲設(shè)計(jì)中不可能設(shè)計(jì)太多的障礙與相同的代碼占據(jù)不必要的空間以一種死板的方式來(lái)完成游戲,而是通過(guò)多項(xiàng)程序設(shè)計(jì)來(lái)實(shí)現(xiàn)障礙的生成與銷毀實(shí)現(xiàn)代碼的簡(jiǎn)潔明了化。在整個(gè)游戲中障礙是棋子落下的地方,也是棋子判斷跳躍方向以及跳躍距離的根據(jù),障礙不是將其作為單體并多次建立組成路徑,而是將其作為一個(gè)循環(huán),能夠使得障礙可以多次重復(fù)的生成與銷毀,并對(duì)其賦予新的材質(zhì),部分核心代碼如下:
if (barriers.Count > 4) //自動(dòng)刪除
{
Destroy(barriers[0]);
barriers.RemoveAt(0);
}
if (falseChineseBarriers.Count != 0)
{
Destroy(falseChineseBarriers[0]);
falseChineseBarriers.RemoveAt(0);
}
4? 結(jié)? 論
漢字跳一跳是在程序算法設(shè)計(jì)與思路實(shí)現(xiàn)過(guò)程中較為注重程序的實(shí)現(xiàn),在不斷地測(cè)試中找到意料之外的錯(cuò)誤并對(duì)其加以改良完善,通過(guò)對(duì)整體游戲的程序設(shè)計(jì)不斷改善以及根據(jù)情況進(jìn)行修改來(lái)使得整個(gè)游戲達(dá)到理想化的普遍情況。而在游戲中則是以Unity3D作為開(kāi)發(fā)平臺(tái)進(jìn)行程序設(shè)計(jì)開(kāi)發(fā)初步實(shí)現(xiàn)程序雛形,在之后對(duì)這一程序的不斷完善中發(fā)布到普通PC電腦、iOS、Android、mac電腦等多項(xiàng)游玩平臺(tái),具備更加優(yōu)秀的跨平臺(tái)性能,能夠在不同平臺(tái)間流暢運(yùn)行。
參考文獻(xiàn):
[1]胡靜,胡欣宇.基于Unity3D引擎的游戲設(shè)計(jì)與開(kāi)發(fā) [J].電子元器件與信息技術(shù),2021,5(2):138-140+154.
[2] 宣雨松.Unity3D游戲開(kāi)發(fā) [M].北京:人民郵電出版社,2012.
[3] Unity Technologies.Unity5.x 從入門到精通 [M].北京:中國(guó)鐵道出版社,2016.
[4] SKEET J.深入理解C#:第3版 [M].姚琪琳,譯.北京:人民郵電出版社,2016.
[5] 盧金浩,張帥,伍傳敏.基于Unity3D三維游戲場(chǎng)景與AI系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].三明學(xué)院學(xué)報(bào),2013,30(6):31-35+44.
作者簡(jiǎn)介:許向榮(2000—),男,漢族,河南周口人,本科在讀,研究方向:數(shù)字媒體技術(shù);張佳豪(2001—),男,漢族,河南周口人,本科在讀,研究方向:數(shù)字媒體技術(shù);李光?。?001—),男,漢族,河南許昌人,本科在讀,研究方向:數(shù)字媒體技術(shù)。
收稿日期:2022-02-06
基金項(xiàng)目:河南省高校省級(jí)大學(xué)生創(chuàng)業(yè)創(chuàng)新訓(xùn)練計(jì)劃項(xiàng)目(S202112746002)81A203D7-76DF-4C5D-9311-955E3A045C57