Windows Phone等平台的应用程序。
自动资源导入。项目中的资源会被自动导入,并根据资源的改动自动更新。 基于Direc3D(Windows)、OpenGL(Mac、Windows)的图形引擎,并且有自己的API(Wii)。
支持Bump mapping、Reflection mapping、Parallax mapping、Screen Space Ambient Occlusion,动态阴影使用的是Shader Map技术,并支持Render-to-Texture和全屏Post Processing效果。
Shader编写使用ShaderLab语言,同时支持自有工作流中的编程方式或CG、GLSL语言。
内置对Nvdia的PhysX physics engine支持。
游戏脚本是基于Mono的Mono脚本,开发者可以使用JavaScript、C#或Boo语言编写脚本。
音效系统基于OpenAL程序库,可以播放Ogg Vorbis压缩音效,视频采用Theora编码。
3.2 事件函数、脚本执行顺序和生命周期
Unity中的脚本不像常规程序在一个循环中的执行直到任务完成,而是通过调用一些事先声明好的函数,断断续续的将控制权传给一个脚本。当一个函数执行完毕后,控制权便又交回给Unity。这些函数就是事件函数。
下面按照脚本的执行顺序介绍一些常用的Unity事件函数。
Awake()。当前控制脚本实例被装载的时候调用。一般用于初始化整个实例时使用。
12 Start()。当前控制脚本第一次执行Update之前调用。 Update()。最常用的事件函数,每帧都执行一次。
FixedUpdate()。每固定帧绘制时执行一次,与Update不同的是FixedUpdate是渲染帧执行,当渲染效率地下时,FixedUpdate的调用次数也会跟着下降。
OnEnable()。当脚本被启用时调用。 OnDisable()。当脚本被禁用时调用。
OnDestroy()。当脚本的宿主物体被销毁的时候调用。
Unity中编写的脚本一般都会绑定到一个GameObject上,这个GameObject就是程序中的一个基础元素。一个脚本的生命周期就是和它绑定的GameObjec息息相关的,当程序开始运行的时候,Unity会为每一个场景中活跃的GameObject上的脚本生成一个对象,而当脚本的宿主物体(即脚本所绑定的物体)被销毁的时候,脚本的对象也就不存在了。
Unity的脚本默认都会继承与MonoBehavior基类。不继承于MonoBehavior的类通常用来存放一些全局的数据,它在整个程序运行的过程中都是存在的。
3.3 常用API
Transform类。继承于Component类,用于描述和控制一个三维或者二维物体的位置、旋转和缩放属性,。在Unity的场景中,每一个物体都有一个Transform组件,被用来存储和操控位移、旋转和缩放。Transform允许拥有父对象,子对象的属性基于父对象发生偏移。其类图如图9所示。 Transform的常用属性有:
childCount:当前Transform所拥有的子对象的数量。
13 eulerAngles:旋转的欧拉角度数。
localEulerAngles:当前Transrom相对于父对象的旋转欧拉角。 localPostion:相对于父对象的位置
localRotation:相对于父对象的旋转。 Parent:此Transform的父对象。 Transfrom的常用方法:
DetachChildren:分离所有子对象。
Rotate:指定一定的旋转角度给当前的对象。
RotateAround:让当前的对象绕着某一个指定的点旋转一定的角度。 Translate:让当前对象的位置沿着指定的方向和距离移动。
Vector3类。三维向量类,使用它来记录一个物体在三维空间里X、Y、Z轴上的位置、旋转和缩放信息。Vector3类定义了一些静态变量来代表一些常用的三维向量,如Vector3.back表示的的是Vector3(0,0,-1),Vector3.forward表示的是Vector3(0,0,1)等等。在编程过程中可以直接快捷的使用这些变量。 Vector3的常用属性有:
Magnitude:返回当前三维向量的长度(只读)。 Normalized:返回当前向量的标准向量。 X:当前向量的X值。 Y:当前向量的Y值。 Z:当前向量的Z值。
14 Vector3的常用方法有:
Angle:返回两个Vector3向量之间的夹角。 Cross:返回两个Vector3向量的叉乘。 Lerp:在两个Vector3向量之间线性差值。 MoveTowards:直线移动一个点到目标点。
图9 Transfrom的类图
3.4 Unity3D的第三方UI插件NGUI
15
相关推荐: