Unity3D平台

2024-10-21

Unity3D平台(精选8篇)

Unity3D平台 篇1

由于智能手机不断发展,手机除了通话功能外,已逐渐成为人们移动上网、游戏娱乐的主要工具之一,手机游戏已从之前的2D小型化向着3D大型化发展。本文主要介绍策略手机游戏的设计与实现,开发平台为Unity3D+Android sdk。

1 Unity3D引擎介绍

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。原本是一个针对Mac、Windows和Linux的游戏开发套件,后来发展到能够在iPhone和Wii上部署,或者在Web和Android系统上部署。Unity使用了Mono作为脚本引擎的虚拟机,并以C#或者一种类似JavaScript的语言为脚本语言。

Unity有着简单的界面、友好的开发环境及对当前流行游戏平台的支持,它对于初学者或是那些希望使用一个简单、高效并且友好的游戏引擎来创建游戏的人来说是完美的。Unity可部署在Mac OS或Windows操作系统中,在这2个操作系统中,除了客户端操作习惯与界面有些差异以外,引擎自身的功能没有任何区别。

Unity引擎官方的下载地址为http://unity3d.com/unity/download/。目前,Unity官方的最新版本为Unity 3.5.5,还在不断地升级中。Unity的下载与安装比较简单,只要根据步骤操作就可以顺利完成这个过程。

2 游戏设计

游戏基本设计从游戏操作性、可玩性、视觉效果等方面考虑。游戏采用Unity3D引擎开发,主要编程语言为C#语言,使用C#是因为其完整支持面向对象,能够减少许多编程工作量。

这款游戏的基本思路是玩家通过派遣士兵前去占领据点,通过最后攻打下敌方基地,获得胜利。如果己方基地被占,则游戏失败。基本概念设计包括以下几个方面。

2.1 地图说明

玩家开始只拥有一个据点,敌方同样拥有一个据点,同时地图上还分布有一些无人占领的据点。其中,己方据点为蓝色,敌方据点为红色,无人占领据点为黑色,各个据点之间还有相连接的道路。

2.2 据点说明

据点控制是游戏的主要操作,据点会随时间推移产生金钱,因此据点越多,金钱数量越多。因此玩家一开始的任务就是尽可能多地抢占据点。据点上方还有一个数值,表示当前据点内的部队数量,己方据点的数值用蓝色表示,敌方用红色表示,无人占领者为黑色。

2.3 部队说明

部队主要有数量和攻击力等属性,其中数量会标注在部队上方。部队在游戏中主要进行战斗,玩剑可以通过据点派遣部队。

2.4 派遣说明

通过选择己方据点来派遣部队到相邻的据点,若该据点是敌方据点,则进行攻击,否则进行兵力调派。

2.5 战斗说明

战斗过程为模拟方式,根据双方的兵力、攻击力、血量等数值,在后台通过一系列运算得出伤害和扣血,但兵员数量减到零,部队即解散。

2.6 AI控制

游戏中地方为电脑AI,主要是通过对电脑占领附近的据点进行检测,选择出最具战略意义的据点进攻,电脑会主动屯兵,判断敌我实力后谨慎出兵,不会盲目出兵。

在这款游戏中,玩家所要做的就是对士兵的调遣、指派及士兵的生产。因为据点数量影响金钱收益,所以要尽可能多地占领据点。

3 游戏流程设计

游戏流程如图1所示。进入游戏后,首先进入开始界面,在开始界面有开始按钮和帮助按钮,帮助界面中主要有一些游戏内容的说明。点击开始按钮即可进入关卡选择界面,从关卡选择画面可以选择关卡,之后进入游戏。

程序流程控制如下:

使用Unity3D引擎中带有的游戏流程控制类,即MonoBehaviour类,Unity中用户对游戏对象的操作被分割成若干个单一行为。每个单一行为都作为一个MonoBehaviour类来封装。再生成每个MonoBehaviour类的实例,并作为组件嵌入游戏对象。然后按照一定的顺序(从下到上)调用每个对象的重载方法来实现游戏对象的全部行为。

这个类中包含了Unity3D的许多方法,常用到的主要有以下方法:①UpdateO。当MonoBehaviour启用时,其Update在每一帧被调用。②Awake。当一个脚本实例被载入时,Awake被调用。③Start。Start仅在Update函数第一次被调用前调用。④OnGUI。渲染和处理GUI事件时调用。

除此之外,还有鼠标事件的调用,碰撞器及触发器的方法等。

4游戏主要类实现及运行效果

4.1 据点类实现

据点在游戏中有着非常重要的作用,因为游戏中的操作几乎都围绕据点进行。

游戏给据点设定了玩家占领、无人占领、敌人占领3种状态。在不同状态下,玩家能够进行不同的操作。通过使用枚举类型定义出3个状态:

通过在3个类型的切换达到对据点的不同控制。

据点主要有生产金钱和选择的功能。

玩家可以控制处于玩家占领状态的据点。通过点击据点,会出现征兵指令,同时其相邻据点会被标亮,这表示这些据点可以被指派。点击这些被标亮的据点后,即可向其派出军队,若被派遣的据点也是玩家占领状态,则会执行运输选项,否则执行攻击选项。

点击的方法使用的是NGUI插件中的OnClick方法,通过设置布尔类型全局变量isjdchoise,当有据点被选中时该值为真,否则为假。点击据点时,检测是否有据点选中,同时该据点是否为玩家占领状态。若符合条件则执行ShowCreatePlane函数,该函数显示征兵按钮,并能标亮周围据点;若是有据点被选中,则检测该据点是否为标亮据点,通过设置布尔类型ischoise,当该值为真则为标亮据点,否则反之。若为标亮据点,则执行PassiveClickHandle函数,该函数执行派遣命令。

4.2 部队类实现

