Unity应用论文九篇

2024-08-24

Unity应用论文 篇1

关键词:Unity,Vijeo Citect HMI,PLC

0 引言

在冶金行业中, 高炉炼铁是必不可少的工艺环节, 而高炉的安全运行离不开给排水系统。八钢C高炉工程给排水系统自动化控制项目将施耐德Unity pro 5.0、Vijeo Citect7.20软件与PLC硬件产品应用到高炉的给排水系统中, 可根据工艺需求对现场设备启停、工艺参数调整进行统一的手自动控制。工程师和操作员可利用人机界面对现场设备进行检修维护及远程状态监控等。

1 控制系统配置

硬件:工程师站和操作员站各一台。配置及要求:CPU主频≥3.0GHz、RAM 2GB、硬盘≥160GB、双网卡, 100M PCI、19″TFT液晶显示器 (分辨率1280×1024) 、32M独立显卡、DVD/CD-ROM、USB光电鼠标、键盘、预装Windows XP Professional中文版。

软件:PLC编程软件和HMI监控软件, 包括UNITY PRO UNYSPUEFUCD50、VIJEO CITECT 1500点完整版/VJCNS101113、VIJEO CITECT 1500 点控制客户端/VJCNS102013 各1 套。

2 PLC系统配置

该工程采用施耐德公司的Modicon Quantum PLC系统产品, 硬件配置如图1 所示。

采用unity 5.0PLC编程软件, 项目浏览器如图2所示。

3 HMI

工程中采用功能强大的Vijeo Citect人机接口画面编辑开发应用软件。 Vijeo Citect提供了最大的灵活性、稳定可靠性, 以及方便快捷的安装和管理功能。

3.1 软水密闭循环系统

(1) 软水 Ⅰ 系循环供水泵 (P101-01~03) , 界面如图3 所示。

运行方式:2用1备。操作方式:正常时手动启动、停止水泵, 当工作泵故障停止时, 自动启动备用泵。每台水泵可以任意选择工作、备用。

(2) 软水Ⅰ系安全供水泵 (EP101) 。

安全供水泵组为电泵, 采用一级电源, 可以就地操作或在水处理控制室的HMI上操作。

操作方式:正常情况下根据自动联锁条件启动或手动启动, 停止时由操作人员根据现场情况 (当电源恢复正常供电时) 手动操作完成。

自动联锁条件:停电时, 延时6s自动启动安全供水泵;供水总管压力低于0.6MPa时, P101_01 延时1s自动启动, P101_02 延时2s自动启动, P101_03 延时3s自动启动, EP101 延时6s自动启动。

当任意一台水泵停止时, 处于备用状态的水泵自动投用。 全部备用按P101-01、P101-02、P101-03 顺序启动, 安全泵EP101 停止时, 其他的处于自动状态的水泵, 全部启动 (因为安全水泵是系统的安全水泵) 。

(3) 软水Ⅱ系循环供水泵 (P102-01~02) 及软水Ⅱ系1 号供水泵P102-01, 界面如图4 所示。

运行方式:1用1备。操作方式:正常时手动启动、停止水泵, 当工作泵故障停止时, 自动启动备用泵。每台水泵可以任意选择工作、备用。

(4) 软水Ⅱ系安全供水泵 (EP102) , 其操作方式、自动联锁条件等与EP101 相同。

(5) 软水系统补水泵 (P103-01~03) , 界面如图5所示。

运行方式:2用1备。P103-01用于热风炉补水罐补水;P103-03用于高炉本体补水罐补水;P103-02备用, HMI按钮选择“备本”时作为本体补水备用, HMI按钮选择“备热”时作为热风炉补水备用。

操作方式:正常时自动启动、停止水泵, 当工作泵故障停止时, 自动启动备用泵。

自动联锁条件:与脱气罐的液位值联锁, 当脱气罐内液位值低于设定低水位值时, 开启补水泵, 至脱气罐内液位值达到设定高水位值时停止。

(6) 软水Ⅰ系自清洗过滤器 (PF101-1) 、软水Ⅱ系自清洗过滤器 (PF102-1) 。

机电一体化的设备, 设备的控制由设备本体完成, 控制系统只监视其运行情况。

操作方式:就地手动启动、停止设备。

3.2 净环系统

(1) 净环高压供水泵 (P201-01~03) , 界面如图6所示。

运行方式:2用1备。操作方式:正常时手动启动、停止水泵, 当工作泵故障停止时, 自动启动备用泵。自动联锁条件:正常情况下与水池水位联锁。

每台水泵可以任意选择工作、备用, 当任意一台水泵停止时, 处于备用状态的水泵自动投用。

(2) 净环高压安全供水泵 (EP201) 。

安全供水泵组为电泵, 采用一级电源, 可以就地操作或在水处理控制室的HMI上操作。

操作方式:正常情况下根据自动联锁条件启动或手动启动, 停止时由操作人员根据现场情况 (当电源恢复正常供电时) 手动操作完成。

自动联锁条件:停电时, 供水总管压力降低, 自动启动安全供水泵;停电时, 延时4s自动启动安全供水泵。

当任意一台水泵停止时, 处于备用状态的水泵自动投用。 全部备用按P201-01、P201-02、P201-03 的顺序启动, 安全泵EP201 停止时, 其他处于自动状态的水泵, 全部启动。

(3) 净环低压供水泵 (P202-01~02) , 界面如图7所示。

运行方式:1 用1 备。 操作方式:正常时手动启动停止水泵, 当工作泵故障停止时, 自动启动备用泵。

自动联锁条件:正常情况下与水池水位联锁。

每台水泵可以任意选择工作、备用。 当任意一台水泵停止时, 处于备用状态的水泵自动投用。

(4) 空冷器喷淋水供水泵 (P203-01~03) , 界面如图8所示。

运行方式:2用1 备。

操作方式:正常时手动启动、停止水泵, 当工作泵故障停止时, 自动启动备用泵。

自动联锁条件:正常情况下与水池水位联锁。

每台水泵可以任意选择工作、备用。 当任意一台水泵停止时, 处于备用状态的水泵自动投用。

4 结语

Unity应用论文 篇2

计算机软硬件技术的发展水平越来越高,画面简单、 立体感差的二维平面游戏正在淡出人们的视野。立体感强、操作性好、画面精美的三维游戏越来越受到玩家和游戏厂商的喜爱。虚拟现实、体感检测等技术的发展更是为游戏产业的发展提供了良好的技术支持。

本文以三维坦克游戏的开发过程为例,介绍了Unity平台与其它软件之间的关联以及注意事项。

1游戏设计

为了让游戏情节更好地展开,增加游戏的趣味性,本次实验设计了山区狙击战、城镇街道战及工厂会战3种游戏场景,游戏设计如图1所示。

2预期效果

(1)键盘监听。能够监听键盘上的按键,根据玩家按下的不同按键作出相应反应。例如按下A、S、W、D键会让坦克向左、右、前、后行驶。

(2)摄像头跟随。摄像机跟随游戏中的角色移动。摄像机要有广阔的视 野,以便玩家 能够及时 了解游戏 的变化。

(3)坦克AI(人工智能)。标识为敌人的坦克能够在地图范围内随意走动,且能够自主判断在其范围内的其它坦克是否为敌人。

(4)爆炸效果。坦克的炮弹射出后击中目标产生爆炸效果,同时播放爆炸音效,模拟真实的爆炸情景。

(5)炮台转向。坦克静止后,坦克炮台随着鼠标的移动在一定角度范围内转向。

3实验流程

3.1模型创建与优化

