是否可以统一定义3D模型/预制件的尺寸?

时间:2019-04-27 16:47:50

标签: unity3d

有没有一种方法可以统一定义3D模型大小?像高度= 1,宽度= 3,深度= 3?

无论我在Blender中制作fbx大小如何,我都希望模型在统一场景中占据定义的空间。因此,我无法使用缩放比例,因为在Blender中更改模型尺寸会破坏此缩放比例。

我需要它是3宽,3长和1高的正方形,而不取决于从Blender导出的模型尺寸。有可能吗?

同一个问题,但从另一个角度来看-如何统一设置模型大小?只有比例设置,没有尺寸设置。看起来很奇怪。

到目前为止,我发现了一种变通方法,例如获取对象的渲染边界和在脚本中调整缩放比例,但这对我来说似乎不正确。

1 个答案:

答案 0 :(得分:1)

您可以使用Mesh.bounds来获得3D模型的大小,而无需应用缩放。

然后您根据需要重新计算比例尺

// The desired scales
// x = width
// y = height
// z = depth
var targetScale = new Vector3(3, 1, 3);

var meshFilter = GetComponent<MeshFilter>();
var mesh = meshFilter.mesh;

// This would be equal to the 3D bounds if scale was 1,1,1
var meshBounds = mesh.bounds.size;

// This would make the model have world scale 1,1,1
var invertMeshBounds = new Vector3(1/meshBounds.x, 1/meshBounds.y, 1/meshBounds.z);

// Use this if you want exactly the scale 3,1,3 but maybe stretching the fbx
var finalScale = Vector3.Scale(invertMeshBounds, targetScale);

据我了解,您希望保持3D模型的正确相对比例,但使其适合定义的targetScale,因此我将使用3个值中的最小比例作为比例因子

var minFactor = Mathf.Min(finalScale.x, finalScale.y);
minFactor = Mathf.Min(minFactor, finalScale.z);
transform.localScale = Vector3.one * minFactor;