百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

基于Unity3D的三维页游的设计与实现

haoteby 2025-01-31 13:10 3 浏览

张海程,李效伟,郭玮玮,张萌,庄绪姣,车统统

(山东女子学院 信息技术学院,山东 济南 250300)

摘要:Unity3D引擎能够加速网页三维游戏的开发。基于Unity 3D引擎,使用3Ds Max对三维迷宫、赛车、轮胎等模型建模,利用JavaScript进行脚本编程,通过添加碰撞体实现碰撞检测,添加刚体实现重力等物理属性。最后设计并实现了一个能够满足基本交互的网页三维迷宫游戏,为系统专门设计计分、计时系统,记录玩家的得分情况,增强寻宝乐趣。

0引言

随着互联网的发展,网页游戏越来越受到人们的青睐。与其他游戏相比,网页游戏具有跨平台、免安装等优势,但是一般的网页游戏具有游戏画面质量低、用户体验差等缺点,像三维游戏[1]那样达到立体与真实的画面效果是网页游戏设计师一直以来的追求。王峰[2]为了解决这一问题,与二维软件Flash结合,制作出仿三维效果,虽然有很强的立体感,但是,制作精美游戏需要大量图像文件,开发复杂。利用Unity3D引擎开发的网页三维游戏能够有效解决这些问题,并且其具有强大的3D渲染功能,能高度优化图形渲染,大大提高游戏画面效果,增强用户体验。

Unity3D是近年来兴起的三维游戏开发引擎,具有优秀的可视化设计界面和易用的脚本编辑功能,能跨平台发布,对移动设备支持良好,是十分优秀的专业游戏引擎[3]。陈小岚等[4]针对打字游戏存在的竞争性不强、用户体验性差的缺点,基于Unity3D设计了一款多平台网络打字3D游戏,实现了3D效果和跨平台竞争实战。而文献[57]有明显的跨平台困难、交互性差问题,这充分体现了Unity3D作为开发工具的优越性。伍传敏[8]等基于Unity3D进行了FPS游戏的设计与开发,建立逼真的三维实体模型,增加了玩家浏览场景的真实感。郑磊等[9]基于Unity3D进行了网页三维游戏开发,对教育管理系统进行了实现,开发方便。由此可见,Unity3D引擎是一款极有发展前景的三维网页游戏开发工具。

1系统内容及架构

该系统实现对三维迷宫的漫游,并通过控制赛车的移动实现宝藏(轮胎)的收集。使用键盘中的W、S、A、D键控制赛车上、下、左、右移动;使用鼠标控制镜头视角的转换;采用碰撞检测技术,防止赛车穿墙而过,并且通过赛车和轮胎相撞实现收集宝藏的功能;对赛车添加刚体,实现重力等物理属性;利用音频组件,添加背景音乐和音乐特效,渲染游戏气氛;利用粒子系统,设计宝藏收集瞬间的特效,增加玩家寻宝的沉浸感;利用计分、计时系统,记录玩家的得分情况,增强寻宝乐趣。

系统通过游戏场景展示游戏功能,游戏场景中主要有赛车、地面、迷宫、轮胎等,系统架构如图1所示。

通过对系统架构的分析,可将系统分为控制、碰撞检测、数据、特效、声音等模块。

(1)控制:对赛车的控制,使其在场景中漫游寻找宝藏;对相机角度的控制,使其以赛车为中心任意改变视角。

(2)碰撞检测[10]:场景中各个物体之间都会有碰撞检测,如赛车和迷宫之间、赛车和地面之间、赛车和轮胎之间等。

(3)数据:记录收集宝藏的数量和闯关所用的时间,以及最后的总得分。

(4)特效:加入粒子特效,增强游戏的视觉效果。

(5)声音:系统的背景音乐和收集宝藏时碰撞产生的音效。

2游戏在引擎中的实现

2.1场景的设计与实现

Unity3D主要支持fbx格式的三维模型,系统通过3DsMax三维建模软件进行建模,用PhotoShop进行贴图等平面设计。