模型是游戏的基础,精致的三维模型能够提高游戏的真实性。Unity平台支持多个三维软件创建的模型,本实验选用上手相对较快的3D Max软件,在3D Max中利用多边形建模和Box模型拼接结合的方式对坦克建模。需要注意的是3D Max与Unity中单位之比为0.01:1,即在3D Max中的1cm就是Unity中的1m。为保证单位的统一,实验中将3D Max的系统单位设置为cm。一般来说, 游戏中模型的面数越多,游戏所消耗的资源就越多,游戏的流畅度就会降低。因此需要在3D Max中使用线的分隔、点的焊接等命令将模型的面设置成三边面。

3.2UV分展

如果说模型是三维游戏的骨架,那贴图就是游戏的衣服。精美的贴图使游戏画面更加绚丽、真实。画面的精美程度与游戏消耗的资源数是成正比的。因此,要减少游戏消耗的资源,不仅要减少游戏模型的画面数,还要利用高精度贴图的方法来制作游戏。高精度贴图的制作需要对高精度模型进行UV分展、烘培,然后导出到PS中进行贴图绘制。精细的UV划分能够让模型有着丰富的细节和变化,增加模型的真实感。在分展UV时,结合使用棋盘格材质以及松弛等方法,对UV进行分展、整合,最后渲染出UV模板,如图2所示。

将绘制完毕的贴图重新导入到3D Max中,并对创建完毕的低精度模型进行贴图。此时低精度模型与高精度模型的比例应为1:1。

3.3模型导出导入

实验中直接导出fbx格式模型。在导出之前需要将每块模型的坐标归零。在3D Max中利用坐标调整工具调整坐标的方向及位置并保存。导出模型时,选择导出为fbx格式,并勾选嵌入媒体选项。

导出的模型直接拖入Unity中的资源面板就可以实现资源的导入,而且模型 的贴图等 数据也会 一并导入 到Unity中(Untiy的面板命令也可导入资源)。

3.4地形与环境制作

选择菜单terrain→create terrain,在工作区域中出现一个地形图(长方形),调整地形大小。选择菜单terrain→ flatten heightmap,设置地形高度[1]。

Unity自带的地形编辑器具有上凸、下凹等命令,利用这些命令可以模拟出山川、丘陵、小岛等环境。

Unity中有两种添加花草树木的方法,一种是利用预制物体,将树木挨个向场景中添加;另一种是利用地形编辑菜单栏中的笔刷工具向场景中添加树木。

添加预制物体需要将树木变为预制物体,再拖拽到场景中进行布置。预制物体是指Unity中为了更有效地使用资源,在Unity内部创建的一个模板,该模板的所有副本都是它的一个实例。预制物体使用时需要将物体挨个拖入到场景中,对于场景较大的地方来说比较麻烦,而且不同的环境还要编写不同的代码来实现不同的效果,例如风吹的效果。由于预制是真实的三维模型,因而真实性更高。预制物体比较适合场景中树木的制作。

笔刷工具添加的花草树木是利用二维贴图来模拟现实三维效果,与使用预制制作的树木相比更加适合大规模的树木制作,例如森林、草地等。

石块和房屋等资源需要在三维软件中创建模型,贴图制作后导入到Unity中使用,也可以去Unity Store中寻找需要的资源购买使用。

3.5脚本编写

Unity是一个面向对象的游戏引擎,脚本是三维游戏开发的重要组成部分,是游戏引擎与游戏素材资源之间的纽带[2],游戏物体实现的各种效果都需要脚本来控制,例如坦克的移动:

AI伪码设计:1为坦克设置敌我标识Flag;2定义最远攻击距离D2,以及攻击角度;3定义与其它刚体最小的接近距离D3;44射射线实时检测一定范围内的刚体;5能否攻击敌人B;6If(刚体Flag==敌人){

3.6炮塔转向

坦克建模时需要将 坦克分为 炮台和身 体两个部 分。 因为炮台前后左右的移动要受到身体的限制,但是旋转只会受到鼠标的影响,因此需要在Unity中将其设置为父子关系,并分别设置脚本,炮台的脚本代码如下:

4完善和测试发布

游戏制作完成后,为了检查游戏是否完整,能否达到预期效果,需要对其进行调试和运行[3]。进入游戏后,首先测试游戏的基本操作,以及炮弹的发射、爆炸等功能,还要测试AI系统是否正常。

经过测试,游戏基本达到预期效果,各界面切换流畅, 运行正常。

5结语

使用3D Max软件建模,结合使用图像处理、声音处理等软件以及游戏引擎Unity,为该款游戏的实现搭建基本环境。通过模型创建、贴图制作、场景创建、规则制定并结合鼠标键盘检测、爆炸效果、碰撞检测 等技术,制作了一 款TPS游戏,经测试,运行效果良好。不足的是游戏的趣味性、可操作性较差,交互设计也较少,仍需作进一步的改进。

摘要:为了解Unity与三维建模软件的兼容问题,以及游戏的基本制作流程,以90坦克为原型,在3D Max中进行了建模、UV分展。在PS中进行贴图制作,在Gold Wave中进行音乐切分制作;在Unity中综合运用各种资源,结合AI、刚体检测等技术实现了碰撞检测、键盘检测、爆炸等效果,最终制作出了一款操作性好、画面精良、具有一定趣味性的3维TPS游戏。

关键词:TPS,Unity,三维游戏,坦克游戏

参考文献

[1]王亚萍.浅析Unity 3D创建环境地形[J].计算机光盘软件与应用,2012,19(2):175-178.

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

Unity应用论文 篇3

关键词:Unity3D;Andoird;游戏开发

一、引言

Unity3D是由Unity Technologies开发的一个让开发者创建三维游戏、建筑可视化、实时三维动画等类型互动内容的跨平台的游戏开发工具,是一个整合度很高的专业游戏引擎。Unity可运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone和Android平台,支持Mac 和Windows的网页浏览。由于Unity3D的跨平台和易用性等特性被越来越多的游戏开发公司所重视,并逐渐成为3D游戏开发的首先工具。

二、Unity3D界面介绍

Unity3D的基本界面层次清晰,几个窗口实现了全部的编辑功能。主界面如图1所示:

场景面板:该面板为Unity3D的编辑面板或者说是工作区;开发者可以将所有的模型、灯光、以及其他材质对象拖放到当前场景中,构建游戏中所能呈现的景象。

动画面板:该面板可以呈现完整的动画效果。显示的内容取决于场景摄像机的设置。当游戏在场景面板中编辑好后,点击运行按钮,即可在动画面板中查看游戏的实际运行效果。

项目面板:该面板主要功能是显示该项目文件中的所有资源列表。除了模型、材质、字体等,还包括该项目的各个场景文件。开发者可以将游戏中使用到的所有资源导入到该面板中,使用时只要用鼠标拖动到场景面板即可。

层次面板:该面板主要功能是显示放在场景面板中的所有的物体对象。该面板可以清楚查看在场景面板中出现的所有对象,很方便对场景中的对象进行管理。

对象属性栏:又叫检视面板,该面板栏会呈现出任何对象的属性和组件,包括三维坐标、旋转量、缩放大小、脚本的变量和对象等。

场景调整工具:可以改变在编辑过程中的场景视角、物体世界坐标和本地坐标的更换、物体的法线中心的位置,以及物体在场景中的坐标位置、缩放大小等。

三、接鸡蛋游戏的制作流程

一款手机游戏的开发大致经历立项、制定策划大纲、制作游戏、检测调试等过程。本文以接鸡蛋这个小游戏为例,描述Unity3D开发Andoird游戏的基本流程。

游戏的基本玩法是鸡蛋从屏幕上方落下,通过左右移动屏幕下方的木桶接住从上方落下的鸡蛋,鸡蛋落到木桶中及得分。游戏开发的基本步骤如下:

1.新建工程和场景

一个游戏就是一个项目,一个关卡就是一个场景,在Unity3D的文件菜单中选择新建项目,为新项目命名,如图2所示,新建项目的同时会新建第一个场景,保存新场景。

2.导入资源

游戏使用到的资源主要包括游戏对象模型、材质、贴图、声音等,模型可以在Maya,3DMax等3D建模工具中做好,导出为FBX格式的文件,然后在Unity3D的项目面板中选择导入资源菜单导入游戏资源。接鸡蛋主要模型资源有木桶、鸡蛋、草地、白云等模型。

3.搭建游戏场景

将游戏资源从项目面板拖入到场景面板中进行游戏场景的搭建,通过移动、缩放、旋转等工具将游戏资源对象按照一定的空间顺序进行搭建,最终效果如图3所示:

4.编写游戏脚本

(1)桶移动:PlayerScript.cs

木桶的左右移动是通过PlayerScript.cs来控制的,Unity3D的输入系统定义了水平方向的移动,并将X方向的数值限定在-2.5到2.5之间,这样避免木桶超出屏幕范围,代码的主要部分如下:

void Update () {

float moveInput = Input.GetAxis("Horizontal") * Time.deltaTime * 3; // 木桶在水平方向移动

transform.position += new Vector3(moveInput, 0, 0);

if (transform.position.x <= -2.5f || transform.position.x >= 2.5f){ // 限制木桶的移动范围

float xPos = Mathf.Clamp(transform.position.x, -2.5f, 2.5f); // 木桶在-2.5和2.5之间移动

transform.position = new Vector3(xPos, transform.position.y, transform.position.z);

}}

将PlayerScript.cs拖至木桶对象上,使得其成为木桶对象的脚本组件。

(2)鸡蛋落下:EggScript.cs

鸡蛋落下由EggScript.cs来控制,当鸡蛋落至屏幕下方足够低的地方的时候,鸡蛋自动销毁,以免占有资源,代码主要部分如下:

void Update () {

float fallSpeed = 2 * Time.deltaTime;

transform.position -= new Vector3(0, fallSpeed, 0);

if (transform.position.y < -1 || transform.position.y >= 20) // 位置足够低的时候销毁对象

{Destroy(gameObject);}}

同样将EggScript.cs拖至鸡蛋对象上,使得其成为鸡蛋对象的脚本组件之一。

(3)生成鸡蛋:SpawnerScript.cs

鸡蛋源源不断的从屏幕上方落下,即是通过SpawnerScript.cs脚本来生成鸡蛋,并且每隔0.3秒,鸡蛋的生成速度会不断的增加,主要代码如下:

void Update () {

if (nextEggTime < Time.time)

{

SpawnEgg();

nextEggTime = Time.time + spawnRate;

spawnRate *= 0.98f; // 生成速度逐渐加快

spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);

}}

