浅析Unity3d开发游戏流程及常用技术
作者:***
来源:《电脑知识与技术》2012年第22期
        摘要:该文通过一个小程序介绍了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 project→Browse选择路径→Create)。一旦工程创建成功,系统自动生成三个文件Assets(此文件是系统的资源文件有物理属性、贴图等资源)、Library,Temp。
        第二步:建立场景。你可以添加一个地形作为场景,方法是菜单栏Terrain→Create Terrain.为了简单直接,在此新建个平面作为场景。方法是:菜单栏→GameObject→Create Other→Plane,创建成功后在场景编辑窗口(Scene窗口)出现一个灰的平面,同时在Hier
archy窗口出现该平面的名称。当然为了直观,你可以帮它改名,方法是F2(或点击然后右键rename),输入你要的名字(例如:myScene)。你可以在Inspector窗口查看myScene的一些属性,为了方便我们把myScene的Transform的position的x,y,z全改为0。改完以后如果你在场景窗口不到你的场景(myScene),你可以采用以下方法快速到它:在Hierarchy窗口选中myScene,然后把鼠标的光标移到场景窗口,按"F"键,myScene就会出现在场景窗口的中央。这个方法适用于所有的游戏对象的查(这个快捷键会经常用到)。
        第三步:建立一个球体。单击菜单栏→GameObject→CreateOther→Sphere。同样修改其名称为(mySphere)。同样在Inspector窗口修改其位置x、z为0,y改为0.5。
        第四步:添加灯光。如果觉得光线比较暗的话,可以为场景添加灯光,unity3d提供了两种灯光可供你选择:点光源及平行光源。添加的方法与添加plane及sphere一样,只是选择point light或directional light。
        第五步:这时你应该注意到Hierarchy窗口有一个系统默认生成的摄像机。如果没有这个摄像机,你在Game窗口是看不到你创建的场景以及球体,以及灯光的。如果你觉得Game窗口的物体太小了,你可以把摄像机往前移动,方法当然是修改摄像机的属性里的pos
ition,把z坐标设为-5。
        第六步:让球动起来!要控制球的移动,就需要编写脚本。回到project窗口,点Create→JavaScript(当然你也可以单击右键弹出菜单Create→JavaScript),脚本添加成功,按“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文件了。
        任何软件系统在设计好以后,都要进行测试。早期的软件测试定义指出软件测试的目的是寻错误,并且尽可能的出最多的错误。但是游戏测试的目的是解决玩家所遇非正常问题的预测工作,同时也是不断调试系统的一个长期观察任务。游戏测试作为软件测试的一部分,它具备了软件测试所有的一切共同的特性:测试的目的是发现软件中存在的缺陷并且及时的修改,从而提升软件产品的质量。
        网络游戏排行榜2014前十名5结束语
        unity3d是一款功能非常强大的游戏设计软件,包含了很多重要的技术。该文只是对其中两种技术作了简单的介绍。
        参考文献: