基于Unity3D的三维页游的设计与实现
myzbx 2025-06-08 23:02 2 浏览
张海程,李效伟,郭玮玮,张萌,庄绪姣,车统统
(山东女子学院 信息技术学院,山东 济南 250300)
摘要:Unity3D引擎能够加速网页三维游戏的开发。基于Unity 3D引擎,使用3Ds Max对三维迷宫、赛车、轮胎等模型建模,利用JavaScript进行脚本编程,通过添加碰撞体实现碰撞检测,添加刚体实现重力等物理属性。最后设计并实现了一个能够满足基本交互的网页三维迷宫游戏,为系统专门设计计分、计时系统,记录玩家的得分情况,增强寻宝乐趣。
0引言
随着互联网的发展,网页游戏越来越受到人们的青睐。与其他游戏相比,网页游戏具有跨平台、免安装等优势,但是一般的网页游戏具有游戏画面质量低、用户体验差等缺点,像三维游戏[1]那样达到立体与真实的画面效果是网页游戏设计师一直以来的追求。王峰[2]为了解决这一问题,与二维软件Flash结合,制作出仿三维效果,虽然有很强的立体感,但是,制作精美游戏需要大量图像文件,开发复杂。利用Unity3D引擎开发的网页三维游戏能够有效解决这些问题,并且其具有强大的3D渲染功能,能高度优化图形渲染,大大提高游戏画面效果,增强用户体验。
Unity3D是近年来兴起的三维游戏开发引擎,具有优秀的可视化设计界面和易用的脚本编辑功能,能跨平台发布,对移动设备支持良好,是十分优秀的专业游戏引擎[3]。陈小岚等[4]针对打字游戏存在的竞争性不强、用户体验性差的缺点,基于Unity3D设计了一款多平台网络打字3D游戏,实现了3D效果和跨平台竞争实战。而文献[57]有明显的跨平台困难、交互性差问题,这充分体现了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):46.
[2] 王峰.基于二维网页游戏的仿三维画面研究[J].艺术教育,2013(4):132133.
[3] 吴少军.网页游戏开发新趋势与新技术漫谈[J].当代教具理论与实践,2012,4(6):175176.
[4] 陈小岚,宋刊.基于Unity3D的多平台网络打字游戏的设计与实现[J].教育信息技术,2015(1):111113.
[5] 温建华,高海峰.一种基于P2P的大规模在线游戏结构[J].计算机应用与软件,2008,25(4):118119.
[6] 张赐,吴健平.基于AE的校园房产三维GIS系统开发与研究[J].计算机技术与发展,2011,21(2):215218.
[7] 李建微,陈新,黄週祥.可扩展的MMORPC游戏框架的设计与实现[J].计算机技术与发展,2012,22(2):15.
[8] 伍传敏,张帅,邱锦明.基于Unity3D的FPS游戏与开发[J].三明学院学报,2012,29(2):3540.
[9] 郑磊,杨旭波,包子建.基于三维网页技术的Unity3D教学管理系统的设计与实现[D].上海:上海交通大学,2013.
[10] 范昭炜,万华根,高曙明.基于流的实时碰撞检测算法[J].软件学报,2004,15(10):15051514.
[11] 陈显军,李心颖,湛永松.GPU支持下基于粒子系统编辑器的特效技术研究[J].工程图学学报,2011(6):7781.
[12] 汪继文,胡文平,金余峰.基于粒子系统的8字动态烟花仿真[J].计算机仿真,2010,27(10):211214.
[13] 李海,汪继文.基于粒子系统的位置可控有声烟花模拟[J].微型机与应用,2013,32(9):3234.
相关推荐
- PhantomJS出局!Puppeteer vs. Playwright 如何选择?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!前言浏览器自动化并不是一项新技术,Sel...
- Cesium 两种方式加载 Geoserver服务 WMTS以及WMS、WFS、KML资源图层
-
最近有需求,Cesium叠加Geoserver缓存瓦片,也就是WMTS瓦片,本来想直接使用Tomcat之类的容器发布瓦片服务再叠加。后来发现Geoserver的瓦片规则有点不太常规,...
- Windows App Studio 更新,快速打包 WordPress 网站为通用应用
-
2015年12月23日,10:52上午-Picturepan2今天,微软推出了12月WindowsAppStudio更新。如果你拥有WordPress网站,Wind...
- 2025 款凯迪拉克 Escalade IQ 将技术推向新高度
-
从55英寸显示屏到免提驾驶,2025款EscaladeIQ将凯迪拉克的科技提升到了一个新的水平。2025款凯迪拉克EscaladeIQ电动版的推出是重磅新闻。除了出乎意料的动力系统之外...
- 苹果iOS14发布,亮点不少,网友:有点像wp系统
-
北京时间6月23日凌晨1点,苹果开发者大会WWDC2020首次以直播形式举行,苹果公司CEO蒂姆·库克在史蒂夫·乔布斯剧院礼堂做开场演讲。视频截图随后,苹果高级副总裁CraigFederighi开...
- Avalonia跨平台入门第二十一篇之玩耍CEF
-
在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expande...
- WordPress 站点地图如何设置?WordPress 站点地图指南及其使用方法
-
WordPress站点地图设置指南及其使用方法吓载海量跨境营销软件:https://www.huahaikuajing.com什么是站点地图以及如何使用它如果您曾经坐下来阅读有关SEO的文章,您...
- 数控变频器的研究与实现(数控变频器作用)
-
一般变频器具有两种控制方式:控制面板控制方式和串行通信数据控制方式。控制面板控制方式利用变频器自带控制面板进行手动操控,一般应用于非自动控制场合。在自动化程度越来越高的工业生产现场以及机电一体化的数控...
- 一文学会VB编程,简单实用不费力(vb编程基础知识)
-
应用实例:给VB程序加菜单图标:在VB里面加图标比较麻烦,你需要用到API函数进行调用,参数不好理解:给菜单添加图标的API函数:GetMenu、GetSubMenu、GetMenuItemID、Se...
- 谷歌亲儿子升级Android11,Pixel大全套的技巧分享
-
GooglePixel5出来前,一直都是用GooglePixel4a作为主力机,手感好之余也有强大的拍照功能,NT$11,990的建议售价降低入手门槛,这或许也是Pixel系列不断...
- 基于Unity3D的三维页游的设计与实现
-
张海程,李效伟,郭玮玮,张萌,庄绪姣,车统统(山东女子学院信息技术学院,山东济南250300)摘要:Unity3D引擎能够加速网页三维游戏的开发。基于Unity3D引擎,使用3DsMax对三...
- DevExpress Universal Subscription v15.1.3震撼发布
-
DevExpress日前震撼发布了全新的v15.1.3版本。在此次发布的新版本中,您可以利用我们的UI控件集在Windows10上进行开发。凭借现在投放在Windows8XAML平台上的代码,我...
- 苹果智能手表十大细节曝光(苹果智能手表最新款功能介绍)
-
从今天开始,软件开发商将可以为苹果智能手表AppleWatch开发新应用。当然,这些应用不是独立的,它们必须是当前iPhone上现有应用的扩展。此外,AppleWatch的开发者套件WatchKi...
- 专题|外行人看大数据 十款最常用的数据可视化工具
-
实习编辑:西和西校对排版:bin~bin随着大数据时代的到来,数据可视化工具越来越重要,大量繁杂的数据在经过可视化工具处理后,从简单的表格变成多种多样的图形,以图形化的形式展现在用户面前,清晰直观。...
- 最新的iPhone更新,CarPlay功能将升级
-
苹果最近向测试人员推出了一个新的iOSBeta,除了iPhone的新功能外,这家总部位于库比蒂诺的科技巨头似乎还默默地为CarPlay用户提供了许多优惠。最新的主要CarPlay大修是作为iOS...
- 一周热门
- 最近发表
-
- PhantomJS出局!Puppeteer vs. Playwright 如何选择?
- Cesium 两种方式加载 Geoserver服务 WMTS以及WMS、WFS、KML资源图层
- Windows App Studio 更新,快速打包 WordPress 网站为通用应用
- 2025 款凯迪拉克 Escalade IQ 将技术推向新高度
- 苹果iOS14发布,亮点不少,网友:有点像wp系统
- Avalonia跨平台入门第二十一篇之玩耍CEF
- WordPress 站点地图如何设置?WordPress 站点地图指南及其使用方法
- 数控变频器的研究与实现(数控变频器作用)
- 一文学会VB编程,简单实用不费力(vb编程基础知识)
- 谷歌亲儿子升级Android11,Pixel大全套的技巧分享
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)