Unity3D是一个基于组件(Component)编程的游戏引擎。而且Unity3D本身的类非常多,类的结构图如下:
由上图可以看出Unity中的所有类都继承于Object,而Unity中只分了两个种类,一个是GameObject和一个Component,而Component的派生类包含了Unity中所有类,Unity3D面向组件编程的思想略见一斑。
在Unity中,在Scene中所有物体都称之为GameObject,区别不同的GameObject就需要看不同的Component。接下来我们分别介绍不同组件。
Transform:
现在Unity中创建一个Empty GameObject ,选中我们新建的GameObject,在Inspector视图中我们看到如图的组件 默认带了一个Transform组件。
Transform组件包含三个属性位置(Position),旋转(Rotation),缩放(Scale),这个组件是确定我们的GameObject是在3D空间位置,这个是不能去掉的,否则我们的GameObject就不是存在Scene中的了,虽说Empty GameObject在场景中看不到,但是它确实是真实存在的。
Mesh Filter:
在上面创建的GameObject的Inspector视图中有个Add Component按钮,点击此按钮添加Mesh Filter然后选点击Mesh后面的红框选中的按钮,接下来
我们看到如下界面
选择一个Mesh,在回到Scene中,场景并没有什么变化,接下来我们就需要把我们的Mesh给显示出来了。
Mesh Renderer:
和上述步骤一样,Add Component,选择Mesh Renderer,返回到Scene中看到会有如此场景,选择上面所说的不同Mesh,可以看到Scene中呈现出不同的形状。
在Unity中,GameObject呈现出这种颜色,一般都是材质的缺失。现在新建一个材质球(Material)在Project视图中点击Create选择Material,然后把New Material拖拽给GameObject,场景显示如图
接下来我们通过代码来更详细了解Transform。
Transform:
默认创建的脚本会继承MonoBehaviour这个类,下次我们详细讲解这个类。
编写如下简单的代码:
运行后我们观察我们GameObject的位置(Position)属性
而Rotation属性是一个四元数,通过Euler角和Vector3进行转换,存在一定的误差。
接下来我们在Update中编写代码。
我们可以看到我们GameObject在场中旋转起来了。
Rotate有六个重载方法,根据参数的命名,很容易知道每个参数的意义。
同样位置(Position)移动的方法Translate也有类似的重载。
Transform的介绍基本就是这样了,下次再介绍其他更炫酷的属性吧。