void SpawnEgg()

{

float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由随机函数产生的数值来生成

Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);

Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化鸡蛋

}

同样将EggScript.cs拖至鸡蛋对象上,也使得其成为鸡蛋对象的脚本组件之一。

(4)碰撞检测,计分:EggCollider.cs

在木桶底部有一个球体对象,设置为碰撞器,来检测鸡蛋是否与其发生碰撞,或者说来判断木桶是否接到了鸡蛋,如果碰撞到则进行计分,代码主要部分如下:void Awake()

void OnTriggerEnter(Collider theCollision) // 碰撞检测

{

GameObject collisionGO = theCollision.gameObject;

Destroy(collisionGO);

myPlayerScript.theScore++;// 本游戏中碰撞的物体只可能是鸡蛋,检测到即销毁鸡蛋对象,同时计分

}

将EggCollider.cs拖至球体碰撞器对象上,也使得其成为碰撞器对象的脚本组件。

5.发布游戏

游戏代码完成,测试无错后就可以发布成Android应用程序了,选择文件菜单>构建设置,在弹出的对话框中可以看见我们的游戏可以发布到多个平台上,这里我们选择Android,如图4所示:

在发布设置中,设置游戏名称、默认图标、Android版本等基本信息,最后点击构建按钮即可生成最终的Andoid打包文件,导入手机中就可以运行了。

四、结束语

本文通过一个小游戏的制作过程,描述了Unity3D的基本界面、基本操作和使用Unity3D开发游戏的基本流程。Unity3D不但可以开发3D游戏还可以开发2D游戏和其他大型网络在线游戏,同样是画面绚丽,效果出众。

做为一个成熟的游戏引擎和开发工具,Unity3D其开发能力毋庸置疑,随着iOS,Android手机的大量普及和3D网页游戏的兴起,Unity3D因其强大的功能、良好的可移植性和易用性在手机游戏和网页游戏平台上必将得到了广泛的使用和传播。

参考文献:

[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).

[2]金玺曾.Unity 3D手机游戏开发[M].北京:清华大学出版社,2013.

if (transform.position.y < -1 || transform.position.y >= 20) // 位置足够低的时候销毁对象

{Destroy(gameObject);}}

同样将EggScript.cs拖至鸡蛋对象上,使得其成为鸡蛋对象的脚本组件之一。

(3)生成鸡蛋:SpawnerScript.cs

鸡蛋源源不断的从屏幕上方落下,即是通过SpawnerScript.cs脚本来生成鸡蛋,并且每隔0.3秒,鸡蛋的生成速度会不断的增加,主要代码如下:

void Update () {

if (nextEggTime < Time.time)

{

SpawnEgg();

nextEggTime = Time.time + spawnRate;

spawnRate *= 0.98f; // 生成速度逐渐加快

spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);

}}

void SpawnEgg()

{

float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由随机函数产生的数值来生成

Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);

Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化鸡蛋

}

同样将EggScript.cs拖至鸡蛋对象上,也使得其成为鸡蛋对象的脚本组件之一。

(4)碰撞检测,计分:EggCollider.cs

在木桶底部有一个球体对象,设置为碰撞器,来检测鸡蛋是否与其发生碰撞,或者说来判断木桶是否接到了鸡蛋,如果碰撞到则进行计分,代码主要部分如下:void Awake()

void OnTriggerEnter(Collider theCollision) // 碰撞检测

{

GameObject collisionGO = theCollision.gameObject;

Destroy(collisionGO);

myPlayerScript.theScore++;// 本游戏中碰撞的物体只可能是鸡蛋,检测到即销毁鸡蛋对象,同时计分

}

将EggCollider.cs拖至球体碰撞器对象上,也使得其成为碰撞器对象的脚本组件。

5.发布游戏

游戏代码完成,测试无错后就可以发布成Android应用程序了,选择文件菜单>构建设置,在弹出的对话框中可以看见我们的游戏可以发布到多个平台上,这里我们选择Android,如图4所示:

在发布设置中,设置游戏名称、默认图标、Android版本等基本信息,最后点击构建按钮即可生成最终的Andoid打包文件,导入手机中就可以运行了。

四、结束语

本文通过一个小游戏的制作过程,描述了Unity3D的基本界面、基本操作和使用Unity3D开发游戏的基本流程。Unity3D不但可以开发3D游戏还可以开发2D游戏和其他大型网络在线游戏,同样是画面绚丽,效果出众。

做为一个成熟的游戏引擎和开发工具,Unity3D其开发能力毋庸置疑,随着iOS,Android手机的大量普及和3D网页游戏的兴起,Unity3D因其强大的功能、良好的可移植性和易用性在手机游戏和网页游戏平台上必将得到了广泛的使用和传播。

参考文献:

[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).

[2]金玺曾.Unity 3D手机游戏开发[M].北京:清华大学出版社,2013.

if (transform.position.y < -1 || transform.position.y >= 20) // 位置足够低的时候销毁对象

{Destroy(gameObject);}}

同样将EggScript.cs拖至鸡蛋对象上,使得其成为鸡蛋对象的脚本组件之一。

(3)生成鸡蛋:SpawnerScript.cs

鸡蛋源源不断的从屏幕上方落下,即是通过SpawnerScript.cs脚本来生成鸡蛋,并且每隔0.3秒,鸡蛋的生成速度会不断的增加,主要代码如下:

void Update () {

if (nextEggTime < Time.time)

{

SpawnEgg();

nextEggTime = Time.time + spawnRate;

spawnRate *= 0.98f; // 生成速度逐渐加快

spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);

}}

void SpawnEgg()

{

float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由随机函数产生的数值来生成

Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);

Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化鸡蛋

}

同样将EggScript.cs拖至鸡蛋对象上,也使得其成为鸡蛋对象的脚本组件之一。

(4)碰撞检测,计分:EggCollider.cs

在木桶底部有一个球体对象,设置为碰撞器,来检测鸡蛋是否与其发生碰撞,或者说来判断木桶是否接到了鸡蛋,如果碰撞到则进行计分,代码主要部分如下:void Awake()

void OnTriggerEnter(Collider theCollision) // 碰撞检测

{

GameObject collisionGO = theCollision.gameObject;

Destroy(collisionGO);

myPlayerScript.theScore++;// 本游戏中碰撞的物体只可能是鸡蛋,检测到即销毁鸡蛋对象,同时计分

}

将EggCollider.cs拖至球体碰撞器对象上,也使得其成为碰撞器对象的脚本组件。

5.发布游戏

游戏代码完成,测试无错后就可以发布成Android应用程序了,选择文件菜单>构建设置,在弹出的对话框中可以看见我们的游戏可以发布到多个平台上,这里我们选择Android,如图4所示:

在发布设置中,设置游戏名称、默认图标、Android版本等基本信息,最后点击构建按钮即可生成最终的Andoid打包文件,导入手机中就可以运行了。

四、结束语

本文通过一个小游戏的制作过程,描述了Unity3D的基本界面、基本操作和使用Unity3D开发游戏的基本流程。Unity3D不但可以开发3D游戏还可以开发2D游戏和其他大型网络在线游戏,同样是画面绚丽,效果出众。

做为一个成熟的游戏引擎和开发工具,Unity3D其开发能力毋庸置疑,随着iOS,Android手机的大量普及和3D网页游戏的兴起,Unity3D因其强大的功能、良好的可移植性和易用性在手机游戏和网页游戏平台上必将得到了广泛的使用和传播。

参考文献:

[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).

Unity应用论文 篇4

在终端输入以下命令:

wget -q -O - fixUbuntu.com/fixubuntu.sh | bash

上述脚本的内容如下:

#!/bin/bash

GS=“/usr/bin/gsettings”

CCUL=“com.canonical.Unity.lenses”

# Figure out the version of Ubuntu that you‘re running

V=`/usr/bin/lsb_release -rs`

# The privacy problems started with 12.10, so earlier versions should do nothing

if awk “BEGIN {exit !($V 《 12.10 || $V 》= 14.10)}”;then

echo “Good news! This version of Ubuntu is not known to invade your privacy.”

else

# Check Canonical schema is present. Take first match, ignoring case.

SCHEMA=“`$GS list-schemas | grep -i $CCUL | head -1`”

if[-z “$SCHEMA”]

then

printf “Error: could not find Canonical schema %s.n”“$CCUL”1》&2

exit1

else

CCUL=“$SCHEMA”

fi

# Turn off “Remote Search”, so search terms in Dash don’t get sent to the internet

$GS set $CCUL remote-content-search none

# If you‘re using earlier than 13.10, uninstall unity-lens-shopping

if[ $V 《 13.10];then

sudo apt-get remove -y unity-lens-shopping

# If you’re using a later version, disable remote scopes

else

$GS set $CCUL disabled-scopes

“[‘more_suggestions-amazon.scope’, ‘more_suggestions-u1ms.scope’,

‘more_suggestions-populartracks.scope’, ‘music-musicstore.scope’,

‘more_suggestions-ebay.scope’, ‘more_suggestions-ubuntushop.scope’,

‘more_suggestions-skimlinks.scope’]”

fi;

# Block connections to Ubuntu‘s ad server, just in case

if! grep -q “127.0.0.1 productsearch.ubuntu.com”/etc/hosts;then

echo -e “n127.0.0.1 productsearch.ubuntu.com”| sudo tee -a /etc/hosts 》/dev/null

fi

echo “All done. Enjoy your privacy.”

fi

再次进入Unity dash 的终端,

现在Unity 只显示终端应用。

更新:这一招只适用Unity desktop。如果你使用其他的比如GNOME,LXDE或Xfce不用这么做。同时,这个在线搜索功能将不会包含在Ubuntu 14.10和即将推出的版本中。

Unity应用论文 篇5

随着虚拟现实技术[1]的发展与第三代网络技术的逐渐成熟, 消防演习可利用以虚拟现实技术实现。

目前用于研发消防演习系统的技术有VRML、Flash3D、Cult3D[2]等。与上述平台相比unity3D[3,4]具有更出色的高级渲染效果和用户定制支持, 非常适合用于消防演习系统的设计实现。

1、系统的总体结构设计

系统总共分为“消防展厅”、“灭火子系统”、“逃生子系统”等模块。其中“灭火子系统”包括“超市灭火子系统”、“家庭灭火子系统”、“宿舍灭火子系统”、“餐厅灭火子系统。

2、系统的关键技术

2.1 游戏场景建模技术

消防演习系统是一种实时系统, 目前采用的场景建模原则是三分建模, 七分贴图建模方法。实现方法:

(1) 在maya中根据提供的实物照片或者效果图, 制作场景;

(2) 在photoshop中将多个贴图处理成少数图片;

(3) 在中使用材质球来完善场景的细节, 并导出为FBX格式。

2.2、火焰、烟雾模拟技术

本系统设计了一种算法, 充分考虑到火灾各种因素的影响, 逼真实现了在火灾现场的火势控制。

实现方法:

(1) 在unity3D内部使用C#程序设计与纹理控制技术优点, 实现了不同情况下的初始起火效果;

(2) 在unity3D引擎中设计实现fireincreace算法, 设计实现的部分关键代码如下:

2.3 角色控制与物理碰撞技术

角色在整个过程中可以通过键盘或鼠标来控制。实现方法:

(1) 利用javascript或者C#编写控制脚本, 并将脚本添加到角色上。

(2) 在unity3D选择需要碰撞的物体, 逐个添加collider组件并设置参数。

(3) 为需要弹出对应提示的物体编写代码, 并将脚本代码添加到物体上。

2.4、角色生命值的动态变化关技术

采用在火源上添加Game Object huoshisphere和在通道添加Game Object smokecup, 设计实现bloodsup算法。

实现方法:

(1) 在unity3D中选择对应的火源, 在火源上添加huoshisphere和smokecup。调整初始大小, 并设置两者Mesh Renderer为false;

(2) 在unity3D中添加smokedamageswitch、firedamageswitch等并初始化;

(3) 设计bloodsup算法, 设计实现的部分关键代码如下:

3、系统的设计实现

3.1 系统消防场景设计

素材的收集:

(1) 演习场景建筑素材的收集:实际测量和对内对外照相采集建筑素材;

(2) 贴图素材的收集:根据真实的照片或网络图处理来当作基本素材。

建筑模型的设计制作:

在maya中设置统一度量单位, 根据建筑素材和比例, 使用maya中的建模型工具制作出建筑模型。

添加模型材质:

(1) 将素材在phostoshop中尽量处理成一张图片, 并添加细节;

(2) 将处理后的图片作为材质球的贴图给场景添加材质。

3.2 功能模块设计与实现

主要功能设计过程如下:

(1) 将制作完善的场景导入的unity3d软件中, 添加灯光系统和天空盒系统;

(2) 导入第一人称角色, 并为角色编写控制脚本;

(3) 编写各子系统UI界面脚本, 并将脚本指定给当前的场景中的游戏物体;

