Вы можете использовать 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;