实例化GameObject定位C#

时间:2015-12-27 19:37:40

标签: c# unity3d

Score[i].transform.localPosition = new Vector3 (0.013F + i * 0.01F, 0.12F, 0.0F);

i * 0.01F确保游戏对象不会在彼此之上进行实例化。它将下一个游戏对象0.01F实例化为正x,使它们彼此相邻而不是彼此重叠。对于上下文,游戏对象是表示分数的数字模型。

我想在每次引入新游戏对象时将整组游戏对象移动到负x。截至目前,数字从中间开始,并进一步向右实例化。我想让整个组向左移动与他们当前向右间隔开的相同数量,以便整个组居中。

我尝试了这个,但它并没有按我的意愿行事。

ScoreHandler.Score[i].transform.localPosition = new Vector3 ((- 0.01F + i * 0.01F) * - 0.01F, 0.12F, 0.0F);

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

要使用当前方法直接回答您的问题,您需要将负偏移量( - 0.01F)乘以您希望显示的分数,并除以2(或* 0.5),如下所示:

ScoreHandler.Score[i].transform.localPosition = new Vector3 (-0.01F * ScoreHandler.Score.Length * 0.5F + i * 0.01F, 0.12F, 0.0F);

当然你可以用偏移量折叠* 0.5并使用:

-0.005F * ScoreHandler.Score.Length + i * 0.01F

答案 1 :(得分:0)

最简单(也是最合乎逻辑)的方法是将所有数字生成为“数字”对象的子项。

由于他们是您号码的孩子,移动号码会移动孩子。只要数字知道它有多少个孩子,它就可以相应地设定自己的位置。

public class Number : MonoBehaviour
{
    int numDigits;
    public float digitWidth = 0.01f;

    public void AddDigit(int d)
    {
        GameObject digit = Instantiate(...prefab for d...);
        digit.transform.parent = this.transform;
        digit.transform.localPosition = Vector3.right * (numDigits++ * digitWidth);

        this.transform.localPosition = Vector3.right * (-0.5f * numDigits * digitWidth);
    }
}

现在,您可以将您的号码放入另一个位于您希望您的号码居中的位置的对象上。