首页 > 范文大全 > 正文

浅析Unity3d开发游戏流程及常用技术

开篇:润墨网以专业的文秘视角,为您筛选了一篇浅析Unity3d开发游戏流程及常用技术范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

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

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

中图分类号:TP391文献标识码:A文章编号:1009-3044(2012)22-5351-02

1 unity3d概述

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

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

2用unity3d开发项目流程

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

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

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

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

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

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

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

function Update ()

{ }

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

if(Input.GetKey(KeyCode.UpArrow))

{ transform.Translate(0 , 0 , 2*Time.deltaTime);

}

if(Input.GetKey(KeyCode.DownArrow))

{transform.Translate(0 , 0 , -2*Time.deltaTime);

}if(Input.GetKey(KeyCode.LeftArrow))

{

transform.Translate( -2*Time.deltaTime , 0 , 0 );

}

if(Input.GetKey(KeyCode.RightArrow))

{ transform.Translate( 2*Time.deltaTime , 0 , 0);

}

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

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

3常用技术

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

3.1键盘交互技术

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

var Speed = 50; //控制速度

var Control; //控制对象

function Update()

{

Control = GetComponent(js); //得到控制对象

if(Input.GetKey(KeyCode.W))//判断按键

{

Control.ForWard();//前进

}

function ForWard()

{

transform.Translate(Vector3.forward * Time.deltaTime *Speed);

}

3.2碰撞检测

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

4游戏的与测试

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

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

5结束语

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

参考文献:

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