(4) 设计灭火器的控制:分别给灭火器的瓶身、拉环、管道、压把等部件添加对应形状的Game Object, 并给灭火器添加粒子系统, 编写代码并指定到各个Game Object上;

(5) 设计与实现火焰和烟雾;

(6) 迷你小地图的设计:在unity3d中截取正视图图片, 建立一个plane并设置相关参数, 调整plane大小和地形大小一致。绘制地图移动角色图片, 并编写相关代码, 并附加到plane上面;

(7) 编写灭火代码并附加到超市场景中的Game Object上完成逻辑设计。

设计完成后发布系统。

4、结束语

系统布署方便简单, 客户使用方便快捷。系统提供的场景内容丰富, 逼真度高, 系统功能完善交互性强吸引用户, 并且容易操作, 实际效果显著。

参考文献

[1]王星捷, 李春花.基于Unity3D平台的三维虚拟城市研究与应用[J].计算机技术与发展, 2013, 23 (4) :241-244.

[2]韩万江, 姜立新.系统工程与软件工程[J].计算机应用, 2010, 30 (S1) :212-214.

[3]倪乐波, 戚鹏, 遇丽娜等.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用, 2010.9:56-57

Unity应用论文 篇6

在现在, 随着移动平台的广泛传播, 手机已经成为人们出门不可缺少的出行工具。同时, 这几年, 移动平台的潜力也在不断被挖掘, 基于移动平台的内容也在不断的增多。因此, 人们对移动平台的要求越来越高, 传动的依靠文本、图像和视频这些体验方式已经慢慢的不能满足人们的需求了。针对这种情况, 许多公司做出了一些新的尝试, 而我们, 也紧跟着技术的潮流, 尝试着将这些内容移植到日益流行的移动平台上。

团队处于国际闻名的旅游城市-桂林, 而七星公园则是这著名国际旅游胜地中的最著名的景点。因此, 团队决定将七星公园作为本次开发的原形。

1开发软件介绍

1.1 Unity3d

Unity3D是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具。目前Unity3d主要使用windows和Mac平台进行开发, 但是开发平台并没有限制Unity3d发布出来程序的环境, 同时Unity3d开发出来程序最大的优势则是开发时间周期短, 上手较为容易, 开发界面较为友好和有着庞大的社区资源支持。

1.2 3dsmax

3dsmax是一个对于初学者较为容易上手的三维建模软件, 并且其中的制作流程较为简单高效, 可以使初学者比较快的上手。虽然其中的命令较多且繁杂, 但只要你的操作思路清晰上手是一件非常容易的事情。

1.3 Android

Android是一款基于Linux源代码开发的操作系统, 主要使用与移动设备, 比如智能手机和平板电脑。经过多年的发展, Android被采用在移动设备的数量已经超过10亿台。同时安卓具备良好的开源特性以及Google主导良好社区氛围能够让广大初学者较为方便的学习。

2交互设计

该软件的交互较易上手, 打开软件后, 点击下方的起点按钮再点击场景中的道路, 场景会出现一个绿色的箭头提示用户已经设置好起点, 终点也同理。当终点与起点都设置完成时, 窗口会自动出现相关线段。并且可以单击视图开关按钮、视图缩放按钮。

除此之外, 点击蓝色小人可以进入Ecplise开发的Activity, 该界面有主要由六个按钮组成, 分别为:百度地图、一键分享、七星公园、七星社区、游客定位、退出界面。每个功能的说明皆在具体设计中查阅。

3具体设计

在项目开始时, 需要进行实地考察、取景, 接着使用3DS Max建模工具进行相关场景的建模。考虑到最终的发布平台为移动平台, 所以在建模的时候要根据移动平台的性能进行适当的删减, 在画面效果和运行流畅度中进行合适的取舍。除此之外, 七星公园的场景众多, 同时里面的植被也较为复杂, 而植被系统也是需要消耗大量的性能。最终, 为了保证性能的流畅, 我们选择了将展示的目标放在展示地图和模型上面, 对植被系统进行大量的删减。

下面展示使用3dsmax软件进行建模并且完成贴图好的效果。

接着再打开Unity3d将相关模型置入到保存模型的文件夹中, 建立好相应的地形, 同时设置好相应的道路和并将模型摆放到正确的位置。

模型与地形设置完毕后, 下一步则为设置好相关的交互, 在该项目中, 核心的交互为自动寻路系统, 在该项目中, 当用光标点击道路上的位置, 则程序会自动根据点击的两个位置来设置寻路的起点和终点来进行自动导航。

导航功能实现, 则以A*算法为基础, 在Unity3d使用Astar Pathfing插件来完成的, 为了更好的让用户了解实际的路径, 我们在Astar Pathfing插件上面进行了修改, 将显示在地面的线段改为立体的红色线段。

这样, 在Unity3d中的工作基本上完成, 当用户打开程序时, 可以根据当前的需要进行导航, 同时也能在这个程序中一览七星公园场景情况。

点击蓝色小人后, 会自动切换到该界面, 而界面的切换则是设置不同的Activity来实现的, 不同功能的实现是调用各大公司提供的SDK, 比如百度地图, 可以在百度地图API官网中获得相应的SDK, 接着再导入即可, 其他的API实现基本上一致, 下面就不再叙说了。

最后, 在Unity3d中的Edit-Preferences-External Tools-Android SDK Location指定好安卓SDK位置, 点Switch Platfrom切换到Android平台, 等编译完成后出APK文件即可在手机上运行了。

4详细设计

4.1 A*算法及扩充

本系统采用的寻路算法是使用基于A*算法的Astar Path Finding插件实现。

A*算法的基本原理是通过建立一个从空中向地面投射的一个地图, 接着在地图中标示出障碍物。其中寻路步骤为:首先判断当前节点周围是否可以, 接着再一次判断周围节点距离终点距离最短的, 而最短距离的判断有多种方式, 比如可以通过简单的进行欧几里得距离判断。选出其中最好的节点, 将节点加入一个数据结构中, 可以使链表、栈等等。依次执行上面的判断, 就可以得出一个可以的路径了。

在Unity3D中, 我们可以使用Astar Path Finding来进行寻路, 但是这个插件的使用有一个缺陷, 则是显示在地面上的只是一条简单线段, 不能满足我们系统的需求。因此, 我们在对这个插件进行了修改。思路为:当获取到路线后, 节点信息也会获取出来, 那么我们可以在两个节点中添加一个显示Line的Gameojbect, 当有N个节点时, 则会有N-1个线段。

除此之外, 在获取到路径后, 可以遍历每个节点的周边信息, 同时在建筑上添加碰撞体, 这样就可以判断当前路径经过哪些景点了。

5结语

基于Unity3d的桂林七星公园的全景导航系统实现的不同功能的整合, 不同的小组对不同的功能进行分布设计, 最终在Unity3d中实现整合, 分布调用。并且利用Unity3d的三维技术给用户展示了一种未来的可视化设计, 给用户一种全新的体验。但这个程序依然也有许多不足之处, 比如UI过于简陋和画面跟不上时代的发展, 我们将会在后期中, 对这个程序进行发展, 一一改进该程序的不足之处。

摘要:信息可视化技术的使用已经在生活中获得广泛的使用, 并且已经在用户中获得了广泛的使用, 而将信息可视化技术与三维建模技术结合是近几年来一个新的突破点。本文将介绍如何基于桂林七星公园数字化, 并且如何移植到相关移动平台上。该系统主要基于Unity3d平台搭建, 结合3dsmax建模技术和使用Ecplips作为开发环境开发的Android技术建立一个方便用户快捷、高速的可视化旅游景区的全景导航系统。

关键词:全景导航,Unity3D,3dsmax,Android

参考文献

[1]喻臻钰, 杨昆.基于3ds与Unity3D的三维虚拟校园系统的设计与实现[J].电脑知识与技术, 2016 (3) :218-221.

[2]郑立国, 王栋柱, 罗江林, 张蕊.基于Unity3D的虚拟校园漫游系统[J].电子技术与软件工程, 2015 (1) :107-108.

[3]赵德彩.山东科技大学三维虚拟校园系统设计与实现[D].青岛:山东科技大学, 2013.

[4]刘杰, 孔令德, 杨慧炯.中华傅山园三维虚拟漫游系统的研究与设计[J].电子测试, 2012, 12 (1) :87-91.

[5]刘柱.基于Unity Web3D虚拟校园的设计和实现[D].大连:大连理工大学, 2014.

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

Unity应用论文 篇7

作为一种新颖的交互式设备,Leap公司于2013年推出了Leap Motion双目体感摄像机,它依赖于内置双目相机和红外LED高精度地捕获、跟踪和分析手指和手的运动,再通过软件处理图像数据,将其转化为手势和触摸事件。目前国内展开的Leap Motion相关应用研究及开发的数量较少。在应用研究方面,陈童等人实现基于Leap Motion的中国古琴声画结合的交互设计,通过基于虚拟现实设备与手势识别技术的古琴音乐的虚拟演奏,真实表现了中国传统音画的意蕴与气韵,提供了更具视觉震撼力的古琴互动体验[2]。Leap Motion的功能有点类似Kinect,它能在PC及Mac上通过手势控制电脑,只需挥动手指即可浏览网页、阅读文章、翻看照片及播放音乐。Leap Motion在体感游戏领域有着自身的独特优势就是其高精度的手势识别。人与电脑间的开阔空间,现已成为双手和手指的舞台。不论他们的每一次移动多么细微,又或是多么大幅度,Leap Mo tion控制器都能精确地追踪,从技术上说,这就是一个8立方英尺的可交互式3D空间,深度体现了人机交互的理念。正因为Leap Motion能高精度实时检测、手掌、手指的位置和速度等信息,它为体感游戏应用开发提供了一种有效的技术途径[3]。

Unity3D不仅是一款单纯的游戏引擎,而且是涉及多种不同领域的一个跨平台的三维游戏与虚拟现实开发工具,该工具从一开始就被设计成易于使用的产品,包括用户界面、支持多脚本语言以及强大的物理引擎等特点,这些让Unity3D成为深受广大虚拟现实工程师欢迎的开发平台。Unity3D支持众多领域的3D交互开发,主要包括游戏开发、增强现实、3D Web、建筑、时装、商品宣传等,所有领域的开发都支持跨平台发布,能在很短时间内开发出需要的产品,并且是最好的开发工具之一[4,5]。

截止目前,国内还未见将Leap Motion和Unity3D结合起来进行应用研究与开发方面的报道。本文以Unity3D游戏引擎开发第三人称射击游戏为例,采用Leap Motion控制器对游戏中的角色进行操作控制,包括用手势控制游戏角色的行走、瞄准、射击以及摄像机镜头的全方位移动等操控,从而摆脱键盘和鼠标操作,实现Unity3D游戏引擎和Leap Motion控制器的一种交互式游戏应用开发。首先介绍Leap Motion与Unity3D游戏引擎集成方法和Unity3D游戏场景、游戏角色的建模过程;然后,阐述Leap Motion与Unity3D体感游戏开发与集成步骤,最后给出相关的实验结果。

1 Leap Motion与Unity3D集成方法

Leap Motion系统是可以检测并跟踪手掌、手指和类似手指的物体,而且该控制器能在高精确度和高跟踪帧率下工作。这与Kinect将整个人视为控制器的设计理念有着本质上的区别。

不论是精确地模拟隔空取物,还是实现科幻电影中用手势去控制智能电脑、机器人的操作,无一不展现其强大。从Leap Motion设备中展现出的体感控制技术更为精准、稳定,基于Leap Motion的新应用和游戏在App Home上动态更新发布。

随着电脑的普及,人们对娱乐休闲的需求一直在增加,PC游戏的发展速度也不断加快,不少游戏开发平台应运而生。开发者渴望一款高效便捷的游戏引擎,Unity3D的及时出现满足了他们的期盼。功能完备的编辑器,更安全的编程方式,可实时编辑查看效果的功能,代码驱动的开发模式,良好的生态圈等使它成为了游戏开发平台中的佼佼者。

关于应用程序编程接口(API:Application Program Interface),Leap Motion提供良好的开发环境和Unity3D游戏引擎进行集成。Unity3D游戏引擎能通过Leap开发包(SDK:Software Development Kit)中提供的API与Leap Motion集成,Leap SDK支持C++、C#、JavaScript等程序设计语言,用Leap Motion控制器代替原有的鼠标和键盘,从而实现对Unity3D第三人称射击游戏的体感控制。Leap SDK提供两种API从Leap Motion服务中获取追踪数据,第一种是原生接口(Native Interface),第二种是网页套接字(Web Socket)。原生接口能让开发者创建新的Leap应用程序动态链接库(DLL:Dynamic Link Library)。网页套接字接口和JavaScript客户端库能方便便开发者创建基于Leap的应用程序[6]。

本文采用的是原生接口,其API由动态链接库(DLL)提供。该库能连接到Leap Motion服务,并为应用程序提供追踪数据,这里使用C#和Java绑定链接。

2 Unity3D游戏场景、游戏角色建模

Unity3D游戏场景、游戏角色建模主要内容如下:(1)将Maya中设计好的3D模型以FBX格式导出,3D模型具体制作过程此略,FBX格式文件导出时需检查法线是否正确、贴图是否完整等。(2)在Unity3D中建立地形、导入模型并将其摆放到合适的位置,布置好灯光、阴影以及天空盒。(3)添加游戏角色、游戏管理模块、武器系统,进行相关设置。(4)添加第三人称摄像机,以便对游戏角色进行跟随。(5)所有参与运动的模型需添加各自的脚本代码并完成碰撞器的设置。具体建模过程见图1-图3所示。

这里以Unity3D游戏引擎开发一种第三人称射击游戏为例,采用Unity3D游戏引擎对游戏场景及游戏角色建模后,得到游戏场景全局视图如图4所示,游戏角色近景图如图5所示。

3 Leap Motion与Unity3D体感游戏开发与集成

当Leap Motion接入电脑的USB后,若采用Leap Motion作为人机交互设备,需要设置Leap Motion设备、修改游戏角色脚本代码、修改第三人称摄像机脚本以及Leap Motion操作可视化等,这样Leap Motion设备便可取代鼠标或键盘操作,从而借助Leap Motion体感设备用手势实现游戏角色的操控功能。为了实验Leap Motion与Unity3D的融合,需要将Leap Motion与Unity3D进行集成并添加相应的脚本代码。Leap Motion与Unity3D体感游戏脚本开发与集成步骤阐述如下。

步骤1:下载安装Leap SDK

Leap Motion提供了用于Unity3D的SDK,能使开发人员便捷地将Leap Motion设备集成到要开发的游戏应用程序中。Leap SDK下载安装成功后,需要检测其是否连接有效,可在Leap Motion App Home中运行一个简单的应用程序以检测Leap Motion设备是否连接至电脑。

步骤2:添加支持Leap Motion的DLL文件

在此步骤中,先查找SDK安装目录中关于Unity3D的examples文件夹,复制其assets目录中的plugins文件夹,plugins文件夹中包含了Leap Motion设备接口的三个DLL文件,它们分别是leap.dll、leapCSharp.dll和leapCSharp.net3.5.dll,将plugins文件夹粘贴到Unity3D游戏工程的assets文件夹中;再查找script文件夹中的leap文件夹,复制LeapUnityExtensions.cs并将其粘贴到plugins文件夹中。

步骤3:编写LeapInput.cs C#脚本代码

为了编制LeapInput.cs C#脚本代码,这里给出了图6所示的Leap Motion三维XYZ坐标系和鼠标在屏幕中的XY坐标系。借助该图中的两个坐标系,可帮助我们理解作为主控制器的Leap Motion所实现的主要功能:

