如何通过 X 坐标将 Unity 中的游戏对象居中?

How can I center GameObjects in Unity by X coordinate?

我有一种方法可以将子立方体添加到游戏对象中,它们之间有 space。

public void AddElement()
{
    const int elementWidth = 1;
    const double space = 0.2;
    var elementsAmount = elements.Count;
    var xPosition = (float)(elementWidth + space) * elementsAmount;
    var position = transform.position;
    var e = Instantiate(elementToAdd, 
        new Vector3(xPosition, position.y, position.z), Quaternion.identity);
    elements.Add(e);
    e.transform.parent = transform;
}

像这样

但我不明白如何在每次调用 AddElement() 后将父对象居中,使其看起来像这样

左边应该有一些偏移,但是如何计算呢?

好吧,您可以将相机向右移动或一次移动所有对象。您将元素或块添加到最后很好,但是随着屏幕上越来越多的元素或块,您必须在 for 循环中将它们全部移动到左侧。下面的伪代码解释了我的意思。您需要一半的带空格的块的总大小。从每个块中取出。然后 re-add 基于它们所在索引的块大小和空间。从 0 开始。

        float ttlSize = 0.0f;
        foreach (var ele in elements)
        {
            //ttlSize += ele.x
        }
        float halfTtlSize = ttlSize / 2;
        for (int i = 0; i < amountOfBlocks; i++)
        {
            //ele.x = ele.x - halfTtlSize + ((elementWidth + space)*i)
        }

您必须在每次实例化后对齐一次手。下面的代码将列表与精确的大小对齐,问题就解决了。

public void AddElement()
{
    const int elementWidth = 1;
    const double space = 0.2;
    var e = Instantiate(elementToAdd, transform);
    elements.Add(e);
    
    var totalWidth = (float) (elementWidth + space) * elements.Count;

    var step = totalWidth / elements.Count;

    for (var i = 0; i < elements.Count; i++)
    {
        var position = elements[i].transform.position;
        elements[i].transform.position = new Vector3(step * (i+.5f) - totalWidth/2, position.y, position.z);
    }
}