2.3测量工具
我们已经创建了一个Unity场景,添加了一些基础3D物体,并且创建了一些基本的纹理,其中包括一张照片。然后,我们学习在Unity的3D世界空间中移动和变换对象。问题是场景中物体的实际大小并不是一直都那么明显,应该放大它们,或者用Perspective和Orthographic视图来对比,或用其他功能来影响其外观尺寸。我们来看看处理其比例的几种方式。
2.3.1随手保留一个单位立方体
我建议随手保留一个单位立方体在Hierarchy面板中,在不需要的时候禁用它(反选Inspector面板左上边的复选框)就行。它可以当成一个测量尺或者测量仪用。我用它来预估对象的实际尺寸、对象间的距离、高度和海拔等。
创建一个单位立方体,命名为Unit Cube,随便放在一个不碍事的位置,比如Position (-2, 0.5, -2)。
还可以添加一个刻度尺来测量,让纹理精确到其边缘。
暂时把它设置为可用状态。
2.3.2使用网格投影器
我想向你们介绍一下网格投影器(Grid Projector),它是一个很方便的工具,用于在任何Unity场景中可视化缩放。它是Effects包中Standard Assets的其中之一,所以需要把它导入项目中,步骤如下:
1.在主菜单栏中选择Assets,再选择Import Package | Effects。
- Import对话框会显示出来,包括所有可导入的列表,只要你愿意,可以点击All选择Import导入所有资源,但是我们只需要Projector文件夹,所以把它导入即可。
现在添加一个Projector到场景中,步骤如下:
1.在Project面板中找到Grid Projector预制件,定位到Assets/Standard Assets/Effects/Projectors/Prefabs 文件夹。
2.拖动一份Grid Projector的复本到场景中,把Position的Y值设置成5,让它在地平面之上。
默认的Grid Projector面朝下(Rotation的X=90),这也通常是我们所期待的。在Scene视图中,可以看到正交投影射线。有一篇Unity文档(http://docs.unity3d.com/Manual/class-Projector.html)是这样解释的:
投影器可以把材质投影到所有与其视锥体相交的物体上。
意思是说,与投影射线相交的物体都会得到投影后的材质。
在这个例子中,如你所愿,投影器的材质(名字也叫GridProjector)有一个“Grid”纹理,它看起来简直像一个十字准星(Assets/.../Projectors/Textures/Grid,你自己看)。
默认情况下,投影器像一束光一样照耀在网格图案表面。在我们的场景中,GroundPlane平面是明亮的,所以网格不会显示出来。现在我们按如下步骤操作:
在Hierarchy面板中选中网格投影器,把GridProjector材质组件放进Inspector面板,再把它的Shader从Hidden/Projector Light 改成Hidden/Projector Multiply。
它现在会在一片黑色上绘制白色网格线,要想得到更好的效果,把场景视图改成Top的视图朝向,可按如下操作:
1.点击View面板中场景视图小部件中右上方的绿色的Y锥形。
2.点击小部件中的小立方体,把Perspective变成Orthographic(无变形)视图。
现在你可以从上向下看到地平面上,选中网格投影器(确认左上方工具栏的第二个图标平移工具是激活状态),慢慢用小部件的平移工具移动投影器,网格线也随之移动,你可以把它放在Position(-2.5,5,-0.5) 的位置上以避免投影器挡着光线。
现在这个内置的参考网格可能会让人感到混乱,所以把它关了吧:
1.在Scene视图面板中,点击Gizmos(找这个名字的菜单,有控制你的所有小部件的选项),反选Show Grid。
好了,看到了吧?默认的网格尺寸是单位立方体的边长的一半。在Inspector中,投影器组件的Orthographic的尺寸值是0.25。
2.将投影器中Orthographic的尺寸值从0.25改成0.5。
3.保存场景和项目。
现在我们就可以随时把一个单位的网格用于场景中了。
让我们保留这个状态一会儿,因为它看起来挺酷的,如下图所示:
2.3.3测量Ethan角色
一个虚拟角色有多大?Unity中有一个叫作Ethan的第三人称角色,我们把他添加到场景中,他是Characters包的Standard Assets之一,所以我们需要将其导入项目。
按如下步骤操作:
1.在主菜单栏中选择Assets,然后选择Package | Characters。
2.在弹出的Import对话框中,有一个可导入列表。点击All再点击Import。ThirdPerson-Controller是Project面板中的一个预制件(预置资源),可以在Assets/Standard Assets/Characters/ThirdPersonCharacter/Prefabs 文件夹中找到。
3.拖一个ThirdPersonController的复本到场景中,X和Z的位置值无所谓,但是要把Y值设置成0,这样名字叫作Ethan的角色就站在地面上了,我设置的坐标值为(2.2, 0, 0.75)。
我们试试效果:
1.点击在Unity窗口顶部中间的Play图标运行游戏。使用W、A、S、D键来移动。跑,Ethan!跑!
2.再次点击Play图标来停止游戏,进入编辑模式。
所以,Ethan有多高?根据Google搜索的结果,人类中男性的平均身高是1.68m(在美国成年男性平均身高是1.77m),我们来看看Ethan有多高:
使用平移工具小部件滑动单位立方体到接近Ethan处。看出来了,他大概身高是单位立方体高度的1.6倍。
调整立方体的高度值(Y)到1.6,再把位置值Y调整到0.8。
我们再来看看,如下图所示,他身高数值不到1.6,所以Ethan比平均身高要矮一点(除非你算上他的发尖)。滑动视图,我看到的是Ethan的右脸,然后再调整立方体的视平线大约是1.4m。记录一下:
1.把单位立方体恢复到Scale(1, 1, 1)和 Position(-2, 0.5, -2)。
2.保存场景和项目。
下图是1.6个单位高度的立方体与Ethan的比较: