Unity,游戏对象的相对尺寸

Unity, Relative dimensions of gameobjects

看到一些文档说Unity中没有length的概念。要确定游戏对象的尺寸,您所能做的就是使用 Scale.

那我怎么设置游戏对象之间的整体相对尺寸呢?

例如,1:1:1平面的维度明显不同于1:1:1球体!那我怎么知道平面和球体的相对比例是多少呢? 1单位平面的长度等于球体直径的单位!?不然我怎么知道我把所有的东西都设置在了的比例?

嗯,你说的是对的,但考虑到物体可能有碰撞器。而且,如果是球体,您可以使用 SphereCollider.radius.

获得半径

此外,请考虑 Bounds.extents,这是相对于对象的边界框而言的。 同样,考虑球体,您可以获得直径:

Mesh mesh = GetComponent<MeshFilter>().mesh;
Bounds bounds = mesh.bounds;
float diameter = bounds.extents.x * 2;

unity中的所有GameObjects都有一个Transform组件,它决定了它的位置、旋转和缩放。大多数 3D 对象还有一个 MeshFilter 组件,其中包含对 Mesh 对象的引用。

网格包含对象的实际形状,例如立方体的六个面或球体的面。 Unity 提供了一些内置对象(立方体、球体、圆柱体、平面、四边形),但这只是 'starter kit'。大多数内置对象的大小为 1 个单位,但这纯粹是因为顶点已放置在这些位置(因此您需要缩放 2 以获得 2 个单位的大小)。

但是网格内的 positino 没有限制,你可以有一个微小的物体或一个完整的地形物体,尽管它们的比例保持在 1,但它们的大小却有很大的不同。

您应该尝试学习一些 3D 建模应用程序来创建任意对象。

或者尝试安装一个名为 ProBuilder 的插件,它过去非常昂贵,现在免费(自从被 Unity 收购后),它支持编辑器内建模。

比例最好保持在一个,但最好有一个缩放选项 - 这样您就可以通过将它们设置为不同的比例来重新使用球体网格或立方体网格(减少内存浪费) .

在大多数统一应用程序中,您将比例设置为某个任意数字。

所以通常 1 米 = 1 个单位。

所有 1 个单位高的东西都是 1 米高。

如果您从建模程序导入的网格大小不正确,请将其精确缩放到一米(使用标准的 1,1,1 立方体作为参考)。然后,将其粘贴到一个空的游戏对象中,以将其“转换”为游戏的适当比例。所以现在如果你将空对象的 y 轴缩放到 2,那么对象现在是 2 米高。

更好的解决方案是将层次结构中所有对象的最高父级保持在 1,1,1 比例。使用 1,1,1 参考立方体,将您的对象缩放到看起来合适的大小。因此,例如,如果我有一个人的模型,我希望它被缩放到大约是立方体的两倍高。然后,以这种方式将它拖到一个 1,1,1 比例的空对象中,场景的“正常”大小中的所有内容都是 1,1,1。如果你想把某样东西的大小加倍,你可以把它变成 2,2,2。在实践中,这比第一个选项有用得多。

现在,如果你将它的位置改变 1 个单位,它也会有效地移动 1 米,这看起来也很合适。

此过程还允许您更改对象“底部”的位置。你可以改变物体在空洞中的位置,做一个“偏移”。这对于让模型站在地面上且位置 y=0 非常有用。