实例化游戏对象定位 C#

本文关键字:定位 对象 游戏 实例化 | 更新日期: 2023-09-27 18:28:21

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);

感谢您的任何建议。

实例化游戏对象定位 C#

要使用当前方法直接回答您的问题,您需要将负偏移量 (- 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

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

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

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);
    }
}

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