2.1.1模型建立与导入

本系统共设有2个关卡,场景中有三维迷宫、赛车、宝藏、红旗等模型。用3DsMax对模型建模后,利用其导出fbx格式,注意将贴图一同导出。将导出的fbx文件放入Unity3D中的Assets目录下,找到资源文件后将其设置为Prefabs(预置体),预置体是可以重复使用的游戏对象,所有的预置实例都指向原始预置,修改预置后改动的内容可应用到相关实例上。最后,在Unity3D中搭建迷宫,并将其他模型放到游戏场景中的合适位置。

2.1.2场景的显示

Unity3D内置渲染引擎,在场景中设置照相机和灯光(平行光、点光源等),能将游戏中的场景显示出来。场景设计图如图2所示。

2.1.3场景的漫游

Unity3D引擎内置MonoDevelop编辑器,本系统所用语言是JavaScript和C#。为了实现控制赛车在场景中漫游的功能,需为赛车添加控制移动的JS脚本,并让照相机随赛车一起移动。控制移动的关键代码如下:

if(Input.GetKey(KeyCode.W))

{

this.transform.Translate(Vector3.forward*Time.

deltaTime*-MoveSpeed);

}

if(Input.GetKey(KeyCode.A))

{

this.transform.Translate(Vector3.left*Time.

2.1.4场景视角的转换

对视角移动起主要影响作用的是鼠标移动的快慢与相机上下左右旋转的匹配程度、相机视角的角度控制以及相机的起始角度、方向灵敏度、上下最大视角与鼠标移动快慢(增量)。控制视角移动的关键代码如下:

void Update

{

//根据鼠标移动的快慢(增量), 获得相机左右上下旋转的角度(处理X)

float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

transform.localEulerAngles=new Vector3(-rotationY, rotationX, 0);

}

将代码绑定到摄像机上,即可控制相机视角转换,由于迷宫场景与相机一同移动,所以通过控制鼠标移动可以实现迷宫场景的视角转换。

2.1.5碰撞检测

场景漫游过程中,为防止“穿墙而过”,需给每一个物体添加碰撞检测组件。碰撞体分为不同类型,迷宫场景添加Mesh Collider,赛车、轮胎添加Box Collider。例如图2(b),为防止赛车从地板掉落,需给地面和赛车添加碰撞体。

图形界面事关系统的友好度,在Unity3D中,用GUI类进行图形界面的设计,其提供了许多界面的高级控件,如Label,Button等。界面所用的图片由美工用PhotoShop制作完成。游戏界面如图3所示。

图3(a)是开始界面,设有开始和帮助按钮,点击开始按钮进入游戏场景,点击帮助按钮会展示游戏规则和过关秘诀。图3(b)是恭喜过关界面,会显示获得宝藏数、所用时间和获得总分情况,并设有结束按钮和下一关按钮。系统还设有过关失败界面,只包括结束按钮,并显示获得宝藏数。界面的实现利用JS脚本进行编写,变量放在Update中,开始界面关键代码如下:

GUI.DrawTexture(Rect(0,0,Screen.width,Screen.height),startTexture);

GUI.skin.label.font = customFont;

if(GUI.Button(Rect(0.5*Screen.width-90,0.5*Screen.height+200,130,50),""))

{

Application.LoadLevel("scene");//进入游戏场景

}

2.3宝藏收集功能的实现

本模块实现宝藏的收集功能,其功能都是通过赛车和轮胎的碰撞产生的,碰撞后会使轮胎消失、产生轮胎型号等信息,而且发出粒子特效和声音特效。最后,添加计分和计时功能,碰撞一次分数加一,增强了玩家在游戏中的成就感和真实感。

粒子系统是由形状简单的众多粒子形成的一个不规则的物体,这些粒子具有位置、大小、颜色、透明度、生命周期等属性[11-13]。首先新建一个粒子发射器,设置好粒子的属性,为了编程的方便,将其变为GameObject类型,即先将粒子发射器拖到Hierarchy面板,再拖放到Project面板中。用相同的思路,声音特效的添加也是将音频转化成GameObject类型。关键代码如下所示:

var
explosionEnemy_bl:GameObject;//定义音频

var effect : GameObject;//定义粒子特效

function OnCollisionStay(collisionInfo : Collision)

{

Destroy (gameObject);//碰撞后轮胎消失

Instantiate(explosionEnemy_bl,transform.position,transform.rotation);//生成声音

Instantiate(effect,transform.position,transform.

rotation);//生成粒子特效

}

将生成的GameObject类型的粒子发射器和音频分别赋给对应变量,即完成特效的添加。

2.4网页版本的发布

Unity3D引擎支持多平台发布,可发布为Windows单机版、WindowsWeb版、Android、IOS等多个版本。系统通过Unity3D发布为网页版,打开File →Build Settings,添加游戏场景,选中发布的版本。最后,点击Build会生成一个包含html和unity3d格式的可执行文件的文件夹。点击html格式的可执行文件,游戏可以在联网的条件下用Unity Web Player插件在各种浏览器中打开。

网页版发布后,发现UI界面与美工制作的图片相比显示不清晰,解决方法是将图片类型改成Advance,然后去掉generate mip maps,并将Filter Mode改为Point。

3结束语

本系统实现了三维页游的开发。对游戏关卡、粒子系统、声音系统、碰撞检测、计分计时等功能进行了实现,三维游戏场景真实立体,带给玩家一种美好的视觉体验,系统运行流畅,达到设计要求。游戏的交互性方面还比较简单,还需要在交互上做深入的研究。

参考文献

[1] 冯科融,王和兴,连加美,等.基于HTML5的3D多人网页游戏实现方案[J].微型机与应用,2013,32(1):46.

[2] 王峰.基于二维网页游戏的仿三维画面研究[J].艺术教育,2013(4):132133.

[3] 吴少军.网页游戏开发新趋势与新技术漫谈[J].当代教具理论与实践,2012,4(6):175176.

[4] 陈小岚,宋刊.基于Unity3D的多平台网络打字游戏的设计与实现[J].教育信息技术,2015(1):111113.

[5] 温建华,高海峰.一种基于P2P的大规模在线游戏结构[J].计算机应用与软件,2008,25(4):118119.

[6] 张赐,吴健平.基于AE的校园房产三维GIS系统开发与研究[J].计算机技术与发展,2011,21(2):215218.

[7] 李建微,陈新,黄週祥.可扩展的MMORPC游戏框架的设计与实现[J].计算机技术与发展,2012,22(2):15.

[8] 伍传敏,张帅,邱锦明.基于Unity3D的FPS游戏与开发[J].三明学院学报,2012,29(2):3540.

[9] 郑磊,杨旭波,包子建.基于三维网页技术的Unity3D教学管理系统的设计与实现[D].上海:上海交通大学,2013.

[10] 范昭炜,万华根,高曙明.基于流的实时碰撞检测算法[J].软件学报,2004,15(10):15051514.

[11] 陈显军,李心颖,湛永松.GPU支持下基于粒子系统编辑器的特效技术研究[J].工程图学学报,2011(6):7781.

[12] 汪继文,胡文平,金余峰.基于粒子系统的8字动态烟花仿真[J].计算机仿真,2010,27(10):211214.

[13] 李海,汪继文.基于粒子系统的位置可控有声烟花模拟[J].微型机与应用,2013,32(9):3234.

相关推荐

手机如何检测是否被安装木马程序?如何防止路由器被黑客重置?

黑客攻击无线路由器有3种途径:...

盈盈可握的娇媚——全能美物ORICO WRE-30

由于工作的关系经常出差,在酒店除了一个RJ45接头,通常都没有无线网络可以提供,不可能自己携带太大的无线路由器,便携式的也买过几个,但是功能上大打折扣实在无法忍受,一直期盼能有既便携也功能丰富强大的产...

安卓重大锁屏密码漏洞,国产手机有几个中招了?

上周,一条新闻吸引了托尼注意。只用一张SIM卡,1分钟不到就能解锁你的安卓手机?...

零代码+免费+联网搜索:用DeepSeek+AnythingLLM搭建专属AI知识库

引言在信息爆炸的时代,如何高效管理私有数据并借助AI能力实现精准问答?本地私有知识库成为解决数据安全与智能化的最佳方案。本文将手把手教你使用开源工具AnythingLLM(项目地址:...

iOS越狱更轻松?黑客破解Lightning连接器

IT之家(www.ithome.com):iOS越狱更轻松?黑客破解Lightning连接器近日,德国黑客StefanEsser,也就是人们熟知的i0n1c在他Twitter上表示,黑客已成功破解了...

如何在 Windows 11 中更改 PIN

#寻找数码点评派#打开Windows设置,转到帐户登录选项,然后选择PIN(WindowsHello)...

2019年终黑客工具盘点-最佳篇

2019已经匆匆溜走,在2020伊始,小兮为大家带来了2019年终工具盘点的最佳篇,将分成三个部分为大家推荐工具,分别是Windows最佳工具、Linux最佳工具和手机最佳工具。话不多说,开整!Win...

磁盘被 BitLocker 锁住了怎么办?教你轻松解决

如果你的磁盘被BitLocker锁住,通常是因为系统检测到潜在的安全风险(如硬件改动、多次密码错误等)或丢失了密钥。以下是分步解决方案:一、确认被锁原因①硬件改动:更换主板、TPM芯片或启动顺序变化可...

风靡全球的安全应用AppLock,同样可能泄露隐私

安全研究人员发现,DoMobileLtd.公司开发的知名的安卓安全应用AppLock存在多个漏洞,容易受到黑客攻击。AppLock应用锁简介AppLock在超过50个国家拥有1亿多用户,它自身支持2...

安卓5.1.1前所有版本曝密码漏洞,轻松乱码即可破解锁屏

据德州大学研究人员发现代号棒棒糖的Android5.x存在一个严重的软件漏洞,只要攻击者能拿到机子的情况下,手机若设置的是数字密码解锁方式,只要输入足够长的乱码就能绕过屏幕锁定,进入到HOME主页取...

手机里有钱的,这5项设置要打开,就算丢了别人也偷不走

随着手机支付时代的到来,可恨的坏人也紧跟支付方式的变化,改为盯上了我们的手机。如果你手机里有钱的,那么一定不要掉以轻心,做好以下5项设置,让手机里的钱的更安全。设置SIM卡锁定设置SIM卡锁定,其实就...

原来破解邻居家的WiFi这么难?还是用万能钥匙吧

我们中的许多人认为,入侵wifi就像用铁锤打破塑料锁一样,并且使用以下提到的工具也是如此。入侵无线网络只是从防御性安全转移到攻击性安全的开始部分。入侵wifi包括捕获连接的握手并使用字典攻击等各种攻击...

电脑开机PIN码忘记了怎么办?教你不用重装系统也可以重置

在使用电脑的时候,我们往往会为了保护电脑的安全,从而设置开机密码。但是总会出现PIN码忘记导致无法开机使用,特别是许多用户反复的输入错误密码导致登录次数过多或者重复的开关机,登录选项被禁用,请使用其他...

送你个使用锦囊 防止蓝牙耳机被“策反”

你每天戴的蓝牙耳机可能被定位跟踪?近日有报道称,部分蓝牙耳机存在安全漏洞,可被不法分子快速植入具有定位功能的代码,从而实现远程跟踪,甚至监听。这一话题迅速登上微博热搜榜,不少网友惊呼:自己身边居然潜伏...

系统小技巧:无懈可击 Windows组策略管理系统密码

为了保护自己的系统安全,我们一般都会为系统设置密码。不过很多人为了记忆方便,设置的都是类似“123456”这样的简单密码,或者即使设置了较为复杂的密码,但是使用的时间很长也不变化。这些密码策略其实都有...