如何通过 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);
}
}
我有一种方法可以将子立方体添加到游戏对象中,它们之间有 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);
}
}