在游戏中,部队扮演了重要的角色,主要执行寻路命令和战斗命令。寻路则是在选定出击目标后,从出击点到目标点的移动。游戏中的战斗主要分为部队与据点间的战斗和部队与部队间的战斗。

寻路方式使用的是Unity3D自带的NavMesh Agent组件,给部队添加该组件,只需要在脚本中动态指定目的地就可以自动寻路并前往相应位置。

GetComponent().destination;该变量为目的地,设置好该值后开始自动寻路。

this.GetComponent().Stop(true);暂停自动寻路,当执行战斗指令时调用。

this.GetComponent().Resume();恢复自动寻路,战斗结束调用。

战斗命令通过使用OnTriggerEnter()方法触发,当有可攻击目标进入攻击范围会触发OnTriggerEnter函数,对目标进行一定检测后执行相应的攻击事件。

4.3 AI类实现

AI类主要实现选择合适的目标进攻。这主要通过对每个据点进行一定条件的检测来确定最佳攻击目标,即给每个据点设置一个进攻值后,再检测其附近据点的占领情况,综合后得出一个值。因为据点数量影响经济,所以无人占领的据点进攻值会比较高。当计算好所有据点的进攻值后,将其由高到低排序并遍历这些据点,直到据点周围有电脑占领的据点,再将该据点设为进攻据点,同时将该电脑占领的据点设为士兵派遣的主要据点。之后,每隔一段时间检测是否达成出兵条件(出兵条件设置为派遣据点的士兵数大于目标据点的士兵数),若达成则出兵,否则就造兵,直到符合条件。

4.4 游戏在安卓平台上的运行效果(如图2、图3所示)

5 结语

本文对一款基于Unity3D的游戏的设计与实现过程进行了详细分析。基于Unity游戏开发是比较方便快捷的。当然,游戏开发技术比较复杂,也会遇到很多难题。因此,更全面、更复杂的功能设计与游戏开发实现还需要进一步展开研究。

Unity3D平台 篇2

关键词:虚拟展示技术;耀州瓷;增强现实技术;纹理映射;Unity3D

1 背景分析

计算机以及互联网等技术的发展,已经使得我们对文化记录与传播的载体选择有了更多探索的空间。人们不断提高的文化需求与体验需求也对研究如何利用新的技术手段来承袭与展现历史文化提出了更高的要求。面向文化遗产的数字化展示技术就是其中十分重要的一个方面。

2 现状

传统的展示方式多数是将文物或标本等作为展示内容,通过一定的主题或排序方式进行分类和组合,以橱窗陈列附以说明为形式进行展现。这样的展示方式虽然具有真实、直观、准确和生动的特点,但给参观者的观看角度和观看距离等往往非常受限,多数展品无法提供给参观者全方位的信息。同时实物展示会受到时间与空间的制约,观者只能在特定的时间和地点参观特定数量的展品,信息量受到直接的影响。且将文物陈列于展馆当中会对文物有一定的损坏影响,不利于其保护。

这样的静态的、单一角度的呈现方式,缺乏互动性和趣味性,对许多参观者吸引力并不大,参观过程只是“走马观花”,造成参观效果和学习效果并不理想。加之其具有一定的时间与空间的局限性,不利于大范围和长久的文化传播。

3 增强现实技术

增强现实(Augmented Reality,简称AR),被称为21世纪最有前景的研究领域之一,它是把计算机生成的虚拟物体或其他信息合成到用户感知的真实世界中的一种技术。[1]AR技术是虚实结合、实时交互、三维注册增强现实系统,是利用附加的图形或文字信息,对周围真实世界的场景动态进行增强,[2]比虚拟现实(Virtual Reality,简称VR)技术有更大的优势。

4 基于Unity3D的耀州瓷虚拟展示技术研究与实现

在进行3D模型采样时需注意选取器型标准的实物进行3D模型建立,以保证其三维虚拟效果的准确度。

4.1 3D模型的建立

(1)产生3D对象。在3D MAX环境下通过提取特征线,反复比对修改特征线后,旋转得到曲面造型。

(2)导出3ds.文件。将文件命名为yaozhouci,然后使用“导出”命令,保存文件,文件类型选择3ds.导出完成。

4.2 提取纹理

将数码相机固定在三脚架上,由于瓷瓶的反光性,需要使用柔光箱进行拍摄。测量瓷瓶中心轴将耀州瓷瓶放置在旋转台中心,调整相对位置,使相机镜头与瓷瓶中轴平行。每次旋转5度,共72个角度。由于瓷瓶为球面,所拍摄照片有非常大的球面变形,而每张图片的中心部分垂直于相机基本没有形变,因此截取每张图片的中心部分进行拼接。又由于瓷瓶直径上下不同,将其分为上下6个部进行采集,即获得432张图案素材。

获取完成后在Photoshop进行拼接处理,调整位置及尺寸使得花纹连续,且首尾相接。拼接工作完成后需要进行进一步的调整处理,对比实物矫正颜色,调节亮度及饱和度等。

最终获得的瓷瓶花纹拼接效果如图所示。

4.3 确定识别标记

(1)制作二维识别图。将照片文件经过photoshop处理制作出可作为二维识别图的文件。

