Unity3D技术

2024-05-28

Unity3D技术(精选十篇)

Unity3D技术 篇1

unity3d是由丹麦Unity公司开发的游戏开发工具,具体的特性包含整合的编辑器、跨平台发布、地形编辑、着色器、脚本、网络、物理、版本控制等特性。Unity3d游戏引擎和其他游戏引擎的一大差别在于,它更加注重设计者对游戏可玩性的关注,而不是单纯的追求设计的简易度。同时相对其他游戏引擎,unity3d的价格更为便宜,这也吸引了广大的游戏开发者。

unity3d用了Phys X的物理引擎,在植被方面使用了Unitree,并内置了大量的Shader供开发者使用,这些Shader即可满足开发者的常用效果。Unity公司在脚本方面非常强大,unity3d支持Jave Script、C#等脚本,如果开发非网页的独立版还可使用插件。

2 用unity3d开发项目流程

采用unity3d开发项目,我们这里以控制一个球体前后左右移动为例,大概分为以下6步:

第一步:创建工程。打开unity3d,弹出一个窗口提示要打开工程还是创建工程,选择创建工程(Create new project→Browse选择路径→Create)。一旦工程创建成功,系统自动生成三个文件Assets(此文件是系统的资源文件有物理属性、贴图等资源)、Library,Temp。

第二步:建立场景。你可以添加一个地形作为场景,方法是菜单栏Terrain→Create Terrain.为了简单直接,在此新建个平面作为场景。方法是:菜单栏→Game Object→Create Other→Plane,创建成功后在场景编辑窗口(Scene窗口)出现一个灰色的平面,同时在Hierarchy窗口出现该平面的名称。当然为了直观,你可以帮它改名,方法是F2(或点击然后右键rename),输入你要的名字(例如:my Scene)。你可以在Inspector窗口查看my Scene的一些属性,为了方便我们把my Scene的Transform的position的x,y,z全改为0。改完以后如果你在场景窗口找不到你的场景(my Scene),你可以采用以下方法快速找到它:在Hierarchy窗口选中my Scene,然后把鼠标的光标移到场景窗口,按"F"键,my Scene就会出现在场景窗口的中央。这个方法适用于所有的游戏对象的查找(这个快捷键会经常用到)。

第三步:建立一个球体。单击菜单栏→Game Object→Create Other→Sphere。同样修改其名称为(my Sphere)。同样在Inspector窗口修改其位置x、z为0,y改为0.5。

第四步:添加灯光。如果觉得光线比较暗的话,可以为场景添加灯光,unity3d提供了两种灯光可供你选择:点光源及平行光源。添加的方法与添加plane及sphere一样,只是选择point light或directional light。

第五步:这时你应该注意到Hierarchy窗口有一个系统默认生成的摄像机。如果没有这个摄像机,你在Game窗口是看不到你创建的场景以及球体,以及灯光的。如果你觉得Game窗口的物体太小了,你可以把摄像机往前移动,方法当然是修改摄像机的属性里的position,把z坐标设为-5。

第六步:让球动起来!要控制球的移动,就需要编写脚本。回到project窗口,点Create→Java Script(当然你也可以单击右键弹出菜单Create→Java Script),脚本添加成功,按“F2”把它改名为(Move Sphere)。双击脚本把它打开,默认生成的文本如下:

function Update(){}

{}

这里先介绍一下function Update(),此函数的意思是每画一帧就调用一次。接下来编写控制球移动的代码如下(以下代码的意思是:按上下左右键就把物体(球)往前后左右移动一段距离):

代码写完了以后,按快捷键Ctrl+S保存。

保存好以后就可以执行程序了,这个时候执行,按上下左右,但是球没动!因为我们还没把球和代码关联起来,所以球是不会动的,因为还没有受到代码的控制。关联的方法很简单,直接把代码从Project窗口拖到Hierarchy窗口的球(mysphere)上就行了。再次执行,按上下左右键,这时候球就向前后左右移动起来了。

3 常用技术

在使用unity3d创建游戏时,有很多重要的技术,该文主要介绍两个重要的技术。

3.1 键盘交互技术

键盘交互主要是指能够控制游戏者在系统中进行漫游,参观各个位置的三维物体。键盘交互以设置方向键“↑”、“↓”、“←”、“→”或者“W”、“S”、“A”、“D”为控制键,分别用来控制化身的“前”、“后”、“左”、“右”的走动。在unity3d中,可以通过函数实现这些功能,以用“W”控制向前走动为例,脚本命名为js,其代码如下:

3.2 碰撞检测

碰撞检测在3D游戏中是非常重要的一件事情,好的碰撞检测要求人物在场景中可以平滑移动,当人物在在场景中漫游的时候,在各种前进方向上如果有被其他物体挡住的情况下,不只不能再继续往前走,而且要尽可能地沿合理的方向滑动。在unity3d中,碰撞检测的功能是由函数封装好的,我们只需要调用函数就可以实现了。On Controller Collider Hit()函数是用于角色碰撞的,物体如果附加了Charactor Controller(Unity自带的用于角色控制的脚本)则使用这个函数检测碰撞,这是不需要加刚体的。一般的刚体之间碰撞使用On Collision Enter(),范围触发用On Trigger Enter()。

4 游戏的发布与测试

完成游戏制作后,调试运行基本没有问题,就可以发布游戏了。unity3d发布游戏的流程如下:在unity3d中选择文件菜单→发布设置,在这里可以选择添加游戏场景,在前面的场景会先显示。在平台设置里边可以设置web播放、PC、安卓等多种平台,然后选择发布,就可以编译发布exe文件了。

任何软件系统在设计好以后,都要进行测试。早期的软件测试定义指出软件测试的目的是寻找错误,并且尽可能的找出最多的错误。但是游戏测试的目的是解决玩家所遇非正常问题的预测工作,同时也是不断调试系统的一个长期观察任务。游戏测试作为软件测试的一部分,它具备了软件测试所有的一切共同的特性:测试的目的是发现软件中存在的缺陷并且及时的修改,从而提升软件产品的质量。

5 结束语

unity3d是一款功能非常强大的游戏设计软件,包含了很多重要的技术。该文只是对其中两种技术作了简单的介绍。

摘要:该文通过一个小程序介绍了unity3d开发游戏的流程,并对使用unity3d开发游戏过程中常用的技术进行了说明。

关键词:unity3d,漫游,物理碰撞

参考文献

Unity3D学习总结 篇2

我经过思考之后加入了我Unity3D培训班(狗刨学习网),因为我发现现在手机游戏迅速崛起,占据了国内很大的市场,因为手机人人都有,人们在坐公交,坐地铁,坐火车等交通工具时都会玩手机,甚至有些人在走路时都会玩,我参加了Unity3D培训班之后才发现,培训班远远比学校好多了,在这里你不会老师会问你那里不会,然后再教给你,不像学校老师就是为了拿工资给你上课,你不去,记你一个旷课也不会对你说什么,在这里还有大家可以讨论问题。

早上九点开始上课期间也有一些休息时间,可是几乎没有人乱走动,都是坐在自己的位置依旧学习,一直到晚上10点以后甚至到12点以后,大家都在拼命的学习,因为大家都知道了这是我们最后的机会,我们已经可以说是一只脚踏出了悬崖,如果我们还不能好好学习的话我们就会掉下悬崖,万劫不复,所以大家都在拼命的学习,只为了将来出人头地,不至于像大学那样上完以后碌碌无为。

Unity3D技术 篇3

关键词: Unity3D;大棚西瓜;虚拟现实技术

中图分类号: S126 文献标志码: A

文章编号:1002-1302(2015)08-0416-03

虚拟现实技术别称灵境技术,为用户提供视觉、听觉、触觉等感官模拟,让用户沉浸在计算机生成的三维虚拟世界中,确保用户可以及时、无限制地通过语言、手势等方式与三维空间内的事物进行实时交互 [1]。虚拟现实技术最初应用于军事、航空航天领域,近年来已经广泛应用于工业、建筑设计、文化娱乐、教育培训等领域。西瓜属葫芦科,原产于非洲,喜温耐热,1年生蔓性草本植物,在我国栽培历史悠久 [2]。我国是世界上最大的西瓜生产国,同时也是西瓜消费大国。近年来,随着人们生活水平的提高,水果在我国居民食物消费中所占的比例明显增加,西瓜作为重要的鲜食水果,消费需求持续快速增长 [3]。我国西瓜种植面积日益扩大,尤其是在一些城市的近郊,西瓜成为促进农民增收的主要经济作物。西瓜种植技术培训课程也在各农林高校、职业院校以及农业技能推广站广泛开展。传统的西瓜种植培训主要采用教科书、上课板书、视频等方式,主要存在以下缺点:(1)传统教育培训采用教师口头授课或多媒体授课,机械式灌输教学内容,讲解形式枯燥;(2)学员须在同一地点集中接受同样内容的培训,教学缺乏灵活性;(3)在传统教学过程中,西瓜种植生长过程涉及到的农事耕作、苗床铺设、大棚开沟、接穗及砧木种子的挑选、消毒、播种等多个实践环节费时费力且成本较高。综上所述,传统的培训模式在人力、物力、互动性等方面的缺陷在一定程度上限制了西瓜种植技术的传播。本研究基于Unity3D开发平台,以西瓜春大棚技术规程为对象,设计了1款寓教于乐的西瓜实训系统,该系统综合了计算机动画、虚拟现实 [4]、人机交互以及网络技术,有效整合了西瓜生长过程管理所涉及的农学知识,为西瓜种植培训提供了虚拟互动电子教科书。

1 春植西瓜大棚实训系统设计

本系统适用于北京市大兴区,所以地理条件、土壤条件、气候条件已经基本确定。本系统根据西瓜实际种植生长时序与虚拟生长时序之间的比例建立时序对应关系,对西瓜生长过程进行模拟。采用任务驱动方式,提高用户的兴趣点、参与度。该系统开始运行之后,弹出完成相应任务的提示信息,任务完成之后,日历动态改变并触发完成下一个任务,既保证了西瓜种植的科学性,又增强用户互动体验效果。图1展示了春植西瓜大棚技术流程,图中标注的时间是系统仿真西瓜生长过程的模拟时间。

2 关键技术

根据西瓜种植技术规程,利用交互式参数化建模方法构建西瓜的三维虚拟模型,结合二三维交互、动画及场景渲染技术,建立了春大棚西瓜种植虚拟实训系统(图2)。

2 1 交互式植物参数化三维建模方法

构建西瓜生长过程中的三维模型是春大棚西瓜种植虚拟过程可视化表达的关键步骤。植物三维建模方法多样,针对不同的建模目的及应用要求,不同的建模方法可取得不同的建模效果。其中,起步较早、影响力较大同时应用较为广泛的建模方法为参数化建模方法,该方法使用一组参数来表示植物主要器官及植株三维形态结构 [5]。通常以交互式的方式实现对参数的动态调整和编辑,以达到修改模型三维形态的目的。从西瓜形态结构上看,西瓜地上部主要由主蔓、侧蔓两部分构成,蔓上着生叶子、花、果实、卷须等器官 [6]。西瓜蔓的横断面近似圆形,有棱角。瓜蔓有节,节上着生叶片或侧蔓。西瓜叶子由叶柄、叶片构成,叶子呈羽状、单片、互生、叶缘深缺刻,叶片表面有蜡质、绒毛。本研究采用交互式参数化建模方法,首先使用Immersion G2LX三维数字化仪采集田间西瓜三维形态结构数据,构建西瓜三维模型,通过定义叶脉曲线、叶片边缘实现叶片特征的虚拟建模。最后按照典型西瓜的株型结构生成西瓜植株模型。创建的西瓜各个时期的生长模型如图3所示,需要将模型转换为fbx格式,然后导入 Unity3D 场景中使用。

2 2 鼠标拾取

鼠标拾取指在屏幕上用鼠标点击某个物体时,应用程序能返回该物体的1个标志、某些相关信息 [7]。本研究采用鼠标拾取算法实现用户与虚拟场景中的三维物体交互功能。先给需要进行交互的物体绑定碰撞体mesh collider,然后将鼠标拾取函数脚本绑定给该物体,在脚本中根据物体名进行不同的响应操作。OnMouseDown()、OnMouseOver()、OnMouseEnter()函数分别可以实现鼠标点击、悬浮、进入物体时的响应操作。虚拟场景中砧木和接穗种子在石台上晒种时,通过鼠标悬浮响应函数实现将瘪小、破损、虫蛀、发霉的种子剔除的功能。在西瓜伸蔓期,对植株进行修剪时采用二三维交互相结合的方式,点击二维剪刀图片,鼠标光标变换为剪刀,触碰到西瓜植株待修剪部分时,使用Tween Position实现待修剪部分下落到地面的动画,从而完成植株的修剪操作。图4展示了伸蔓期西瓜植株修剪过程。

