在Unity中的预制件中获取3d网格的大小?

时间:2017-08-07 12:59:08

标签: c# unity3d model size


我想创建一个六边形网格。我有一个3D模型,我在搅拌器中制作了一些尺寸 我在Unity中有一个脚本,它应该生成一个带有给定六边形的十六进制网格 十六进制的模型放在预制件中。我需要尺寸"实际尺寸不是尺度"该预制件用于生成网格。
如何获得预制件中模型的尺寸。

public class GameWorld : MonoBehaviour
{
    // Fields
    public GameObject HexPrefab;

    // Size of the map in terms of number of the objects
    // This is not representative of the actual size of the map in units
    public int Width = 20;
    public int Height = 20;

    void Start()
    {
        MeshRenderer[] asd = HexPrefab.GetComponentsInChildren<MeshRenderer>();
        var a = asd[0].bounds;

        Debug.Log(string.Format("x: - {0:f3}", a.size.x));
        Debug.Log(string.Format("y: - {0:f3}", a.size.y));
        Debug.Log(string.Format("z: - {0:f3}", a.size.z));

        for (int x = 0; x < Width; x++)
        {
            for (int y = 0; y < Height; y++)
            {
                Instantiate(HexPrefab, new Vector3(x, 0, y), Quaternion.identity);
            }
        }
    }

    void Update()
    {

    }
}

以下是搅拌机的尺寸 enter image description here
我不想硬编码,因为我将来需要使用不同大小的六边形! 这段代码给我的大小为0。 预制件只包含一个型号而不包含任何其他型号。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

我的预制件仅包含模型。 这是它的样子。
enter image description here
这就是模型的属性:
enter image description here
然后在代码中我做了以下内容:

Mesh mesh = HexPrefab.GetComponentsInChildren<MeshFilter>()[0].sharedMesh;

现在我可以像这样得到网格的尺寸:

mesh.bounds.size

在我的情况下,预制件的比例为1,因此模型的大小和预制件的大小是相同的,但是如果你想进行额外的步骤,你可以将我们从模型中获得的大小乘以预制件的规模。
希望这有助于有同样问题的人! 祝你有愉快的一天!