(2)生成识别图Unity包。将识别图上传至高通网站(https://developer.vuforia.com)后,下载其对应Unity包。

4.4 虚拟展示程序的实现

将三维模型、纹理贴图、识别图对应Unity包及安卓开发工具包导入Unity3D中。

删除main camera,搜索AR Camera并将其拖动到Hierarchy窗口中,将ImageTarget同样拖动进来,再将3D模型拖动至ImageTarget。对ImageTarget进行修改,将Data Set修改为识别图的Unity包(yaozhouci),ImageTarget选择二维识别图(_MG_290945)。

单击AR Camera,调整相机位置至3D模型正上方,并进入Data Set Load Behavior(Script)选项,勾选Load Data Set yaozhouci后再勾選Activate,即可完成运行程序后识别二维识别图自动加载对应3D模型的命令。

以Android为例,导出apk.文件,并进行测试。测试效果如图。

5 结语

对比实物与展示效果,可以发现Unity3D引擎能够高度还原展示信息。相比其他虚拟展示,通过Unity引入增强现实技术的展示效果还原度比较理想,给观者身临其境的感觉,具有更强的生动性和吸引力。

参考文献:

[1] 齐越,马红妹.增强现实:特点、关键技术和应用[J].小型微型计算机系统,2004,25(5):900-903.

[2] Azuma R.Survey of Augmented Reality[J]. Teleoperators and Virtual Environments,1997,6(4):355-385.

Unity3D平台 篇3

信息化时代, 智能手机等移动终端对人们来说已经不是一个陌生的词, 因其强大的功能而越来越受人们的青睐。智能手机不再像过去的老式机一样只能简单地接听电话和收发短信了, 而是更能迎合众多用户的需求, 成为更多手机用户在工作、学习之余的一部方便灵巧、便于携带的休闲娱乐的移动设备[1]。智能手机拥有如此强大的功能, 都是源于其完善的系统平台, 其中Android系统平台就是其一, 它因其良好的开放性而被很多手机厂商使用, 在市场上占有相当高的比率。基于Android平台的应用中, 游戏因其拥有强大的交互性、娱乐性以及能随时随地进行游戏的便利性而被人们所喜爱, 让开发者看到了手机游戏在Android平台上的巨大的发展空间。

2 游戏功能分析 (The game features analysis)

射击类游戏因其包含明显的动作游戏的特征, 是动作游戏中的一类, 其操作简单、易懂, 是一类比较热门的游戏。该应用主要是通过Unity游戏引擎设计的一款适合于各阶层人士的射击类游戏并移植到Android移动平台。对游戏功能进行分析时, 应集中注意要“做什么”而不是“怎么做”。通过对游戏的分析, 根据游戏目标功能的用例图分析得到游戏的整体框架图, 如图1所示。

3 游戏功能模块的实现 (Realization of the game function module)

3.1 游戏场景

就射击类游戏来讲, 游戏的场景一般都会很大, 因此无法在游戏的界面上完全显示出来, 所以要给游戏的主界面背景添加一个UV动画。游戏中可以看到玩家控制的主角在不停地移动, 而游戏背景总是在向下移动, 让玩家感觉整个画面都在移动, 呈现一种动态的视觉效果。

动态背景创建的原理就是将背景用一张图片进行循环滚动, 从而形成一个动画的过程[2]。为了实现背景的循环滚动, 则需得选择Loop, 将其设为循环播放模式。

3.2 主角管理的实现

在游戏中, 主角有循环移动/具备生命值/可以发射子弹/尾部火焰效果等功能, 在设计时建立一个Player类, 让它与主角关联, Player类中提供了一个Update函数, 这个函数在程序运行时, 每帧都会被调用, 因此, 在这个函数中添加主角移动的部分代码:

在Player类中定义一个enum (枚举) 状态, 包含飞机的三种状态:Playing、Explosion、Invisible。再在子线程方法Destroy Player () 中实现飞机被击中或与敌机发生碰撞后, 飞机退出游戏窗口底部, 然后再从游戏窗口底部返回到游戏界面, 且闪烁一段时间才能被子弹击中的功能。

3.3 敌人管理的实现

敌机的类型主要分为三类, 具体类型如图2所示。

为了能够不停的制造新的敌人, 则需要创建敌人生成器。创建一个Enemy Spawn脚本, 为Update方法添加如下代码:

3.4 碰撞检测的实现

射击游戏中, 为了判断前方是否有障碍物和子弹是否击中对方, 就需要对两个物体进行碰撞检测, 然后根据检验的结果采取相应的方法进行处理。游戏中的碰撞检测主要存在于主角与敌机、主角与敌机子弹、敌机与主角子弹之间。而物体要发生碰撞检测, 主动运行的对象就必须是刚体, 因此, 需要添加一个刚体组件。检验碰撞通常有两种方法On Collision-Enter和On Trigger Enter。应用中采取的则是On Trigger Enter方法[3]。检测中需要使用如下方法设置敌人位置:

4 游戏的完成及测试 (Completion and testing of the game)

在游戏制作完成后, 为了检查游戏是否完整、能否达到预期的效果, 则需要对其进行调试和运行, 以发现游戏中可能有的不足并解决这些问题。进入游戏, 按空格键, 发射子弹;按上、下、左、右键, 上、下、左、右移动;飞机在飞行中若吃到星星, 则会获得一定的分数。若飞机撞到敌机或被敌机子弹集中, 生命值会减一, 当生命值减到零时, 游戏失败, 进入失败界面。

经过测试, 游戏运行效果符合预先设计的游戏总体效果, 各个界面之间的切换也都正确。此外, 还重点测试了游戏过程中其他功能的实现, 玩家控制的主角能正常移动并发射子弹, 在吃到星星后, 也能获得相应的分数。

5 结论 (Conclusion)

游戏是以Unity游戏引擎为开发平台, 并最终实现向Android的移植。

在游戏的设计与开发的整个过程中, 由于对Unity和Android机制研究的还未深入, 遇到过很多问题, 有技术方面的, 有关于游戏模型方面的, 有界面设计方面的, 还有程序运行时出现的各种异常, 移植过程中软件无法打开、运行等问题。但是通过仔细研究Unity引擎及Android平台的开发方法, 均得到解决, 也为以后的继续开发提供基础。

参考文献

[1]段海朋, 关振华.3DS Max 2010完全学习手册[M].北京:清华大学出版社, 2010.

[2]林深华, 等.基于Android平台Unity3D游戏设计与实现[J].企业科技与发展, 2013 (10) :40-42.

Unity3D平台 篇4

对于手机游戏来说, 目前最大的两个阵营是安卓和IOS。在安卓阵营中, 普遍认为FPS达到30以上即可认为是游戏流畅运行, 达到60以上视为非常流畅。在IOS阵营中, FPS达到40则为流畅。FPS值越高, 游戏越流畅, 越能让人有身临其境之感, 能带来更佳的体验。

对于游戏性能的优化, 在Unity3D中一般可以从下面这几个方面进行优化:

1 视觉体验优化

很多人说苹果流畅, 安卓卡顿。但是很少有人知道, 其实这背后苹果的UI设计师设计的过渡动画起了不小的作用。例如:同样是指纹解锁:从解锁过渡进主界面的过程。当你对比安卓和苹果解锁时, 会感觉苹果比大多数安卓机要顺畅。但是当我们拿专业测试工具进行对比时会发现, 实际上苹果手机的解锁速度比安卓手机要慢。所以, 在我们游戏的后期优化过程中, 美术起到了一个十分重要的作用。对于一些如可共享游戏对象材料、纹理地图、方形纹理、远处背景、光照图等等的界面, 可适当的使用一些压缩、网格和其它一些处理手段。同时, 对于各个场景的过渡、角色的变换、动作打击等UI设计人员可以根据具体的实际, 设计动画过渡和UI交互, 寻找时间与美交互点, 做到视觉与流畅上的和谐统一。

2 内存和CPU使用率的优化

资源的使用与释放一定要做到斤斤计较。在Unity3d中有内置分析器以及Xcode分析工具。使用Unity分析器来分析设备上的运行代码。“垃圾回收器”确保自动清理, 不用的内存。例如:可以移除代码中的任何字符串连接, 因为这会给GC留下大量垃圾;用“for”循环代替“foreach”循环和“while”循环;多使用对象库;不使用LINQ命令;信号或者进程等的调用与回收多使用底层函数, 如“_Exit”, 多用系统库中包含的算法, 少用递归函数等。

3 物理效果

可以将物理模拟时间步设置到最小化状态;减少角色控制器移动命令的调用;在物理模拟过程中尽量不要使用ragdolls和触发器的“on Inside”回调函数;多使用层次, 少使用标签;不使用Mesh对撞机;尽量减少对碰撞检测请求, 尽量从每次检查中获得更多信息。

4 默认关闭非必要的动态动画设置

在不清楚设置是否能够达到我们游戏设计的最高硬件要求之前, 为游戏默认设置最低的性能要求, 以达到游戏默认情况下能以最流畅的方式运行。我们默认的设置应该是对设备配置要求最低的。默认关闭一切可用可不用的设置, 如动态动画的关闭设置, 包括物体物理碰撞机、未被渲染对象的动画、无关动图等等都可以默认为关闭。

5 具体到设备的优化

在游戏启动时检测并判断设备性能。根据不同设备使用不同的纹理大小, 分辨率图像, 调用不同大小的内存, 使用不同的渲染方法, 载入不同数量的游戏资源 (音乐、图片、库文件, 预分配资源等等) 。

结束语

Unity3d是当前最火的游戏开发引擎, 开发出了数不胜数的优秀游戏。Unity3d也确实在游戏开发的各个方面都有着过人之处。但是对于游戏开发者来说, 是不会轻易满足现状的, 每个人都有一颗追求更优秀的游戏作品的心, 所以游戏的优化也是一个不可缺少的环节。

摘要:游戏行业这几年发展迅速, 造成现在游戏数量井喷式增长, 但是游戏品质参差不齐。游戏优秀与否, 并不仅仅是看游戏能否赚钱。在游戏行业内, 对于一款优秀的游戏, 一般来说应具备这6大共同点: (1) 具有挑战性, (2) 感觉元素, (3) 自由度, (4) 地点因素, (5) 希望诱惑, (6) 幻想元素。好游戏往往能将这6个方面尽量做到近乎极致。而这极致的背后, 离不开游戏技术发展的支持。

关键词:Unity3D引擎,内存优化,FPS值,手机游戏优化

参考文献

[1]宣雨松.Unity3D游戏开发[M].北京:人民邮电出版社, 2012年6月第一次印刷.

基于UNITY3D的小游戏开发 篇5

UNITY游戏开发课程,在授课过程中,引导学生完成了一个小游戏的开发。虽然游戏的制作并不算复杂,但是也花了不少心思。下面将游戏的开发过程做一个简单的总结。

使用了一个插件:NGUI3.9.0,导入插件后,第一件事情不是开始制作游戏,而是改变默认的布局,因为默认的布局并不方便操作,尤其是使用NGUI插件以后。所以要把布局变成如图1所示的模样。将场景视图和游戏视图变成上下结构,这样场景中的游戏对象在游戏视图中的一览无余,操作和查看都非常方便。

2 游戏开发过程

在制作游戏之前,要熟悉NGUI插件,先做一个简单的游戏界面作为热身。首先,添加一个sprite(精灵)。要让这个精灵具有按钮的功能,(1)给它添加一个盒子碰撞器,那么它就具有了交互功能。(2)给这个精灵添加一个按钮脚本,这个时候,这个精灵才真正成为了一个按钮。(3)在按钮上添加一个文字:RED(红色)。对文字进行简单的字体、字号、颜色的设置。将文字标签设置为精灵的子元素,这样移动精灵的同时可以移动文字。将精灵复制两次,把文字分别改为:BLUE(蓝色)和GREEN(绿色)。(4)再创建一个精灵。效果如图2所示。

接下来要做的事情就是点击不同的按钮,让右边的精灵变成不同的颜色。给右边的精灵添加一个C#脚本,命名为:COLORController.代码如下:

点击第一个文字为红色的按钮,在属性窗口中找到ON Click点击事件窗口,将最后一个精灵拖入到Notify中,选择Method方法为:Make It Red;另外另个按钮做相同的操作,方法分别选择:Make It Blue和Make It Green。运行游戏,点击第一个按钮,右边的精灵变成红色;点击第二个按钮,精灵变成蓝色;点击第三个按钮,精灵变成绿色。这样就实现了第一个交互式的游戏。做到这一步就意味着对NGUI这个插件的基本运作方式已经了解了,接下来就可以做一个更加复杂的小游戏了。

首先在NGUI预设工具栏中选择一个背景,然后添加一个scroll view,再添加一个精灵。运行游戏时,可以发现当移动精灵到这个scroll view边界以外时,会出现这样的情景:

给精灵添加盒子碰撞器和一个drag scroll view脚本以后,再次运行游戏时,这个精灵就可以像冰块一样在scroll view里面左右滑动了。将这个精灵复制几个,并在scroll view中整齐的排列,再次运行游戏并拖拽精灵时,画面就更加有趣了。

接下来要做的事情就是能够将精灵拖拽出scroll view窗口。第一步,在scroll view中添加一个invisible widget,添加后默认命名为container;第二步,将5个精灵全部拖到container目录下;第三步,给container添加grid脚本,执行脚本时,脚本程序会将5个精灵重新排列,根据需要调整精灵之间的宽度;第四步,给5个精灵添加drag and drop item脚本;第五步,在UI Root下创建一个Panel,给Panel添加drag and drop root脚本。到这个时候,就可以把精灵拖拽出scroll view了,但是拖拽出去以后,放开鼠标时,精灵会自动回到container的最后一个格子中。在container的UIGrid窗口中勾选smooth tween选项时,精灵自动回位的动画会变得比较柔和,也会很明显地发现它的自动回位。还有既要让精灵能够在水平方向上滑动,又能进行拖拽而且不冲突的话,就要在精灵的drag and drop item脚本选项中的restriction中选择vertical,这意味着只允许垂直方向的拖拽操作,这样水平滑动,垂直方向拖拽,就很好了。精灵不能被拖拽出去是因为没有一个接收它的容器,所以还需要做一个容器接收它,才能顺利地拖拽。在UI Root下创建一个精灵,重命名为bg_sprite,选择一个透明的图片作为它的外形。

在UI Root下添加一个精灵,给精灵添加盒子碰撞器和drag and drop container脚本,就可以把scroll view中的精灵拖拽出来并放到新的精灵盒子当中了。接下来要做的事情就是复制一个一模一样的scroll view和container,然后将5个精灵从第一个scroll view拖到第二个scroll view或者从第二个scroll view拖到第一个scroll view,并且让5个精灵自动排列。第一步,将scroll view、container、bg_sprite分别重命名为:scroll view1、container1、bg_sprite1并且进行复制,复制后分别重命名为:scroll view2、container2、bg_sprite2,将container2中的5个精灵删除,这样就只有5个精灵在两个scroll view中移动;第二步,给bg_sprite2添加盒子碰撞器和drag and drop container脚本,将container2拖拽到bg_sprite2的drag and drop container脚本的reparent target选项中,就可以将5个精灵从第一个scroll view拖到第二个scroll view了;第三步,给bg_sprite1添加盒子碰撞器和drag and drop container脚本,将container1拖拽到bg_sprite1的drag and drop container脚本的reparent target选项中,就可以将5个精灵从第二个scroll view拖到第一个scroll view中了。

接下来,就可以依据这个已经实现的功能进行小游戏的创作了。首先可以设想,如果要做一个购物类的小游戏,将其中一个scroll view的外形变成购物篮,把5个精灵变成商品,那么,购物的小游戏就做成了。那么问题来了:如何将精灵的外形变成自己的图片呢?第一步,在互联网上找到合适的图片;第二步,在project视窗中的NGUI目录下的Example文件夹下新建一个文件夹,重命名为logo;第三步,将电脑上的图片拉入到logo文件夹中,然后在图片上点击右键,选择altas maker,打开altas maker窗口;第四步,选择add/update功能,将图片加入到altas图集;第五步,在精灵的属性窗口选择该图片,就可以将精灵的外形变成图片了。依据以上的思路和做法,还可以做成其他风格的小游戏。

完成了游戏的制作之后,最后一步就是发布游戏了。如果发布成单机版的电脑游戏,可以选择file-building and settings,选择PC,Mac&Linux Standalone,然后单击Build就可以将游戏发布成可执行文件了。

3 结语

这个小游戏是二维游戏,而UNITY3D的特色在于它的3D效果,希望在今后的教学过程中可以尝试三维游戏开发。

参考文献

Unity3D平台 篇6

1 消息发送机制

在Unity 3D中提供了一种消息发送机制, 可以在有继承关系的物体间实现消息传递。游戏对象间发送的广播与消息大致可以分为3种:第一种为向子对象发送, 发送至该对象的同辈对象或者子孙对象中;第二种为给自己发送, 发送给对象自身;第三种为发送给父对象, 发送给同辈对象或者父辈对象。

2 JS脚本的解决方案

JS脚本主要通过三个函数来实现[1]。

Game Object.Broadcase Message () ;//向自身或子物体对象的脚本中发送消息

Game Object.Send Message () ;//向自身脚本中发送消息

Game Object.Send Message Upwards () ;//向自身或父物体对象的脚本中发送消息

以Send Message Upwards方法为例, 实践论证分析如下:

在场景的Hierarchy视图创建父子对象Cube和Sphere, 如图1所示。

新建JS脚本文件send Message.js和receiver Message.js。将send Message.js绑定到子物体Sphere对象上, 用于向其它物体发送消息, 将receiver Message.js绑定到父物体Cube对象上, 用于接收Sphere物体发送过来的消息, 并作出相应的反映, 如图2所示。

send Message.js脚本中的主要内容如下:

(“Apply Damage”, 5.0) ;//第一个是接收信息的对象中的方法名, 第二个参数为传递给接收消息的方法需要的实参。}

receiver Message.js脚本中主要内容如下:

当播放场景时Sphere物体将把消息传递给自身和Cube物体, 自身物体中的Apply Damage方法和Cube物体中的Apply Damage方法将依次接收到传递过来的实数值5.0, 并且打印输出。因此, Send Message Upwards方法发送消息时先向自身物体发送, 然后再向父物体发送。其他两个消息传递方法与Send Message Upwards用法基本相似, 在此不在赘述。

这三个消息传递函数使用非常方便, 但也有一定的局限性, 在发送消息时, 消息传递的对象必须要有一定的继承关系。

3 C#脚本的解决方案

Unity 3D也支持C#完成脚本的编写, 可以使用委托和事件机制打破JS脚本编写中存在的局限性, 实现在不同物体间传递消息的效果[2]。

论证分析如下:创建C#脚本文件Event Dispatcher.cs和Listen.cs。分别将Event Dispatcher.cs脚本绑定到Sphere物体, 将Listen.cs绑定到Cube物体, 如图3所示。

Event Dispatcher.cs脚本主要内容如下。

在该事件发布的脚本文件中, 定义了委托和事件, 并在鼠标覆盖事件中对事件手柄进行了定义。

Listen.cs脚本主要内容如下。

在Listen.cs脚本文件中, 首先获取对事件发布物体的引用, 然后把侦听函数使用函数重载的方式添加到事件手柄中。在侦听函数中, 一旦事件进行了触发, 就会使侦听物体本身进行旋转, 并把发布事件物体的名称打印输出。播放场景时, 当鼠标移动到Cube物体上时Sphere物体就会旋转, 同时在控制窗口中将会输出侦听对象信息“mouse is over:Cube”, 见图4。

4 结语

由此可见, 如果对象间存在继承关系, 采用JS脚本来实现信息传递很方便;如果对象间不存在继承关系, 可以使用C#完成脚本的编写, 利用委托和事件机制来实现不同物体间的消息传递。

摘要:就Unity 3D中物体间的通信进行分析探究, 分别就JS和C#两种脚本提出了具体的解决方案, 很好的解决了物体间信息传递问题。

关键词:对象,消息,脚本

参考文献

[1]宣雨松.Unity 3D游戏开发.人民邮电出版社.2013 (7) .

Unity3D平台 篇7

关键词:Unity3D,漫游系统,虚拟现实,NGUI

1 引言

虚拟现实的英文全称是Virtual Reality,简称VR,是近年来才发展起来的高新技术,它利用电脑模拟产生一个三度空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟,让使用者如同身临其境一般。而虚拟漫游技术是虚拟现实技术的一个重要分支。在建筑、旅游、游戏等行业发展也非常快。目前,已经出现了基于很多3D引擎的虚拟校园、社区以及某些专用场地的漫游系统。如文献[1]中的校园漫游系统以及文献[2]中的某室内漫游系统。

鉴于虚拟漫游系统的广泛应用,本文提出了一种基于Unity3D引擎的漫游系统的设计模式,同时,通过使用Unity3D引擎中自带的一些组件和C# 脚本研究并实现了场景控制的可扩展性以及地形绘制、碰撞检测、自动寻路、利用NGUI插件完成UI制作以及粒子系统等关键技术。

2 Unity3D 平台

Unity3D是由Unity Technologies开发的一 个让你轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业的跨平台游戏引擎。Unity3D最大的优势就是性价比高, 它自带丰富场景模型的同时,还支持包括Java Script和C# 在内的多类脚本语言,并且兼容如Web、PC、Android、IOS等九种平台。Unity3D开发平台使用的软件架构方式和渲染方式使得它在虚拟仿真领域具有较高的可移植性和易用性,开发的漫游系统可以直接在网页上运行,使用户有更好的体验感。

3 基于 Unity3D 漫游系统设计模式

虚拟漫游系统的设计需要使用软件工程的思想,从设计者的需求分析入手进行系统各个模块功能的划分与实现。图1给出了具体的虚拟漫游系统的搭建框架。该框架是系统的可重用设计部分,为开发者提供了一种设计骨架。在该框架中,可以清楚的了解各个模块之间的依赖协同关系,为开发者在实际开发时的任务分配以及架构设计等工作提供了一定的参考价值。

3.1 虚拟场景生成

任何漫游系统都来源于真实的场景需要,因此首先需要根据系统的需求通过实地或者航空拍照等技术采集实景数 据 , 再利用Maya、Multi Gen Creator或者3DMax等3D建模软件完成模型的建立和贴图工作后 ,将其发布 成FBX格式的文 件导入Unity3D系统。在Unity系统中 , 通过Terrain工具添加 地形 , 并在Inspector面板中设置各个属性完成地形的绘制 ,然后利用Unity3D的Terrain Assets包中的材质选项为地形贴图。同时,Unity的Skyboxes包可以完成场景中天空的绘制。为了环境的进一步真实化,也需要在场景中添加光源、植被以及湖泊等必要事物。

最后, 将导入的FBX格式的三维模型拖入场景对应的位置, 完成整个虚拟环境的生成。其中Unity引擎自带的Tree、Water(Basic)、Water(Pro Only)等包为虚 拟环境的快速搭建提供了很好的条件。

3.2 功能模块

虚拟漫游系统必须实现用户在场景中的自由漫游,并且需要保证漫游的真实化,比如人物无法穿过建筑物和墙等现实生活中无法穿过的坚硬固体,这就需要对系统中的一些物体加碰撞器,进而实现碰撞检测技术。其次,在大多数漫游系统中,还设置了用户自动寻路功能,比如在路过一些危险桥面或者窄路时,人物可以在没有用户操作的情况下,安全达到目的地。这样的自寻路功能,降低了对用户的专业技能要求,扩宽了用户使用范围,达到了更好的漫游效果,一定程度上增强了软件使用的广泛性。另外,交互功能也是任何漫游系统不可缺少的一部分,在Unity3D中,通过常规按键“WSAD”来实现用户在场景中上下左右四个方向移动功能。为了满足很多PC用户惯用鼠标的要求, 开发者还可以通过利用U3D中的脚本实现人物自动到达鼠标点击位置的功能;另一种不可忽略的交互功能就是UI界面的设计,在大多数的系统中,用户都习惯于通过对话框或者导航菜单来实现人机交互的功能。因此,界面交互设计也成了漫游系统不可或缺的部分。

为了减少很多用户在虚拟环境中的迷失感,系统还应提供小地图、人物坐标显示、指南针等必要的方向工具,来使用户达到更加真实并且舒适的漫游体验。

4 关键技术探究

4.1 碰撞检测

碰撞检测[3]最基本的是模拟现实环境中的物体在遇到障碍物时发生的本能反应,比如当场景中的人物碰到建筑物或其它坚硬大型物体时,不能继续前进;否则会大大降低漫游的真实性,甚至在有的系统中会完全失去漫游模拟的意义。因此,一个全方位的碰撞检测是对漫游系统的基本要求。

在U3D中, 通过添加相应形状的Collider组件,实现物体的 碰撞检测 , 如图2所示。还 可以通过 使用Java Script脚本或者C# 脚本 , 实现相应 的操作。 在Inspector中,利用Collider的Is Trigger选项,添加如下脚本,可实现当人物碰撞箱子时使其颜色变为红色的功能。

Void OnT rigger Enter(Collider other)

{

If(other.tag == “Player”)

{

game Object.renderer.material.color = Color.red;

}

}

4.2 自动寻路

使用Nav Mesh各项选项设置和Java Script或者C#脚本结合 的方法来 实现漫游 系统的自 寻路功能 。在Unity菜单栏Window的下拉菜单中,选中Navigation选项,即会在Inspector旁边出现Navigation的面板,如图3所示。在Scene Filter选项中,All表示全部显示,MeshRenderers只显示可渲染的网格部分 ,Terrains只显示地形。Navigation Static选项是选择该物体是否用做寻路功能的一部分,它对其他的选项可否操作至关重要。

在Unity的自动寻路功能中, 通过层的概念来完成对场景路径的烘焙工作。对于Navigation Layer进行不同的划分之后, Bake将场景可漫游层进行烘焙。然后给漫游人物添加Nav Mesh Agent组件, 则在Inspector面板中会有对于人物可漫游层的选项,

将Nav Mesh各个环境设置完成之后, 通过脚本来完成场景人物的自动寻路功能。添加如下代码可完成人物绕过条形障碍物寻找灯源物体的功能 (这里的target需要在可视面板中进行拖拽赋值):

Private Nav Mesh Agent player;

Public Transform target;

Void Start()

{

Player = game Object.

Get Component<NavM esh Agent>();

}

Void Update()

{

Player.Set Destination(target.position);

}

通过OffM esh Link实现更复杂的场景自寻路。如当场景中出现楼梯或者横向跨越时,可通过Off Meshi Link来完成人物的安全漫游, 但为了达到更真实的现实模拟,需要在Bake选项设置中通过设定Drop Height以及Jump Distance的数值来设定人物的垂直和水平两个方向的跳跃距离。

4.3 基于 NGUI 的 UI 制作

UI是任何系统中都必不可少的一部分 ,在3D系统中更是对用户交互性以及体验感有重要的作用。U3D引擎中,系统自带的API可以实现界面的设计,但是随着引擎的不断成熟以及插件技术的发展, 本文采用NGUI插件来完 成UI的制作。NGUI是严格遵 循Keep ItSimple(KISS)原则并使用C# 语言来编写的一个Unity插件,提供了强大的UI系统和事件通知框架。无论是从开发者还是用户角度,该插件都提供了更高的性能和更好的扩展性。

NGUI的各个功能都封装成了脚本 , 将NGUI包导入U3D环境后,会多出一个NGUI组件,在其中可以建立需要的UI类型,如图4所示。在具体实现时,一般需要先使用 图形处理 工具来制 作必要的 图片 , 再利用NGUI中的Atlas Maker制作图集 , 然后在UI中生成Sprite精灵,调整其大小和位置 ,最后通过利用脚本来实现其具体的功能。在具体开发时,NGUI插件能够快速便捷的制作标签、按钮以及一些头像和小地图等界面工具, 同时NGUI通过一个脚本来实现屏幕自适应功能,为系统发布提供了更好的条件。

4.4 粒子系统

粒子系统是一种在三维计算机图形学中模拟特定模糊现象的技术,在虚拟漫游中,可以使用粒子系统模拟环境中的云、雾、雪以及水流、落叶等自然事物,进而实现更好 的真实感 。U3D中的Particles包中包含 了Dust、Water、Smoke等的prefab,可以直接加入场景来实现模拟效果。

在虚拟漫游场景中,为了使环境真实化,可采用粒子系统实现不同天气的模拟。在消防、洪水演练系统中,粒子系统更是发挥了很大的作用。

5 结束语

Unity3D平台 篇8

我们将事先准备好的游戏人物模型拖拽到Project的Assets文件夹下, 然后将人物的静止状态模型拖入场景中。

然后在人物脚下Create Cube作为地面, 取消Mesh Renderer选项, 并给人物加上Rigidbody (注意Constrains中的Rotation选项, 这会使物体碰撞后产生自由旋转) 以及Capsule Collider。以实现人物的正常移动, 调节胶囊碰撞器参数, 使其包裹人物。

下面, 我们使用编辑脚本实现人物的移动的控制。

在脚本中, 使用f l o a t H=I n p u t.Get Axis (“Horizontal”) , 实行对人物水平方向移动的监听, 当在键盘上按下A或者D键时, 会返回正或者负数值, 以此值判断人物的左右的移动方向。float V=Input.Get Axis (“Vertical”) 与前者类似, 不过是通过W和S键判断人物的前后移动。我们将它们放在update函式中, 这样系统每针都会不停的监听人物的移动变化。我们使用if (Mathf.Abs (H) >0.01f||Mathf.Abs (V) >0.01f) 来判断人物是否移动, 如果移动, 赋予人物速度, 控制人物面向方向, Get Component<Rigidbody> () .velocity=new Vector3 (velocity*h, this.Get Component<Rigidbody> () .velocity.y, velocity*v) , 此处, 我们利用之前为人物添加的刚体组件, 实现人物的速度控制, 因为人物是在水平方向移动, 所以使用this.Get Component<Rigidbody> () .velocity.y, 作为Y轴速度, 也就是Y轴速度不变。使用transform.Look At (new Vector3 (h, 0, v) +transform.position) 实现人物面向方向的改变。接下来, 我们在Assets下Create一个Animator Controller, 并把它添加到人物的Animator中, 作为人物播放的动画控制器。

在Window中打开Animator, 将导入的人物站立和移动的动画拖拽到里面, 使用bool值控制两者的转换, 实现站立 (Take0010) 向跑步动画 (Take001) 的转换时, 我们将bool设置为true, 当由跑步转换为站立时, 设置为false。我们将anim.Set Bool (“Move”, true) 放在前面提到的判断语句后 (这里, anim是Animator对象) 就是当键盘控制人物移动时, 将人物状态有站立设置为奔跑。当人物静止时, 我们要实现人物的速度归零, 并由奔跑转为静止状态。因此, 在if后面添加else语句, 并添加Get Component<Rigidbody> () .velocity=new Vector3 (0, this.Get Component<Rigidbody> () , 0) 与anim.Set Bool (“Move”, false) 前者实现速度归零后者设置人物状态为站立。如图1所示。

接着, 我们调整摄像机位置, 使摄像机跟随人物移动。选择合适视角, 选中Main Camera, 选择Game Object下的Align With View, 使摄像机与当前视野保持一致。然后将人物的Tag设置为Player并为摄像机添加控制脚本, 使用Game Object.Find Game Object With Tag (“Player”) 找到跟随的人物, 用transform.position设置摄像机的跟随位置。

2. 下面介绍人物攻击动画的实现

因为一些攻击动画是有一连串的攻击实现的, 所以这里我们先实现攻击动画的拆分。首先选中攻击模型, 右侧Inspector中点击Edit。这里我们使用的攻击效果由两个攻击动作完成, 所以我们将动画拆成两部分, 点击加号根据第一个动画完成的时间, 在Start和End位置添加参数, 动画确定后, 点击Apply。如图2所示。

添加完成后会在原动画后面出现拆分后的动画。

完成拆分后, 选择Animator, 添加新Layer, 覆盖之前实现人物站立、跑动的Layer, 并添加一个Empty State (处于Emty State时, 之前设定的人物站立于跑动的效果就会起作用) , 然后将拆分的两个动画拖入到Animator中, 使用Trigger作为3个状态之间的转换方式。这里没有使用之前的Bool是因为, 一旦使用Bool值作为转换条件, 当触发第一次攻击时, Boll设置为True, 那么第二个攻击效果就会自动出现, 失去了拆分的意义。由攻击效果转换为Empty时, 不需要额外设置, 当攻击结束时会自动转换为Empty。如图3所示。

这里还有一点要注意, 在设置动作之间的转换时间的时候要注意选择合适的时间间隔, 使当连续触发时, 能够实现连击的效果。我们还是用脚本控制人物的攻击。在新的脚本中, 首先在start () 中调用this.Get Component<Animator> () 获得加在人物身上的Animator。然后, 这里我们添加简单的条件判断, 实现动作的触发。在update中添加if (Input.Get Key (“space”) ) , 这样, 每帧都会进行按键检测。如果检测到按下按键, 则调用之前在Animator中设置的Set Trigger (“Attack”) 方法, 这里Attack就是之前设置的Trriger参数的名字。

同时我们也可以为攻击添加声音效果, 可以选择直接把声音添加在特效上, 选中特效, 点击Add Component, 选择Audio Source, 将想要加入的音效拖入到Audio Clip中。

我们也可以在脚本中添加音效, 首先, Creat Empty, 再为它添加Audio Source, 新建音效控制脚本, 在脚本中获得Audio Source对象, 然后调用Audio Source.Play One Shot (Sound Name) 即可。这里我们可以把控制脚本设计成单例模式, 本例中, 声音控制脚本命名为s Manager, 首先定义s Manager对象instance, 然后在Awake () 中为其赋值:instance=this。这样做的好处是使得instance成为s Manager在系统中的唯一实例, 节省了时间和资源。

摘要:Unity3D作为一款更加专注作品的快速实现和平台推广以及3D渲染效果的游戏开发引擎, 跟随移动平台和Web平台的迅速发展, 抢占了大量市场份额。Unity3D不止限于单机平台, 还可以借助Photon等游戏引擎, 实现Unity3D单机游戏的网络化。本文所涉及的内容, 就是使用Unity3D实现游戏中人物基本行为的控制。碰撞体 (Collider) 与刚体 (Rigidbody) 结合使用可以实现Unity中的物理特性。刚体 (Rigidbody) 使对象可以受物理控制, 而碰撞体 (Collider) 使对象可以相互碰撞。Animator可以将编辑动画的控制, 管理不同动画之间的关联。

关键词:Unity3D,游戏人物控制,人物攻击

参考文献

[1]王洪源, 等.Unity3D人工智能编程精粹[M].北京:清华大学出版社, 2014.

上一篇:移动路由下一篇:关注差异分层评价