采用鼠标拾取实现三维物体的拖动,算法基本思想为:首先将物体的世界坐标系转化为屏幕坐标系,z轴不变。由于鼠标的坐标系是二维的,需要转化成三维的世界坐标系,然后计算鼠标位置与物体的距离。当按下鼠标左键时,获取当前鼠标的二维坐标系位置并转化成三维坐标位置,再加上鼠标的移动量得到物体应该的移动量并赋给物体的transform的position属性,实现鼠标拖拽三维物体的交互功能。例如,文中在配制营养土时鼠标点击草炭,拖拽到沙壤土中。通过距离碰撞检测 [8],当距离小于既定阈值时,草炭消失,使用NGUI插件的TweenColor进行颜色渐变,实现营养土配制混合效果。[ (W10][TPJYN4 tif]

nlc202309041716

2 3 粒子系统

粒子系统采用有“生命”的微小粒子单元来模拟现实世界中的不规则物体,尤其是一些模糊、易扩散的物体,如火、烟等 [9]。通过许多小粒子的组合,模拟出不规则物体的运动形态,然后渲染显示。粒子系统中的每个小粒子都有很多属性,如大小、颜色、形状、透明度等。具体每个小粒子的属性则由该粒子系统具体模拟的物体决定。粒子系统是动态的,系统中的每个小粒子的生命周期都是从“产生”到“活动”再到“消亡”。随着时间的推移,新粒子逐渐加入到系统中,“存活”的粒子不断变化,旧的粒子逐渐死亡,从而实现粒子系统的模拟效果。本研究采用Unity3D自带的粒子系统实现砧木、接穗种子浸种时水龙头的流水动画。配制基肥时磷酸二铵、尿素、硫酸钾等撒到农家肥上的动画,大棚熏棚时点燃烟剂后的冒烟效果以及西瓜开花期喷施的叶面肥,都是通过调整粒子系统的相应参数实现其逼真的可视化表达。图5展示了部分粒子系统实现的效果。

2 4 视频播放

用户在互动体验过程中,若是根据系统中的简单提示信息不能完成任务或者想更加系统详细地了解西瓜种植流程,可以在场景任意漫游的同时观看视频课件,既能够娱乐放松,又能系统学习。Unity3D的视频文件通过Apple QuickTime导入,支持的文件类型是QuickTime。在Windows操作系统下导入视频需要安装QuickTime播放器。将视频资源导入到 Unity3D 场景中,建立音频源AudioSource、影片纹理 MovieTexture,影片纹理是从1个视频文件中创建的动画纹理,放置1个视频文件在项目的Asset文件夹中,可以导入要使用的视频,音频源在场景中播放音频剪辑AudioClip。使用C#脚本控制视频的播放暂停,图6是Unity3D场景中人工授粉视频截图。

2 5 模型动态实例化

西瓜植株生长过程中要经历定植期、伸蔓期、开花期、结果期、成熟期等过程,若是在场景中手动摆放模型,不仅耗时费力,而且资源占用空间大。通过对Unity实例化相关知识进行研究,本研究采用模型实例化算法解决上述问题。通过脚本动态实例化所需模型,并设置实例化的西瓜植株的行数、列数、行间距、列间距等信息,为不同时期的西瓜植株命名,然后通过动态查找物体名的方法销毁之前实例化的模型,再实例化新的模型。图7为采用C#脚本动态实例化的西瓜植株。

3 结论

本研究依据春植西瓜大棚技术规程,建立不同生长时期

的西瓜植株模型,对西瓜种植进行虚拟现实表达,构建了简单方便、开发成本低的春植西瓜大棚实训系统。该系统具备一定程度的真实感、沉浸感以及交互性,提高了用户的学习兴趣和互动体验度。在后续工作中,拟实现功能更加完善、人机交互界面更加友好的春植西瓜大棚实训系统。为了进一步增强用户体验的真实感和交互性,可以采用数据手套逼真模拟虚拟场景中物体的抓取、移动、旋转等动作,利用头盔显示器等3DVR图形显示与观察设备提高用户的沉浸感,使用户能更加真实而自然地与场景中三维物体进行交互。

参考文献:

[1] 朱 柱 基于Unity3D的虚拟实验系统设计与应用研究[D] 武汉:华中师范大学,2012

[2]孙 胜,田永生,冷丹丹,等 不同砧木对嫁接西瓜经济产量及叶片矿质营养含量的影响[J] 植物营养与肥料学报,2010,16(1):179-184

[3]赵 姜,张 琳,王志丹,等 我国居民西瓜消费特征及影响因素分析[J] 中国蔬菜,2013(6):17-23

[4]石教英 虚拟现实基础及应用算法[M] 北京:科学出版社,2002

[5]Xiao B X,Guo X Y,Du X H,et al An interactive digital design system for corn modeling[J] Mathematical and Computer Modelling,2010,51(11/12):1383-1389

[6]赵春江,陆声链,郭新宇,等 西瓜三维形态几何建模和真实感绘制技术研究[J] 中国农业科学,2008,41(12):4155-4163

[7]Kenneth C 游戏开发大全[M] 北京:清华大学出版社,2005

[8]宣雨松 Unity3D游戏开发[M] 北京:人民邮电出版社,2012

[9]蔡 翊 基于Unity3D的金丝峡地质公园虚拟旅游系统的研究与实现[D] 西安:西安科技大学,2012

Unity3D技术 篇4

近年来,随着我国居民汽车拥有量的快速增加,一方面极大地推动了我国经济的发展和人们出行的便利性;另一方面,也导致交通事故频频发生。特别是由于我国目前大部分的交通路况复杂,很多道路普遍存在人车混行的交通状况。再加上驾驶员在行车过程中,往往以自我为中心,很少有礼让行人的习惯;而行人往往会寻找空隙,随意穿行,导致行人特别是少年儿童被撞的交通事故经常发生[1]。专家指出,通过有效的交通安全教育和交通技能训练,可以大大降低过马路时发生意外的概率[2]。所以对行人尤其是广大少年儿童进行有效地道路安全穿行训练,培养起良好的道路穿行习惯,加强其对交通环境潜在危险的认识,对降低交通事故的发生率具有重要意义。然而目前交通安全教育形式单一,缺乏能体验的交通安全教育三维仿真环境[3],导致教学效果很差。所以通过虚拟现实技术设计和开发一个交通安全教育和技能训练系统,让训练者不仅能够真实地感受到道路交通事故所引发的安全后果,而且通过多次训练后可以根据道路上过往车辆的速度、距离,熟练掌握能够安全的穿行的时机和方式,提高自身对安全车速和车间距的判断能力,从而减少和避免交通事故的发生。

2交通安全教育和技能训练系统总体设计

本系统主要采用MAYA三维制作软件来创建虚拟动态交通场景和各种虚拟物体,使用Unity 3D三维游戏开发引擎来设计和实现系统的人机交互功能。系统主要由数据管理、交通体验场景生成、声音设置、交通规则安全教育和交通安全技能训练等功能模块组成。各模块的主要功能如下:

1)数据管理模块:主要用于保存和设置训练者的个人信息和系统的数据信息。训练者的个人信息包括个人资料、历史记录、行走的初始状态和速度等数据;系统的数据信息包括场景数据信息、汽车信息、交通规则数据库等。

2)交通体验场景生成模块:主要是利用MAYA三维制作软件创建的场景物体如道路、建筑物、交通标志、车辆、虚拟儿童、教师、警察以及天空背景等三维物体,生成逼真的三维虚拟交通场景。

3)声音仿真模块:为增强虚拟场景的真实感,添加一些烘托气氛的声音,如汽车的喇叭声,轮胎与地面间的摩擦声以及人在发生交通危险时发出的尖叫声等,让用户能融入虚拟交通环境气氛中去,与虚拟环境中的人物产生强大的共鸣。

4)交通规则安全教育模块:该模块主要通过设置多个违反交通规则的行为和调用相应的场景,实现对少年儿童进行遵守交通规则教育。

5)交通安全技能训练模块:该模块为本系统的最重要模块,主要用来训练行人特别是少年儿童安全横穿道路的技能,提高他们综合处理交通流信息的能力。具体是在系统中采用游戏模式,设置从初级到高级五个关卡,通过创建五个没有红绿灯的车流道路交通场景,每个场景按照游戏关卡的级别设置不同的车流密度和汽车行驶速度。级别越高,车流密度越大,汽车行驶速度越高。然后根据训练者通过鼠标和键盘控制虚拟行人的行走速度和穿越的时机,从低级到高级在不同的速度和不同的车间距的车流中横穿道路来进行反复训练,直到横穿道路时都不会与汽车发生碰撞,获得20分的积分后,才允许往前进入下一关场景进行训练,最后完成全部关卡并获得100分后才表示取得一次训练成功,以此通过多次训练后,可以提高少年儿童对机动车行驶状况的综合判断能力,减少交通事故的发生。

3系统关键技术问题的研究与实现

3.1动态交通场景设计与实现

动态虚拟交通场景是指在静态虚拟城市道路的交通场景中融入交通系统中所有动态的交通活动,在本系统中主要指在虚拟城市道路场景中加入用于训练的汽车和行人、随机行驶的车辆等虚拟物体交通行为,以及对它们的运动进行控制,让它们能够在虚拟交通环境中实现匀速、加速、减速行驶和超越、等待等功能。

由于构建上述动态虚拟交通场景比较复杂,本系统先采用专业的三维建模软件Maya来创建静态三维虚拟城市道路场景和动态虚拟物体,并为行人等动态物体创建骨骼和蒙皮后,通过移动骨骼就可以进行动态物体的动作设计,从而为各种运动的虚拟人和物体设计出系统所需要的各种动作,比如虚拟行人的站立、行走和奔跑,汽车等交通工具的行驶,还有路人的自由动作等。然后将以上的交通道路的静态场景和设计好行为的动态虚拟物体在Maya中经过贴图、设置灯光、渲染等工作后,导出保存为FBX文件格式,即可将场景模型导入到Unity 3D项目文件的“Assets”文件夹中[4]。场景模型导入Unity3D后就可以用C#或Java Script脚本语言对场景中的各种虚拟物体的动作进行设计,完成它们在场景中的各种运动,实现动态虚拟交通场景。比如将导入的汽车模型放置于道路上,并在汽车上添加如下的脚本,就可使其以一定的速度向前行驶:

系统中为了让训练者体验到更加真实的交通情景和游戏的难度,整个系统设计成五个不同的交通场景,分别对应着由低到高的五个游戏关卡需要穿越的道路,随着训练游戏关卡的升级,场景中汽车的速度和密度会不断地增大,让训练者能在不同速度的车流中得到训练,增强训练的效果。三维动态虚拟交通场景如下图1所示:

3.2三维虚拟物体之间的碰撞检测技术研究与实现

碰撞检测是虚拟现实系统中的一个重要功能,有了它可以使用户以更自然的方式与虚拟现实场景中的对象进行交互,否认虚拟行人走在路上就可能会“穿墙而过”,汽车在路上行驶就会“钻进地下”等不真实的现象发生。另外,本系统在交通安全技能训练过程中需要检测虚拟儿童与汽车是否发生碰撞,碰撞后不能出现汽车“穿人而过”的现象发生,而且要做出响应,比如发生惨叫和人被撞倒在地等,所以碰撞检测在系统设计时是一个必须要解决的关键问题。这里我们采用的设计方法是先给场景中可能会与其他物体发生碰撞的虚拟物体如路边建筑、道路设施、树木和地面以及汽车和行人等都设置成刚体,然后为它们添加盒状碰撞器,这样它们之间就可以产生碰撞的效果。具体在Unity 3d中的设置虚拟物体为刚体和添加碰撞器的参数如图2所示。

至于行人与汽车发生的碰撞后的响应,考虑到本系统的主要训练者为少年儿童,为了不让交通事故场面过于惨烈,所以在设计虚拟人与汽车发生碰撞时,没有设计成行人被撞时的惨烈效果,而只是提示“GAME OVER”表示行人已与汽车发生碰撞,本次游戏结束,同时界面上出现三个按钮,分别为“退出”、“重新开始”和“返回首页”三个按钮,“退出”按钮实现退出系统功能,“重新开始”按钮实现重新载入游戏功能,“返回首页”按钮实现返回主界面功能,具体响应结果示意图如图3所示。主要脚本如下:

在交通规则安全教育模块中为了禁止虚拟行人行走到机动车道上而不走人行道,必须对道路添加碰撞器及相应的脚本,实现每次用户行走到道路上时,屏幕中会出现“请走人行道”的提示,并且主角会退回到人行道上,提示字会在三秒后自动消失,提示信息示意图如图4所示。

为了提高参与训练者的兴趣,本系统采用游戏模式来完成技能训练模块中的五个关卡不同难度的训练过程,每当训练者完成一个路口的穿越,系统视窗右上角的分数会增加20分,并且视窗中会出现“成功穿越”的文字,系统提示信息示意图如图5所示。当训练者完成从低到高难度全部五个路口的穿越后,屏幕会显示“游戏胜利”。

3.3人机之间的交互控制技术研究与实现

人机交互控制是虚拟现实技术的重要特征。通过人机交互手段可以让训练者能够像在现实中一样对在虚拟环境中任意行走和对其中的物体进行实时地操作,并能从虚拟环境中得到反馈的信息等。本系统中需要实现利用键盘或鼠标对交通体验场景中的摄像机视角进行旋转变换,对虚拟行人的行走和站立以及行走速度和行走方向等进行交互控制。所以人机之间的交互控制技术是本项目中另一个非常重要的关键技术。在Unity 3D中可以在Mono Behavior的派生类的Update()函数中编写脚本脚本来实现利用键盘来控制物体的移动和转向,比如输入以下脚本就可以利用“W”键来实现物体的向前移动[5]:

if Input. Get Key(W);{ / /获取键盘上W键

transform. Translate(Vector3. forward * Time.delta Time); / /物体向前移动

至于汽车的行驶速度和行人的行走速度的设置,可以采用Unity3D的Mec Anim动画系统对汽车和行人等虚拟运动物体进行动画设置和迁移,实现汽车按前面设计的速度在不同训练区的场景中行驶,以及控制行人以不同的速度进行穿越活动。

在系统中将虚拟行人行走过程设计成第一和第三人称视角两种模式,在第一人称模式中为实现虚拟行人能够与其它物体产生碰撞效果,虚拟行人使用一个椭球体代替,并将虚拟摄像机作为其子物体,让摄像机跟随虚拟行人运动。控制虚拟行人行走的部分关键脚本如下:

4结论

采用maya构建的三维虚拟动态交通场景,利用Unity 3d技术对系统中碰撞检测和人机交互等关键技术的研究和实现,开发出三维虚拟交通安全教育和技能训练系统,为行人尤其是广大少年儿童提供一种全新的安全教育和训练平台,克服了以往交通安全教育形式单一、互动性差、参与性不够等缺点。系统经试运行后,训练者普遍反应能够非常直观的给他们身临其境的感觉,而且人机交互性好,趣味性高,能够较好地实现交通安全知识教育和技能训练的目标。

摘要:近年来,随着我国汽车拥有量的快速增加,行人在道路上发生的交通事故也更加频繁,因此对行人尤其是广大少年儿童进行有效的交通安全教育和交通技能训练,减少交通事故的发生,具有十分重要的意义。利用Unity 3D等虚拟现实技术,通过对构建逼真的动态三维虚拟交通场景以及实现人机交互等关键技术研究和实现,开发出交通安全教育和技能训练系统,让训练者可以身临其境搬接受交通安全知识的教育,并通过游戏的模式训练横穿道路的技能,从而减少行人交通事故的发生。

关键词:交通安全教育,Unity 3D,虚拟现实,训练系统,关键技术研究

参考文献

[1]吴立新,王旭,张宝南.无信号控制路段行人过街决策行为分析[J].吉林建筑工程学院学报,2014,31(1):19-22.

[2]田茂,孙远平.美国“关注危险”安全教育课程的经验与启示[J].现代中小学教育,2012(7):69-73.

[3]王峻极.基于VR的行人/自行车交通违法体验平台的研究与开发[D].长春:吉林大学,2010.

[4]马瑞.基于Unity3D的多平台三维虚拟数字校园的设计与实现[J].蚌埠学院学报,2014,3(2):13-16.

Unity3d射击游戏报告 篇5

课程设计实验报告

项目名称 GoldCoinGame 班 级 11402 小组成员唐智 梁俊龙薛柯 高立存 姓 名唐智 学 号1404240717

1.游戏说明

游戏运行画面:

游戏目标:收集八个硬币,得到的硬币数量会显示在右上角。

游戏菜单:按esc显示,有三个选项:继续游戏,重新开始和退出游戏。

操作:WASD控制方向,12切换武器,r填装弹药,空格space跳跃。

步枪状态下: 鼠标右键——瞄准

手枪状态下: 鼠标右键——消音器

2.游戏素材来源:

1.开火音效:手枪与步枪开火音效来源于课堂上的实验:Fps游戏中的MachineGun开火音效。装弹音效:来源于网络。

2.SkyBox,水,Terrain的草地和椰树等来源于课堂上的实验:Survivalland。

3.工厂模型Hangar_Full:来源于网络。

Cube的贴图:来源于网络。

4.步枪和手枪模型及其动画:来源于网络。

5.金币模型,塑料凳模型:使用3dmax软件自制。

6.显示金币数量的CoinGUI的9张图片:采用Windows画图软件绘制。

3.Unity版本:

Unity 5.5.2f1(64-bit)

4.操作步骤

1.首先创建环境,CreatEmpty——Environment,将课堂上做过的水的预制体 DaylightWater放入到其下。

2.创建一个Terrain和三个DirectionalLight。

3.地形的凸起和凹陷操作界面

4地形的贴图操作界面

5.设置树木和草地。

7.调整好光线角度,再把工厂预制体拖到小岛上。效果预览

8.创建一个Empty,给它添加Capsule,MeshRenderer,CharacherController,和Rigibody。(MouseLook和CharacterMotor以及Fpsinput均是课堂上使用过的例子,之后会用到)

9.将Empty命名为MyFirstPersonController,将tag改为Player。把主摄像机移动到该目录下。

10.在摄像机maincamera下添加如下的Empty:weapon——m4a1、handgun,用来存放武器。此外,再给camera添加skybox,选取合适的天空盒。

11.weapon添加一个js文件playerweapon,将步枪和手枪的预制体分别加到m4a1和handgun下。

Playerweapon.js主要控制武器的基本操作:开火,换弹和切换武器。function Update(){

if(Input.GetButton(“Fire1”)){

BroadcastMessage(“fire”);//对子类发送fire的信息,从而达到调用所有名为fire函数的效果 }

if(Input.GetButton(“reload”)){

BroadcastMessage(“reload”);}

if(Input.GetKeyDown(“1”)){

BroadcastMessage(“draw”);//按1时播放动画 SelectWeapon(0);}

else if(Input.GetKeyDown(“2”)){ SelectWeapon(1);} } function SelectWeapon(index : int){

for(var i=0;i

// Activate the selected weapon

if(i == index)

transform.GetChild(i).gameObject.SetActive(true);

// Deactivate all other weapons

else

transform.GetChild(i).gameObject.SetActive(false);}

}//切换武器的函数

12.给empty添加m4_preview,该文件主要负责步枪的子弹数量和开火音效播放,以及步枪的装弹。之后添加audiosource,选择开火的子弹发射音效文件。

13.添加一个UI----canvas,加入两个text,用来显示两把武器的子弹数目。

M4_preview的主要函数: function Update(){

GameObject.Find(“/Canvas/Text”).GetComponent(Text).text=“ :”+ bulletsLeft+“/∞”;//该函数可以将步枪子弹数量传递给text }

function fire(){

if(bulletsLeft == 0)

return;

if(Time.timeTime.deltaTime;

// Keep firing until we used up the fire time

while(nextFireTime < Time.time && bulletsLeft!= 0){ GetComponent.().Play();//每发射一枚子弹,就播放一次开火的音效

FireOneShot();

nextFireTime += fireRate;}

Update();//实现开枪后刷新text的子弹数量 }

function FireOneShot(){

var direction = transform.TransformDirection(Vector3.forward);

var hit : RaycastHit;

if(Physics.Raycast(transform.position, direction, hit, range)){

// Apply a force to the rigidbody we hit

if(hit.rigidbody)

hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

if(hitParticles){

hitParticles.transform.position = hit.point;hitParticles.transform.rotation =

Quaternion.FromToRotation(Vector3.up, hit.normal);hitParticles.Emit();}

// Send a damage message to the hit object

hit.collider.SendMessageUpwards(“ApplyDamage”, damage,SendMessageOptions.DontRequireReceiver);}

bulletsLeft--;

m_LastFrameShot = Time.frameCount;enabled = true;

// Reload gun in reload Time

if(bulletsLeft == 0)

BroadcastMessage(“reload”);//没有子弹后自动装弹

}

function reload(){

yield new WaitForSeconds(1);//装弹等待时间

if(clips > 0){ //弹夹数量大于0时才可装弹

clips--;

bulletsLeft = bulletsPerClip;

}

Update();//装弹完成后更新text显示的子弹数量

yield new WaitForSeconds(1);}

14.步枪的预制体m4animation,m4.js主要负责步枪的开火、装弹等动画播放。给它添加一个audiosource,选择下载的武器换弹音效。

15.手枪的步骤和步枪类似,就不在阐述,不同处如需要修改开火的速率(firerate)等参数即可。

16.添加两个武器的贴图到显示弹药的text的左侧,再添加一张背景图,调整好位置后效果如图:

17.添加菜单:在canvas中添加一个panel,在panel下添加三个button,分别对应退出,重新开始和继续,再添加一个text,内容为 “已暂停”。

18.添加一个empty命名为_GM,给他添加Manager.cs,一个负责菜单的文件。

其主要部分如下:

void Start(){

UIPanel.gameObject.SetActive(false);isPaused = false;}

void Update(){

if(Input.GetKeyDown(KeyCode.Escape)&&!isPaused)Pause();

else if(Input.GetKeyDown(KeyCode.Escape)&& isPaused)UnPause();}

public void Pause(){

isPaused = true;

UIPanel.gameObject.SetActive(true);

Time.timeScale = 0f;}

public void UnPause(){

isPaused = false;

UIPanel.gameObject.SetActive(false);

Time.timeScale = 1f;}

public void QuitGame(){

Application.Quit();}

public void Restart(){

Application.LoadLevel(0);

}

主要负责对应菜单的按钮的功能

之后,给三个按钮加上相应的贴图和文字,在OnClick一栏中,选择_GM,在右侧下拉选择之前manager中对应的函数,比如退出游戏的Quit按钮就选择QuitGame。另外,编辑Panel的image,可以更改菜单的背景图片。

效果如图

19.建立cube的预制体:创建一个3dobject,建立一个cube,再放在预制体的文件夹perfabs里,再更改cube的贴图为黑色,命名为cube_dead,同样拖入perfabs中。

给预制体cube添加一个DamageReciver,使它能接收到子弹的伤害,从而从cube转换成cube_dead。

同时,勾选中iskinematic,让这个预制体被子弹击中前不受到里的影响,这样可以把cube悬空而不掉落,而变成cube_dead则会掉落。

20.把制作的coin模型导入,添加刚体,同样勾选iskinematic,并加入CapsuleCollider,勾选isTrigger,最后关联Coin.cs。

void Update(){

transform.Rotate(new Vector3(rotationSpeed * Time.deltaTime, 0, 0));}

void OnTriggerEnter(Collider col){

if(col.gameObject.tag == “Player”){

col.gameObject.SendMessage(“itemPickup”);Destroy(gameObject);} }

分析:

硬币没被拾取时,会沿着x轴旋转

玩家触碰到coin时,会传递一个信息itemPickup,提示该硬币已经被拾取,之后会销毁该硬币。

21.回到第一人称控制器,给MyFirstPersocontroller添加脚本item,选择金币拾取音效、拾取贴图。创建并添加提示文字GUItext。

创建一个empty命名为CoinGUI,添加guitexture,选择image为coin0,即没有失去硬币时候的显示图。Coin到Coin8依次对应获得八个硬币的显示图。

22.准星的添加:创建一个empty,添加crosshair脚本,将网上下载的准星贴图添加进来。

大致的步骤就如上所述。

小组成员:唐智

主要负责部分:武器模块和esc菜单模块以及实验报告的编写。

武器的部分是由我制作的,相对于我们课堂上制作的火箭筒和步枪,这个项目里面多了reload这个动作,并且是可以主动按r来reload的(课堂上的项目只能打空弹匣来换弹)。

开始时,我在原来的脚本基础上修改代码,想把调用动画的代码也写进计算子弹fire和reload的代码中,但是出现了很多问题:如动画不能正常播放、或是播放了动画不开火等。

最后,我将这两个部分的脚本分开到两个目标上,解决了这些问题。第二个小问题,就是装弹后子弹数量没有实时更新到text里面,但是开火后子弹数量会重新刷新。这个问题通过在reload函数末添加了显示子弹数的代码后解决。

Unity3D多计时器的实现 篇6

Unity3D是由Unity Technologies公司开发的一款专业游戏引擎, 目前支持3种脚本语言, C#、Java Script、Boo。在Unity3D中有一些方法不是程序员手动调用的 , 而是由Unity3D游戏引擎自动调用, 不过调用的时机和场合不同, 如Update() 方法, 类似于Flash AS3 on Frame () 回调函数, 每帧均回调。基于Unity3D的这种特性, 采用C# 作为系统脚本语言, 为每一个计时器创建实例, 存放在C# List泛型中, 通过C# 委托机制和回调机制, 对计时器进行统一管理, 如创建、回收计时器。

2 技术要点

2.1 Unity3D Update() 方法概述

Update() 是实现各种游戏行为最常用的函数。在Mono Behaviour启用后 , Update() 方法将在每一帧被调用, 因为是跟每帧渲染有关, 所以Update() 就比较适合做控制。

2.2 C# 泛型类 List<T>概述

C# 泛型类List<T>表示可通过索引访问的对象的强类型列表, 提供用于对列表进行搜索、排序和操作的方法。List<T>类是Array List类的泛型等效类, 该类使用大小可按需动态增加的数组 实现IList<T>泛型接口 , 其所属命 名空间: System.Collections.Generic, 其中T是一个占 位符代表 通用的数 据类型, 在实例化时用一个实际的类型来代替。

2.3 C# 委托机制和回调机制

2.3.1 委托机制

委托是一种特殊的.Net数据类型, 它是事件处理机制的核心。委托引用一个特定的方法, 它可以作为参数传递给另一个方法, 将委托作为参数的方法可以用它调用委托所引用的初始方法。尽管委托引用方法, 其行为象方法, 但从技术上讲它们是一种类———所有的委托派生System.Delegate类。还有另一种 委托叫作 多播委托 , 它派生System.Multicast Delegate。多播委托是一种特殊的委托, 可以保存对多个方法的引用。

2.3.2 回调机制

C# 回调机制是一种常见的设计模型 , 主要通过回调函数来实现, 他把工作流内的某个功能, 按照约定的接口 (回调函数) 暴露给外部使用者, 为外部使用者提供数据, 或要求外部使用者提供数据。外部使用者不需要知道整个工作的流程, 只需知道回调函数的说明就可以使用工作流模块提供的功能, 这对信息的隐藏也是有作用的。

3 具体实现

3.1 创建计时器

首先创建计时器类, 并在计时器类中定义时间间隔和委托。在使用委托之前需要为委托添加方法引用, 并设置计时器实例时间间隔, 计时器实例创建完成后, 利用List泛型的add() 方法将计时器实例添加到List对象中。

创建计时器关键代码如下:

3.2 回收计时器

创建了计时器实例后, 系统需要判断 计时器是 否超时 ,如果计时器超时, 则需将计时器从List对象中删除, 即回收计时器, 否则, 继续判断。处理流程如图1所示。

回收计时器关键代码如下:

4 结语

介绍了在Unity3D中创建多计时器的方法, 其主要利用了Unity3D自调用函数 , 实现了创建和回收计时器等功能。此方法相对比较简单并且适合在Unity3D中使用, 在实际游戏开发过程中具有很强的指导性。

摘要:游戏开发过程中很多地方会用到计时器,随着项目规模的不断增大,单计时器早已不能胜任。介绍了一种在Unity3D中实现多计时器的方法。

Unity3D技术 篇7

关键词:虚拟现实,Unity3D,校园漫游,交互技术

虚拟校园建设是校园信息化的重要组成部分。传统的虚拟校园都是建立在二维平面地图和影像地图的基础之上, 已经不能满足学校对外招生宣传、校园导航、信息化管理的多元化功能需求。利用最新的计算机虚拟现实技术和网络技术, 产生了最先进的三维虚拟校园技术, 三维技术比二维平面更加直观形象, 更接近于校园的实景。近几年, 很多高校都开展了虚拟校园建设工作, 构建数字校园。

1系统概述

本文介绍了基于Unity3D综合型游戏开发技术在虚拟校园漫游系统中的应用。Unity3D是由Unity Technologies开发的专业游戏引擎, 可以让玩家轻松创建三维视频游戏、实时三维动画、建筑可视化等类型互动内容的多平台的综合型游戏开发工具, 是目前最具发展前景的专业游戏引擎。现以吉林动画学院校园为虚拟漫游空间, 3DMax建模软件为场景建模工具, 在Unity3D开发平台下实现校园漫游系统, 具有一定人机交互能力的, 有利于用户更加便利、直观的了解学校。

2系统开发流程

根据校园的规模和特点, 本系统主要采用3ds Max软件进行建模, Photoshop等图像处理软件处理贴图, 将模型导入Unity引擎中添加组件以及交互脚本, 最后利用Unity发布系统。系统开发的流程如图1所示。

2.1数据和素材采集

校园的数据主要包括整个校园建筑、道路、树木、草坪的位置和尺寸。一种方式是利用校园CAD规划图纸, 另外一种方式就是实地测量。由于条件所限, 这里的数据主要利用百度地图的测距功能采集校园整体尺寸, 结合实地测量确定尺寸。

校园的素材主要包括校园各主要建筑物表面、墙面、道路、花草、树木等的电子照片。利用Photoshop等图像处理软件将这些照片进行处理, 做成3D模型贴图。

2.2三维建模

对虚拟校园场景中的主要建筑、道路、树木、花草等进行三维建模。由于场景中的各物体都比较复杂, 所以采用专业的建模软件3ds Max等进行三维建模, 然后对物体进行材质贴图, 使模型更具有视觉真实感。

2.3 Unity3D漫游

将建模得到的模型导入Unity3D成为游戏对象 (Game Object) , 然后添加Unity3D组件和脚本, 为游戏对象赋予交互功能, 从而构建一个完善的校园场景和具有一定交互性的虚拟校园漫游系统。

2.4发布

漫游系统制作完成后, 只需在“File”菜单里的“Build Settings”子菜单中选择对应的打包平台, Unity便可轻松实现跨平台的打包和发布。

3关键技术

3.1场景建模技术

场景建模有两种方式, 一种是使用Unity3D自身提供的建模功能, 另一种是从外部导入第三方软件所建模型。Unity3D内置了一些常见的3D模型如长方体、球、圆柱体、胶囊、平面等, 其内置的标准资源包也能够进行复杂建模, 如地形、树木、水、草等。Unity3D支持第三方软件建模, 可以从外部导入模型, 常见支持的格式包括fbx、obj、3ds等。3ds Max是一款优秀的三维软件, 利用它能够创建高品质的三维模型。在3ds Max中对实物进行建模, 然后将模型文件保存为fbx格式, 勾选“嵌入的媒体”, 便可将贴图同模型一起导出。将fbx文件放入Unity3D工程中Assets目录下, Unity3D将会自动识别, 在Project视图中就能够找到模型与材质等相关的资源文件。如图2所示。

3.2交互技术

虚拟漫游是校园漫游系统的关键, 交互功能是实现漫游的重点。Unity3D已经实现了“上”、“下”、“左”、“右”、“跳跃”这些逻辑操作, 并且将它们封装成了角色控制器组件, 不用编写任何代码可以轻松实现第一人称主角。第一人称视角的控制原理其实是控制摄像机对象的移动, 所以屏幕显示的始终是主角正前方的画面。在Unity3D中将角色控制器组件导入工程后, 将Project视图中的“First Person Controller”拖到Hierarchy视图中, 此时它是以一个胶囊体对象的形式出现在Scene视图中。在Inspector视图中设置其位置, 但y轴一定要高于地面, 因为角色控制器是具有一定物理引擎的, 运行程序后当它发现地面没有支撑物, 就会感应重力落到地面之下。在Inspector视图中可以看到这个对象共绑定了三个脚本, “Mouse Look”脚本用来控制第一人称视角如何通过鼠标来移动整个视图, “Character Motor”脚本用来监听键盘事件, 控制主角“前”、“后”、“左”、“右”移动。“FPSInput Controller”脚本用来监听“Space”按键, 实现第一人称视角的跳跃功能。也可以在这三个官方提供的脚本基础上进行拓展功能, 从而达到更好的控制效果。如增加QE键盘事件, 控制主角向“左”、“右”转身, 这样就可以完全使用键盘控制主角在系统中漫游。下面例举向右转身的代码:

3.3碰撞检测技术

图2:Unity导入校园模型

碰撞检测是模拟物体遇到障碍物时物理反应, 例如主角遇到墙壁时, 则不能继续前进。碰撞检测是漫游系统的最基本条件。游戏对象如果需要感应碰撞, 那么必须给其添加碰撞器。Unity3D一共为对象提供了5种碰撞器, 分别是Box Collider、Sphere Collider、Capsule Collider、Wheel Collider、Mesh Collider。设置物体的物理属性, 给每个对象添加相应的碰撞器, 物体便能够执行组件实现碰撞检测, 主角就不会“穿墙而过”。也可以在脚本语言中实现控制基本碰撞检测。

3.4运行效果

由于本系统采用了多平台的Unity3D引擎, 它的发布运行不需要额外的安装程序, 单机时直接点击EXE文件即可运行。效果如图3所示。

4结语

随着虚拟现实技术的不断发展, 借助目前流行的Unity3D引擎生成三维虚拟校园漫游系统是一个很好选择。本系统实现了场景驱动、交互, 使用户能够通过运行该系统游览整个校园的风貌, 对学校的宣传起到了积极的作用。事实证明, Unity3D是一款适合制作游戏的专业引擎, 用它来开发虚拟校园, 具有很好的用户体验。

参考文献

[1]欧阳攀, 李强, 卢秀慧.基于Unity3D的虚拟校园开发研究与实现[J].现代电子技术, 2013 (4) :19-22.

[2]朱惠娟.基于Unity3D的虚拟漫游系统[J].计算机系统应用, 2012 (10) :36-39.

Unity3D技术 篇8

山洪灾害是如今我国自然灾害中造成人员伤亡和经济损失较为严重灾种之一。山洪灾害多发生在交通不便、通信不畅的偏远山区, 具有突发性强、破坏力大、难预测等特点, 其防御工作一直是我国防汛工作的难点和薄弱环节[1]。采取虚拟现实技术可对洪水演进过程进行动态仿真, 能生动直观的表达不同情景下的洪水动态演进过程, 为防洪决策和防御预案工作提供科学依据。

在洪水淹没模拟方面, 许多学者做了深入的探讨和研究, 常静利用Skyline开发平台构建了基于Web GIS的洪水淹没三维可视化系统[2];姜仁贵对给定洪水水位值和洪水量已知的两种情况分别进行洪水淹没分析, 并且对洪水淹没过程进行了三维仿真[3]。本文介绍了洪水的淹没模型, 并利用Unity3D游戏引擎对不同的洪水的演进情景过程进行模拟。

2 洪水淹没模型

洪水淹没模型目前主要有两种:给定洪水水位条件下的淹没模型和给定洪量条件下的淹没模型, 其实后者是在基于水位条件下淹没模型的基础上的改进。在洪水水位求解方法也主要有两种方法:现状的洪水水位和来自水力-水文模型计算预测结果的水位。利用水动力水文模型的计算结果来确定洪水淹没区的水位, 在给定时刻还随河段落差而不同[4]。将给定水位近似地看作水平面来确定淹没范围, 是一个求取淹没区的近似方法, 如果要更精确地确定淹没区则要考虑淹没过程的水动力学模拟和水面形状变化问题。但在实际应用上, 由于给定水位近似方法的实用性较强, 能与受淹区现状数据较快地进行叠合分析, 而且经过实践证明, 其准确性完全能够满足防洪抗洪工作的实际需要, 故具有较强的实际应用价值[4]。

给定水位的淹没模型又分为无源淹没和有源淹没两种主要算法, 无源淹没算法只要高程值与水位的关系, 低于水位的地区即为受淹区, 没有将地形的连通性考虑进去, 因此计算较为简单;而有源淹没则地表径流汇入而造成的淹没情况, 因此计算过程比较复杂[4,5]。

综合上述, 本文采用计算简便且具有实际应用价值的方法, 即采用基于给定水位的无源淹没模型。

2.1 模型假设

由于不同的环境下的致灾因子、孕灾环境、承灾体都会有所不同, 以及各种基础资料收集的困难较大, 而且如今采用的雨量筒判断和基于历史灾害记录总结的水位监测方法, 尚缺乏科学依据。由于上述原因, 在山洪灾害的动态淹没范围过程的模拟方面, 还无法达到一个通用并且较为合理的依据, 因此本文采用假设模型, 针对山洪灾害暴涨暴落、快速成灾的特点, 最大洪峰量、水流的最大速度与最高水位出现的时间基本一致[6]。

假设洪水从正常水位上升到最高水位洪峰量达到最大, 并且到达最高水位后, 水位即开始下降。

2.2 洪水演进规则

根据假设模型, 洪水演进规则的模拟如下:

其中, V↑和V↓分别表示洪水的水位的上升速度和下降速度, H0为假设模型中的正常水位值, H1为最高水位值;水位上升耗时为ΔT1, 水位下降耗时为ΔT2;Ti的值取0至ΔT1, Ti取0至ΔT2;ΔH表示洪水的淹没水位差。

3 Unity3D游戏引擎

Unity3D由Unity Technologies公司开发的一款3D跨平台的专业商业游戏引擎, 它能让用户轻松创建三维游戏、建筑漫游、三维动画、三维视景仿真等3D游戏类项目。Unity3D的跨平台性可以让其游戏发布到PC机、浏览器、移动设备、游戏机等几乎所有常见平台上运行, 极大程度地减少了移植开发时间。Unity3D能够支持各种常见格式模型、贴图文件, 轻松实现场景渲染、碰撞检测、人机交互、界面设计、文件管理等等[7]。

鉴于Unity3D的各种优越性, 本文选用该游戏引擎作为洪水淹没演进动态模拟的平台。

4 案例介绍

4.1 研究区概述

以厦门茂林溪流域为例, 研究区的范围介于东经118°6’25’’~118°11’38’’, 北纬24°48’40’’~24°52’8’’之间, 原始数据包括遥感影像和DEM数据, 其中DEM的分辨率为40米, 遥感影像为2.5米分辨率的SPOT-5。

4.2 技术实现

本文的洪水淹没情景模拟是建立在Unity3D的三维场景基础之上的, 由于这部分不是本文要阐述的重点, 因此不再详细说明, 主要关注对洪水的演进情景模拟方法。

在Unity3D中具体的洪水演进情景模拟的技术过程如下:首先, 新建一个跟研究区范围大小相等的平面, 用于模拟给定水位下的洪水水平面, 并为该平面赋予水体脚本”Water Simple.cs”, 该脚本用于模拟;接着, 编写C#脚本利用On GUI () 函数进行界面的设计, On GUI () 在系统运行时也是每帧都会调用的函数, 利用该函数设计可提供设置的几个参数:正常水位、最高水位、上涨历时、下降历时, 并且在函数中计算洪水的上涨速度和下降速度, 具体的On GUI () 中的代码如下:

完成界面设计, 并得到洪水速度后, 根据本文设计的洪水演进规则, 将洪水的演进过程分为:开始状态 (start) 、上涨 (up) 、下降 (down) 、停止 (stop) 四个状态, 在具体进行程序设计时, 利用状态机控制洪水的具体状态, 主要是利用switch语句控制。其中洪水的演进速度的单位是米每秒, 为了加快演进效率, 在本系统中洪水演进的速度与实际速度相比扩大了10倍, 洪水演进控制函数Flood Up Down () 的具体代码如下:

最后, 利用Update () 每帧都调用Flood Up Down () 函数, 从而根据水位上涨的速度与时间, 求得每一帧所对应的水位, 这种方法得到的洪水淹没范围与无源淹没模型得到的淹没区相同, 系统运行的界面如图1和图2所示, 图2相比图1洪水水平高, 是一种动态的演进过程。

5 总结

本文综合分析了各种洪水淹没模型的实用性, 采用了基于给定水位的无源淹没模型, 利用了如今最为流行的Unity3D游戏引擎对不同的洪水的演进情景过程进行模拟。旨在通过虚拟可视化技术为山洪灾害防洪决策和防御预案工作提供科学依据, 从而降低山洪灾害所带来的损失。

参考文献

[1]全国山洪灾害防治县级非工程措施项目 (2010-2013年) 建设管理工作总结报告[J].中国水利, 2014, 18:1-10.

[2]常静.基于Web GIS的洪水淹没三维可视化技术研究[D].郑州大学, 2010.

[3]姜仁贵, 解建仓, 李建勋, 李昊, 李维乾.基于数字地球的洪水淹没分析及仿真研究[J].计算机工程与应用, 2011, 13:219-222.

[4]刘仁义, 刘南.一种基于数字高程模型DEM的淹没区灾害评估方法[J].中国图象图形学报, 2001, 02:18-22+104.

[5]祝红英, 顾华奇, 桂新, 朱朝@.基于Arc GIS的洪水淹没分析模拟及可视化[J].测绘通报, 2009, 05:66-68.

[6]陈俊明.基于情景模拟的小山洪灾害预警方法研究与系统实现[D].福建师范大学, 2012.

Unity3D技术 篇9

1 触摸屏人机交互界面

触摸屏 (touch screen) 是通过收集触头讯号而完成人机交互的感应式液晶显示设备。当用户接触液晶屏幕上的图形按钮时, 屏幕接触点后面的触觉反馈系统将按照预先编写的程序驱动各种连结电子设备向操作系统报告。

触摸原理具体来说是如下的过程:

(1) 用户用手指或者其他物体接触安装在液晶显示器前端的触摸屏;

(2) 触摸屏系统根据手指等媒介接触的图标或菜单位置的来定位信息的输入对象;

(3) 触摸检测部件接受触摸点位置, 并送入屏幕控制器;

(4) 屏幕控制器将位置信号换算称坐标, 交给操作系统。

2 触摸屏程序编写方法

在Unity3d游戏引擎中, 需要考虑的相关因素包含3个方面:触屏的点数、手指的移动和摄像头的移动。触屏动作类型根据触屏的点数分为单点触屏和多点触屏。单点触屏通常用于拐弯, 跳跃等触屏操作, 多点触屏多用于放大, 缩小等操作;手指的移动存在一定的运动轨迹, 其运动轨迹决定了触摸的动作;摄像头拍摄的位置是观察者的视图, 摄像头拍摄的位置应及时根据手指的移动进行调整。本文给出基于Unity3d引擎的手势识别算法。

定义两个属性f1, f2分别用来记录两个手指的位置。

手指移动的方向分为水平方向和垂直方向, 水平方向又可以分为左右两个方向, 而垂直方向可以分为上下两个方向。如果第一次记录的位置和离开屏幕时记录的位置的X轴的方向的记录值相减的绝对值大于Y轴的方向的记录值相减的绝对值则为水平方向的移动, 否则为垂直方向的移动。若是水平方向的移动, 继续判断是向左划动还是向右划动, 当first_screenpos.x大于endpos.x时则为向左划动, 否则为向右划动。若是垂直方向的移动, 继续判断是向下划动还是向上划动, 当first_screenpos.y大于endpos.y时则为向下划动, 否则为向上划动。

3 总结

本文分析了触摸屏的硬件工作原理, 并给出了基于Unity3D的单点触摸操作以及多点触摸操作的实现方法。这些算法可以用于windows、Mac、i OS、Wii、PS3、Andriod等多种平台的游戏开发当中, 从而可以降低开发难度、减少跨平台的开发周期。此外还讨论了多点识别所存在的若干问题。

摘要:本文介绍了以触摸屏的基本工作原理和程序控制方法, 比较详细地分析触摸屏的单点操作、和多点操作的理论根据, 最后给出了基于Unity3D游戏引擎的手势识别算法。

关键词:手势识别,触摸屏,Unity3D,多点触摸

参考文献

[1]金玉玺.Unity3D手机游戏开发[M].北京:清华大学出版社, 2013 (8) .

Unity3D技术 篇10

在软件开发过程中, 常常会生成各种各样不同的工件, 如文档、源程序、可执行代码、支持库, 游戏软件开发中还会出现模型、纹理、材质等。而在此过程中, 经常会出现类似情况:找不到某个文件的历史版本, 而这个版本又是非常重要的, 因为目前版本无法恢复正确运行;开发人员使用错误的版本修改程序, 导致错上加错;开发人员未经授权修改代码或文档, 或修改的结果不能及时反映到各个相关部分, 导致开发过程不一致;人员流动、交接工作不彻底造成关键软件部分遗失等诸多问题, 因此软件开发行为中出现了版本控制系统。

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变化的管理, 其主要功能就是追踪文件的变更。通过版本控制, 可全面记载系统开发的历史过程, 包括为什么修改, 谁作了修改, 修改了什么, 完整、明确记载开发过程中的历史变更, 因此版本控制系统在软件开发过程中得到了广泛应用。

本文通过介绍了SVN (Subversion) 和Asset Server两种版本控制系统, 分别结合Unity3D游戏开发系统, 描述了版本控制系统在游戏开发中的应用, 为Unity3D团队开发者提供可参考的实现方法。

1 Unity3D下的版本控制管理

本文所介绍的2种版本控制管理系统的安装与配置方法, 采用客户端/服务器 (Client/Server) 架构部署, 服务器操作系统选择Windows Server 2003平台, 客户端操作系统选择Windows 7平台, 版本控制服务器端分别使用专门的程序, 客户端则结合或集成于Unity3D游戏开发环境。

1.1 SVN版本管理实现方法

1.1.1 SVN的安装

在Windows平台下, Subversion的服务器端软件可以使用“VisualSVN Server”, “VisualSVN Server”是一款免费的软件, 它集成了Apache组件, 使得客户端可以通过HTTP协议访问服务器, 同时还提供了图形化的管理界面;客户端软件则选择“TortoiseSVN”。

(1) 服务器端安装。

到官方网站http://www.visualsvn.com/server/download/中下载最新版的VisualSVN Server二进制安装包。下载后根据提示安装并选择默认的参数即可, 这样我们建立了SVN服务器可以运行的环境。

(2) 客户端安装。

到官方网站http://www.tortoisesvn.net/download下载最新版的客户端软件TortoiseSVN。TortoiseSVN是扩展Windows Shell的一套工具, 可以看作Windows资源管理器的插件, 安装之后Windows就可以识别SVN的工作目录。下载时根据自己工作站操作系统版本选择相应的二进制安装包, 下载后直接运行安装包, 根据提示安装即可, 安装完后需要重启系统。

1.1.2 SVN服务器配置

在服务器端系统中对VisualSVN Server进行配置时, 第一步是建立代码仓库, 在VisualSVN Server的管理窗口, 右击该窗口的左栏中的“Repositories”, 从弹出菜单中选择“新建”, 为新创建的代码库命名, 如MyKit;第二步, 右击VisualSVN Server窗口的左栏中的“Users”, 为团队成员分配帐号, 如developer1、manager1、modeler1、tester1等;第三步, 选中第一步所创建的代码库名, 右击选择“Properties…”, 添加第二步所创建的用户, 并为用户设置相应的权限, 服务器配置完毕。

1.1.3 SVN客户端的配置

在客户端系统中, 首先利用Unity3D创建一个项目, 然后在Unity3D编辑器窗口中选择Edit->Preferences, 从弹出的窗口中选择ExternalTools选项, 查看Asset Server diff tool是否为TortoiseMerge (客户端TortoiseSVN) , 接下来再选择Edit->Project Settings->Editor, Version Control的mode有三个选项:Disabled、Meta Files、Asset Server, 在这里我们选择Meta Files, 如图1所示, 此时系统会针对资源文件自动生成相应的.meta文件。

下一步就是在Unity3D所创建的工程文件下, 找到Assets目录并使用鼠标右键点击该目录, 从弹出菜单中选择“import…”, 在弹出窗口中的URL of repository中输入:https://服务器IP/svn/MyKit, 服务器IP是指安装了VisualSVN Server的服务器的IP地址, svn是代码仓库的根目录, MyKit是新创建的代码库, 其他的默认, 点击“OK”按钮, 此时会弹出要求输入用户名和密码, 输入前面所创建的用户名和密码即可, 然后系统会自动把本地的资源目录下的所有文件签入到版本控制服务器中。其他团队成员只需要在工作站的任何位置, 如桌面, 右击鼠标, 从弹出的菜单中选择“export…”, 将代码库中的文件从服务器端签出到本地即可。

1.2 AssetServer版本管理实现方法

1.2.1 AssetServer安装

Unity3D的Asset Server是一款简单但强大的专门为游戏资源和脚本设计的版本控制服务器。Asset Server是免费开源的, 但和Unity3D配合使用时需要购买Unity3D的团队开发许可。Unity Asset Server能在Windows、Mac OS以及Linux平台下运行, 可在http://unity3d.com/unity/team/assetserver下载相应的软件包。

在Unity3D官网上下载Windows的二进制安装包并进行安装, 需要注意的是, 在Windows Srever 2003环境下需要安装.net framework2.0, 安装时根据提示进行安装即可。

1.2.2 AssetServer的配置

AssetServer的服务器端不需要进行配置, 只需要设置管理员的密码, 系统默认的管理员帐号为admin, 安装完成后直接启动即可。由于Asset Server的客户端是集成于Unity3D游戏引擎中的, 所以建立代码库和建立用户均在Unity3D编辑器下完成。

首先在Unity3D编辑器中选择Edit->Project Settings->Editor, 在弹出的编辑器设置窗口中将Version Control的model修改为Asset Server, 接着再选择Windows->Asset Server, 打开Asset Server配置窗口, 在Server窗口中, 有三个栏目, 分别是:Current Project、Asset Server Actions、Asset Server Administration。第一次使用版本控制系统时, 点击Asset Server Administrator下的Administration按钮, 此时可根据提示输入服务器的地址、用户名以及密码, 点击“connect”按钮连接到服务器端的Asset Server, 与服务器连接好后则激活了在服务器端建立新项目的“Create”按钮和建立新用户的“New User”按钮, 可以利用这些按钮来创建新项目和新用户。

接下来再回到Server窗口的Overview项, 点击Current Project下的“connect”按钮, 此时又出现了与服务器连接的相关信息, 但在右边则显示了服务器中目前存在的项目, 选择刚创建的项目名称, 点击“Connect”按钮, 系统将自动生成有关的信息, 并同时将本地项目中的资源信息签入到服务器当中, 其他团队成员只需要根据自己的用户信息从服务器中签出资源即可。

2 比较分析

在目前Unity3D项目中, 使用SVN或Asset Server都可以很好地实现版本控制, 表1中列出了SVN和Asset Server的优缺点。

3 结语

版本控制系统能解决开发中出现的版本混乱、沟通不畅、变更管理不好等问题, 必将会越来越广泛地使用, 通过比较SVN和Asset Server两个版本控制系统在Unity3D游戏开发中的实现方法和总结它们的优缺点, 为更好地实现Unity3D团队项目开发打下基础。

参考文献

[1]韩万江, 姜立新.软件项目管理案例教程[M].北京:机械工业出版社, 2005.

[2]赖信任.UML与Enterprise Architect7.5团队开发实用手册[M].北京:电子工业出版社, 2010.

[3]戴楠, 闫明星.用SVN实现软件的版本控制[J].电脑知识与技术, 2009 (5) .

上一篇:综合耐久性下一篇:护理职业技能