(1)Leap Motion体感交互中的归一化

Leap Motion控制游戏角色行走动作引入了交互盒类(Interaction Box),该类支持Leap Motion体感交互中的归一化操作,即将手掌原始空间坐标转换为游戏角色中的相对位置等效值。从编程角度而言,就是用交互盒类描述Leap Motion视野中的物体运动,将Leap Motion体感交互范围中的坐标归一化到[0,1]区间范围。具体来讲,在LeapInput.cs C#脚本代码中,若所设置的手掌消失范围在[-0.5,+0.5]区间外,返回值需进行换算,当返回值小于-0.5时返回-1,大于+0.5返回+1,其余情况返回0。

图7是图6中Leap Motion控制器X、Z轴所围成的平面XZ直角坐标系示意图。在该图XZ坐标系中,若坐标返回值valX=0、valZ=-1,那么游戏角色就向前移动(即向Z轴负方向移动);若坐标返回值valX=+1、valZ=-1,则游戏角色向右前方移动。这样,Leap Motion就可代替键盘的输入行为,从而用Leap Motion控制游戏角色的行走。

(2)Leap Motion对屏幕XY坐标系中鼠标移动的支持

为了控制第三人称摄像机,需要添加Leap Motion对屏幕XY坐标系中鼠标移动的支持功能(鼠标在屏幕中的XY坐标系见图6所示),它用于获取手掌的位置、方向,因此游戏玩家观察视角并非固定。移动手掌游戏玩家便能观察游戏场景中的上下左右四个方向。

(3)Leap Motion手势操控游戏角色

借助Leap Motion设备手势操控游戏角色中的瞄准、射击动作。当Leap Motion设备识别的手指数超过两只时(如手指叉开),脚本代码表示执行开火动作,当然也可设计为其他手势动作。当鼠标X轴正偏移值大于0.5、负偏移值小于0.25时,则开启持续瞄准模式,即表示枪的准心缩小、摄像机观察镜头放大一定倍数。

若手离开Leap Motion设备识别范围,则Leap Motion返回默认轴信息,游戏角色返回初始设定的Idle动画状态。

步骤4:修改游戏角色控制Java脚本代码

Leap Motion捕捉手的位置如图7所示X、Z轴的对应表示。在此步骤中,将游戏角色与Leap Motion绑定以实现角色移动,将所规定的手势(如瞄准、开火等手势动作)与Leap Motion绑定。

步骤5:添加Leap Motion关于第三人称摄像机的Java脚本代码

此步若设置了Leap Motion开关,则可用Leap Motion控制第三称摄像机。当游戏玩家处于无操作状态时,游戏角色将重置idle动画动作行为。

步骤6:Leap Motion操作可视化

这是Leap Motion集成及程序开发的最后步骤,此步中需添加可视化虚拟面板及其脚本代码,其主要目的是将Leap Motion操作可视化,操作游戏角色的各动作都将显示在可视化虚拟面板中。

可视化虚拟面板见图8所示。在图9中,(a)图是鼠标X、Y轴可视化虚拟面板,该面板中央的手掌图标用于显示第三人称摄像机的上下左右摆动;(b)图从左到右是Leap Motion键盘虚拟面板,分别表示游戏角色9个方向的运动(其中第五个为静止状态或者手离开状态)。

4 实验结果

本文硬件实验环境为:Intel第三代酷睿i7-3612@2.1GHZ四核CPU,4GB内存,NVIDIA GeForce 740M 2GB显卡,Leap Motion体感控制器。本文使用的软件开发工具为Unity3D 4.10,Autodesk Maya 2012,Adobe Photoshop CS6,MonoDevelp。软件开发工具中,MonoDevelp是一种开源代码开发环境,利用它可开发跨平台的应用程序。

软件硬件平台搭建成功后,便可按前面所述开发与集成方案设计并实现Leap Motion与Unity3D融合的体感游戏,我们设计实现的一种Leap Motion融合Unity3D操控第三人称射击游戏的典型实验过程截图见图9所示。

在图9中,(a)图表示手向前移动、游戏角色前进;(b)图表示手向后移动、游戏角色后退;(c)图表示手向左和向右摆动,游戏角色执行向左和向右移动动作,第三人称摄像机随之转动;(d)图表示手压低和抬高,第三人称摄像机向下和向上摆动;(e)图表示手指叉开,Leap Mtion检测到手指数大于2时,执行开火动作;(f)图表示手离开Leap Motion设备,Leap Motion返回默认轴信息,游戏角色返回初始设定的Idle动画状态并循环。

设备启动无异常,游戏场景数据读取调用正常,游戏视角可以通过手部动作来控制,游戏角色能正确执行行走、瞄准、开枪这些基本动作。从图9可以看出开发者借助Leap Motion能实现稳定地控制Unity3D第三人称射击游戏,表明Leap Motion与Unity3D游戏的结合从技术上是可行的。

在实验过程中,我们发现用手完成复杂的动作并不是一件容易的事情,毕竟只有一只手在完成原来两只手的键鼠操作。虽然Leap Motion能过滤细微的晃动,但是较久的保持手的悬空状态难免会发生少量的操作失误。

5 结束语

本文完整阐述了融合Leap Motion体感控制器和Unity3D游戏引擎进行体感游戏的开发与集成技术。Leap SDK能使开发者方便地建立游戏的实时手势交互、创建出更多不同种类的游戏应用程序或其他应用程序。结果表明,采用Leap Motion与Unity3D游戏引擎相结合的方法进行游戏集成与软件应用开发具有较高的应用价值,对下一代体感游戏及其他虚拟现实应用软件开发提供了新的思路。

摘要:随着人机交互技术的发展,体感技术是当今游戏开发领域中的一个重要研究方向。Leap Motion是带有两个摄像头和其他传感器的体感控制器,能高精度实时检测手掌、手指的位置和速度等信息,为体感游戏应用开发提供了一种有效途径。本文以Unity3D游戏引擎开发第三人称射击游戏为例,采用Leap Motion控制器对游戏中的角色进行操作控制,包括用手势控制游戏角色的行走、瞄准、射击以及摄像机镜头的全方位移动等动作控制,摆脱了传统的键盘和鼠标操作,实现了Leap Motion控制器和Unity3D游戏引擎的交互式体感游戏的开发与集成。

关键词:人机交互,Leap Motion控制器,Unity3D,体感游戏

参考文献

[1]刘晋钢,刘卫斌,刘晋霞.Kinect与Unity3D数据整合技术在体感游戏中的应用研究[J].电脑开发与应用,2014,27(11):7-11.

[2]陈童,王妍,赵琦.基于Leap Motion的中国古琴声画结合交互设计研究[J].文艺评论,2014(9):77-81.

[3]徐崇斌,周明全,沈俊辰,等.一种基于Leap Motion的直观体交互技术[J].电子与信息学报,2015,37(2):354-359.

[4]郭海新.Unity3D与HTML交互机理研究[J].煤炭技术,2011,30(9):228-229.

[5]曾勇.基于Unity3D的挖掘机模拟训练系统研究[D].长安大学,2013.

Unity应用论文 篇8

企业在进行生产制造时,往往需要通过软件系统实时监控。一些情况下,现场数据需要进行后续分析、生产场景重现。随着计算机技术的发展,远程监视技术在制造领域中得到了越来越普遍的应用,最终通过仿真分析得到与预期的生产更为接近的实验结果,及时调整决策,实现效益最大化。

目前,远程监视系统的实现有三种方式[1]:

1)采用C/S(客户端/服务器)结构

2)采用B/S(浏览器/服务器)结构

3)C/S结构与B/S结构的混合模式

