基于Unity3D的汉字跳一跳算法设计与实现

2022-07-06 05:17张佳豪许向荣李光印
现代信息科技 2022年6期
关键词:中华文化汉字游戏

张佳豪?许向荣?李光印

摘  要:一个国家的文化传承很大程度上是基于这一国家所特有的文字。汉字是中华文化最博大精深的部分之一,更是中国文化传承最依赖的方法之一,汉字对于我国文化的重要性不言而喻。而当下人们对各种创新想法抱着接受的态度的背景下,创新出一款能够使得孩童们增进对于中华文化的认同感与归属感的游戏逐渐有了市场。这一游戏在推动中国文化的传播方面做出自己的贡献。在现有的游戏设计软件中,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().AddForce(((SafeManager._instances.currentLookPos - gameObject.transform.position + new Vector3(0, addForceUpSize, 0))).normalized * (forceSize + Mathf.Log(Addforze)) * 500, ForceMode.Force);81A203D7-76DF-4C5D-9311-955E3A045C57

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

猜你喜欢
中华文化汉字游戏
让中华文化在海外华裔青少年心中“留根”
站在日本的讲台上传授中华文化
两岸青年在厦门共商中华文化传承与青年担当
汉字这样记
汉字这样记
数独游戏
疯狂的游戏
爆笑游戏
第八章直接逃出游戏