实例化游戏对象定位 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);
感谢您的任何建议。
要使用当前方法直接回答您的问题,您需要将负偏移量 (- 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);
}
}
您现在可以将您的号码放入另一个对象中,该对象位于您希望号码居中的位置,瞧。