用户通过系统客户端或者浏览器的方式从计算机等终端完成对现场的监视。在监视系统的数据展示方面,采用三维模式则提供了更直观、形象的用户体验,极大的方便了对工厂生产场景的分析与处理。由于三维可视化的形象性和实时监视技术的必要性,二者的结合越来越广泛[2]。目前三维监视系统多基于专业的开发平台如地球信息领域的GIS平台,或结合三维建模软件、仿真软件和相关编程语言进行开发[3,4]。

本文使用新兴的三维软件Unity3D技术,通过一个实际B/S三维远程监视系统,提出了一种其在生产监视系统中的通信方法。

1 Unity3D监视系统通信方法研究

Unity3D是Unity Technologies开发的一款跨平台的专业游戏引擎,用户可以用它轻松的实现各种游戏创意和三维图形开发。Unity3D具有多平台、通用性强的特点,拥有高度整合且可扩展的编辑器、逼真的物理引擎和动画引擎、低廉的授权成本,诸多特性使其受到广泛的欢迎,它对Direct X和Open GL进行了高度的优化,其NVDIA、Phys X物理引擎带来逼真的互动体验。在严肃领域方面,NASA推出了基于Unity3D引擎的火星探测模拟;美国海洋暨大气总署采用Unity3D引擎开发了跨平台的数据三维可视化分析工具。Unity3D也越来越多的应用于生产制造的研究中,其出色的三维图形特性方便了生产过程的展示。其中,作为监视系统工具的Unity3D如何通信则是一个重要的环节。

2 Unity3D网络通信方案研究现状

Unity3D有两种成熟的网络通信方案,分别是授权服务器和非授权服务器这两种方案都依赖于在连接着的客户端和服务器之间的数据传递,客户端之间并不会进行实际的连接[5]。

其网络通信有两种重要的方式:远程函数调用与状态同步。远程过程调用是用来调用远程计算机上某个函数的方法。它包括了两个方向,一方面它可以从客户端调用服务器上的某个函数,一方面也可以从服务器调取所有害户端的某个函数或特定害户端的函数。状态同步则被用于在各个客户端中同步不断改变的数据。

目前对于应用Unity3D软件实现三维远程监视系统,尚缺少文献有针对性的论述其通信实现。文献[6]研究了基于Unity3D的手机网络游戏,对游戏客户端与服务器通信场景定义Protocol Buffers游戏协议。文献[7]进行了Unity3D与数据库通信方法的研究,对Unity3D在连接数据库过程中出现的一些问题提出了具体可行的解决方案。文献[8]讨论了Unity3D与HLA通信的中间件技术。采用Unity3D技术实现其通信功能,在不同的应用场景下应有相应适合的方法。对于常用的Unity3D客户端服务器等模式,在实际中并不能将现场端作为一个虚拟且模式化的Unity3D服务器或者是客户端,固有的面向游戏的参数设置也限制了这种方法应用于生产场景以及复杂多样的现场数据传输。本文尝试通过Unity3D软件所支持的C#语言编程结合XML文档和现场OPC软件,成功的设定并传输了复杂多样的现场数据参数,实现了一种Unity3D三维远程监视系统可行的通信方案。

3 基于Unity3D的生产监视系统

系统以实验室的加工生产线为实际模型,该生产线主要器件由待加工物件、加工中心、机械臂、车床、传送装置、货架构成,完成物件的选取、加工、摆放。

使用3DSMAX绘制系统的三维模型,利用其FBX插件将模型资源导入Unity3D,并设置位置信息等属性。使用C#语言编写模型各器件的脚本,将其挂载到相应的器件上,用以控制它们在仿真时的运动。模型的运动信息来自于现场生产线中机械臂等的运动信息,以sqlite数据库形式保存,最后驱动模型运动实现生产线运作的重现。

4 生产监视系统通信的实现

数据的发送端使用现场计算机与生产线数据总线相联,采用生产线专有的OPC软件采集并保存机械臂等的运动信息数据为sqlite数据库文件,通过软件的数据库模式读取数据库文件并采用UDP协议发送传输。接收端计算机安装有配置好模型和脚本的Unity3D软件,通过网络与发送端计算机联接,一些数据参数则需要相应配置。

4.1 发送端配置

将发送端配置信息写入发送端OPC软件默认路径upconfig.xml文件,包括接收时间、发送时间、OPC变量名、变量类型、变量长度、变量类型、默认值,最后配置好接收端IP地址、端口号。为了将数据跨主机传送到接收端,需要将Unity3D目录下的sockpol.exe文件复制到发送端主机并运行。最后启动OPC程序,等待接收端接收。

4.2 接收端配置

与发送端类似,设置默认目录下的upconfig.xml文件,包括接收时间、发送时间、OPC变量名、变量类型、变量长度、变量类型、默认值,最后配置好对应的发送端端IP地址、端口号。配置好的xml文件将被Unity3D中的C#脚本Data Provider.cs读取并用来处理接收的数据。

4.3 接收端脚本实现

Unity3D中的脚本用来控制模型运动和实现数据传输等功能,在编写Unity3D软件的时候,脚本文件被拖拽到对应的模型对象上挂载,当软件运行时实现相关功能。主脚本CControl.cs挂载到Unity3D主摄像机下,在监视界面显示启动连接的开关。Data Provider.cs脚本包括stopcollect、startcollect、thp Receive Udp Data等方法。启动开关置为开调用startcollect方法并启动thp Receive Udp Data从发送端收集数据并根据3.1节中的xml的变量配置将数据赋予Dic Receive Variable Value,在Unity3D运行的每次刷新中被机械臂挂载的脚本Robot A.cs读取,驱动模型运动到对应的位置。

4.4 软件的运行状态

软件运行时,监视界面于左侧显示数据连接开关,选中时即为开状态;右侧指示连接状态、画面帧数以及连接信息。随着数据的读取,监视模型中的机械臂会随之运动,实现现场场景的重现。

5 结束语

三维远程监视作为一个研究热点,其实现离不开基础的通信模块。本文结合项目实际,基于Unity3D构建了三维远程监视系统,利用软件所支持的C#语言灵活的配置了复杂多样的数据传输,尝试并实现了现场和客户端的通信,使系统较为逼真的展现生产线运行状态,为现场数据的后续分析和重现提供了可行的办法。

参考文献

[1]何岩.基于AJAX/SVG的EMS Web监视系统的研究[D].西南交通大学,2008.

[2]李勤,佟巍.三维可视化技术在实时监视系统中的应用[J].西安工程大学学报,2008,22(1):64-66.

[3]王飞,赵建华.国家海域动态监视监测三维展示系统的设计与实现[J].辽宁师范大学学报:自然科学版,2014,37(4):578-584.

[4]章勇华,杨志强,李平,等.基于SIMULINK和VR技术的三维监视软件开发[J].系统仿真学报,2009(18):5713-5715.

[5]Unity Technologies.Unity 4.X从入门到精通[M].中国铁道出版社,2013.

[6]陈俊锋.基于Unity3D的跨平台手机网络游戏的研究与实现[D]中山大学,2013.

[7]张利利,李仁义,李晓京,等.Unity3D与数据库通信方法的研究[J].计算机技术与发展,2014,24(3):229-232.

Unity应用论文 篇9

function Update(){

renderer.material.mainTexture.Play();} 2.自定按键进行播放: 代码: 选择全部

function Update(){

if(Input.GetButtonDown(“Jump”)){

if(renderer.material.mainTexture.isPlaying){

renderer.material.mainTexture.Pause();

}

else {

renderer.material.mainTexture.Play();

}

} } 使用方法: 1.导入影片

2.将影片附加至游戏对象上(此范例使用plane)

3.新增空白JavaScript并贴上程序代码(范例码1)

4.新增空白JavaScript并贴上程序代码(范例码2)

5.将脚本附加至游戏对象

上一篇:时尚与古典下一篇:零风险管理