如何将网格置于 GameObject 的中心?

How do I center a mesh on a GameObject?

我有一个 2D 游戏,用户可以通过单击屏幕添加顶点来创建汽车,然后将它们拖动到他们认为合适的位置。然后使用这些顶点绘制网格。用户还可以向顶点添加轮子(每个顶点 1 个)。

在游戏中还有一个选项可以让计算机生成随机汽车,它通过在 unit circle.

内的随机点创建八个顶点来实现。

这些汽车已存储,用户可以加载它们并重新使用它们。下面的两张图片显示了一个方形按钮,其中有一辆计算机生成的汽车(带红色轮子的绿色汽车)按预期位于正方形内部,还有一辆用户生成的汽车(带粉色轮子的白色汽车)位于正方形外。

我知道这是因为电脑生成的网格是从Vector3.zero绘制三角形的,也就是物体的中心,而用户创建的只是顶点之间的三角形,不一定放置在对象的中心周围(如本例所示,它们都放置在中心的上方和右侧)。

我该如何将用户创建的汽车的网格居中?

我或许可以计算网格的中心,然后从所有顶点的位置中减去它。或者我可以在 gui 中显示网格时,从包含网格的游戏对象的位置中减去该位置。或者有更好的替代方案吗?

使用 Mesh.Bounds

Transform car;
Bounds carBounds = car.GetComponent<MeshFilter>().mesh.bounds;
Vector3 whereYouWantMe;
Vector3 offset = car.transform.position - car.transform.TransformPoint(carBounds.center);
car.transform.position = whereYouWantMe + offset;

这还将使您可以访问许多很酷的字段,例如 center min maxsize