《Unity虚拟现实开发实战》——第2章,第2.3节测量工具

简介:

本节书摘来自华章出版社《Unity虚拟现实开发实战》一书中的第2章,第2.3节测量工具,作者[美] 乔纳森·林诺维斯,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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的其中之一,所以需要把它导入项目中,步骤如下:


628497c1d107f9e8e2b65606e8e54056944f176f

1.在主菜单栏中选择Assets,再选择Import Package | Effects。

  1. 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的比较:


9af2df96f73c01eb60b7d247de8a3296919a95e1
相关文章
|
编解码 程序员 atlas
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
1399 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
4月前
|
JSON C# 图形学
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
48 0
|
图形学 Windows
很好用的Unity编辑器扩展工具 Odin Inspector教程
Odin包含许多功能,例如Static Inspector,Project Validation,Odin Editor Windows和我们的开源Odin Serializer,它允许您在需要多态对象结构时扩展Unity的序列化功能,或者希望在运行时序列化和反序列化数据。
很好用的Unity编辑器扩展工具 Odin Inspector教程
|
图形学
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
263 0
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
|
SQL JSON C#
Unity Excel转Json小工具excel2json
在开发中表格转字符数据必不可少,在Github搜到一个小工具excel2json,还不错,并且支持批量操作 给出的官方文档:https://neil3d.
2641 0
|
图形学
Unity 便捷小工具之批量更改UGUI Font(字体)
在项目开发过程中可能会遇到更改字体的需求,如果手动逐一更改实在是太麻烦,所以我们需要自动化,一键能解决的问题绝不点击两次 效果过下 源码如下 using UnityEngine; using System.
2173 0
|
C# 图形学
Unity C#基础之 特性,一个灵活的小工具
特性在框架中的应用也是很普遍,只需要在相应的类、字段、属性、函数等上面加上这个特殊的小东西就会在相应的元素上面添加一些特殊的应用效果,下面就为大家简单的介绍下特性的原理和应用场景 在往期的博客中有介绍过一些特性 Unity Debug输出到屏幕并保存到本地中的Conditional("EnableLog")特性 Unity Attributes中Unity自带的特性 Obsolete、Serializable等 下面咱们来聊一聊特性到底是个什么,都能干什么?为什么说它是一个灵活的小工具。
1843 0