点击蓝字关注我们吧!
目录 |
1 创建一个时钟 1.1 创建一个Game Object 1.2 创建钟盘 1.3 创建时钟的其他部分 1.4 创建指针 2 让时钟动起来 2 定义组件类型 2.1 定义组件类型 2.2 拿到指针 2.3 设置3个指针 2.4 掌握时间 2.5 旋转指针 2.6 让指针动起来 2.7 连续旋转 3 总结 |
本文要点:
1、用简单的Objects 创建一个时钟。
2、用C#实现。
3、通过旋转时钟的指针来显示时间
4、驱动指针运动
这篇教程是一个基础教程,会和大家一起创建一个简单的时钟,并且给它加上一些组件脚本用来显示当前时间。这篇教程的意义并不在于怎么学会写出一个时钟,而是教你认识Unity的编辑器。当然如果你之前已经接触过或者用过Unity了并且能自己找到场景窗口,那么就算是有个很好的开始了。
这篇教程推荐大家用Unity2017.1及以上的Unity版本进行学习,太老的版本可能会不兼容。
(是时候创建这个时钟了)
1 创建一个时钟
打开你的Unity,并且选择创建一个3D的项目,这个事例不需要任何其他的插件,也不需要准备任何其他的资源就用Unity的默认创建就够了。创建完成之后,如果你没有对编辑器进行过自定义设置的话,你会看到如下一个默认的窗口布局。
(默认的窗口布局)
不过我更喜欢Unity自带的一种预设布局, 2 by 3。2代表的是场景窗口和实际游戏窗口,而3代表的是Unity的层次列表、工程列表以及属性的显示面板,就如下图显示的一样。
(预设的 2-by-3 布局)
你可以从编辑器右上角的下拉列表里进行选取。
除此之外呢,我还会对编辑器的布局做进一步的定制,以便让它能更好的展示垂直化的内容。比如我把Project这个窗口调整为1列,就点击这个Project窗口右上角,锁的图标旁边有一个很小的下拉列表,点开就能设置。同时我也会禁用网格显示,这个按钮在Scene窗口的右上角,点击Gizmos 之后会出现一个下拉菜单。
小提问:为什么我的Game窗口会有一些黑色的边距呢?
这种情况一般发生在高分辨的显示器上。如果想让Game显示的内容铺满真个窗口的话,你可以打开设置分辨率比例的下拉框,然后禁用Low Resolution Aspect Ratiosoption选项。
(Low resolution aspect ratios 被禁用了)
1.1 创建一个Game Object
默认创建的场景,包含两个Game Object,你可以从Hierarchy(层次)窗口看到这两个游戏对象。一个是Main Camera,一个是Directional light。即一个是游戏的摄像机,一个是平行光。Main Camera用来渲染场景,所有Game窗口看见的东西都是由这个摄像机绘制出来的。而Directional light用来给场景展示阴影。
你可以通过一些方式创建你自己的游戏对象。比如右键Hierarchy窗口,从打开的菜单中选择 GameObject Create Empty选项,或者从Unity引擎的菜单栏GameObject Create Empty。这样Unity就会帮我们在场景里加入一个空的游戏对象,新对象创建好之后,你可以立刻对它进行命名,我们把这个对象命名为Clock。
(场景里添加了Clock对象)
除了刚才提到的Project和Hierarchy窗口之外,还有一个叫Inspector 窗口,用来展示游戏对象的详细信息。当我们选中刚才添加的clock之后,就可以看到它包含一个带有名字的头信息和一些配置选项。默认情况下,对象是启用的,非static并且没有包含tag信息,并且属于default 的层。这些日后对我们会很有用。
再往下的话,它会展示一系列的组件信息,但是总是会有一个Transform 的组件,当然我们刚才创建的时钟对象也有。
(clock选中的时候,Inspector上的信息)
Transform 组件上包含了一个游戏对象在3D空间里的位置、旋转和缩放。这里我们把clock的position和rotation 设置为0,scale 设置为1。
小提问:如果是一个2D的游戏对象应该怎么办?
如果你是在2D的环境下工作的话,你可以忽略掉三维中的一维,有一些2D的游戏对象,比如UI这种,它会有一个叫做Rect Transform的组件。它其实是一种特殊的Transform 组件。
1.2 创建钟盘
现在我们已经有了一个clock的游戏对象了,但是它现在只是一个空的对象,所以场景上我们看不到任何东西。下一步我们添加一些3D的模型在上面,这样他们就可以被渲染出来了。Unity其实自身包含了一些初级的物体模型,我们可以用Unity自带的模型来创建这个时钟。
第一步,先添加一个圆柱体到场景里吧。步骤如下:GameObject → 3D Object → Cylinder,然后将它的Transform上的几个数值设置的和clock对象一样。
(一个圆柱体的游戏对象)
这个新的对象比刚才的clock对象多3个组件。
Mesh Filter, 主要是引用了Unity内置的圆柱体网格。
Capsule Collider,主要是用来做3D的物理。
Mesh Renderer 这个组件是用来告诉Unity怎么把 Mesh Filter画出来的。它同时包含了一个内置的material(材质球), 材质球可以根据需要自己创建或者更换,同时材质球也在Mesh Renderer的组件下面被展示出来了。
虽然这个物体代表的是圆柱体,但是它却有一个胶囊体的碰撞表示,那是因为Unity没有内置圆柱图的碰撞。在本例子里面,我们并不需要它,所以我们可以把它移除。不过如果你想把物理加入到时钟里的话,建议使用Mesh Collider组件。
每个组件都可以通过它右上角的齿轮图标,点击之后弹出的下拉列表进行移除。
(移除碰撞体)
如果要把一个圆柱体做成一个钟盘的话,我们要把它压扁。这很简单,只需要修改Transfrom的Scale就可以了。把Scale的Y改为0.1f,然后把X和Z的值改为10,这样我们就得到了一个很大的钟盘了。