Unity,游戏对象的相对维度

时间:2018-06-15 08:23:49

标签: unity3d scale relative dimension gameobject

我看到一些文档说Unity中没有长度的概念。您只需使用Scale即可确定游戏对象的尺寸。

然后我如何设置游戏对象之间的整体相对尺寸?

例如,1:1:1平面的尺寸明显不同于1:1:1的球体!那么我怎么知道平面和球体之间的相对比率是多少? 1个单位平面的长度等于球体直径的单位多少!?否则我怎么知道我是否已将所有内容设置为正确比例?

3 个答案:

答案 0 :(得分:1)

嗯,你说的是对的,但考虑到物体可能有对撞机。并且,如果是球体,您可以使用SphereCollider.radius获得半径。

另外,请考虑Bounds.extents,即相对于对象的边界框。 再次,考虑到球体,您可以通过以下方式获得直径:

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

答案 1 :(得分:1)

统一中的所有游戏对象都有一个变换组件,它决定了它的位置,旋转和缩放。大多数3D对象也有一个MeshFilter组件,它包含对Mesh对象的引用。

网格包含对象的实际形状,例如立方体的六个面或球体的面。 Unity提供了一些内置对象(立方体,球体,圆柱体,平面,四边形),但这只是一个“入门套件”。大多数内置对象的大小都是1个单位,但这纯粹是因为顶点已放置在那些位置(所以你需要按2来缩放以获得2个单元的大小)。

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

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

或者尝试安装一个名为ProBuilder的插件,这个插件过去非常昂贵,而且现在是免费的(自Unity获得以来),这使得编辑器内的模型成为可能。

比例最好保持在一个,但是可以选择扩展 - 这样你就可以通过让它们处于不同的比例来重新使用spehre网格或立方体网格(减少内存浪费)。 / p>

答案 2 :(得分:1)

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

通常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时非常有用。