gpt4 book ai didi

c# - 如何重置 Vector3 位置?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:16 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本来实例化一行预制件。这第一次有效,但之后每次它都在 0x、0y、0z 处实例化一个,其余的在 ~30x-40x 处实例化。我尝试在 for 循环执行之前设置初始位置,然后使用 initalPos 变量重置位置,但这似乎不起作用。在我的代码中

    public class generator : MonoBehaviour {

public int height = 0;
public int width = 0;
private Vector3 temp;
public GameObject sprite;
private Vector3 initialPos;


void Start ()
{
initialPos = new Vector3(0,0,0);

for(int i = 0; i < width; i++)
{
Instantiate (sprite, temp, Quaternion.identity);
temp = sprite.transform.position;
temp.x += 0.089f;
sprite.transform.position = temp;
}
temp = initialPos;
}
}

temp 变量是我设置当前位置的变量,所以我可以将 0.089 添加到它,这样我的 Sprite 就会排成一行。我正在尝试重置该值,以便它们每次都从 0x 开始排列。

最佳答案

您可以通过指定您希望在一行中生成的预制件的数量而不是确切的宽度来简化您的代码。

此外,不是通过硬编码数字增加生成位置 x 值,而是使用 gameObject.transform.localScale.x

例如:

public GameObject Cube;

void Start()
{
SpawnRow(Vector3.zero, 10);
}

void SpawnRow(Vector3 startPosition, int RowLength)
{
Vector3 currentPos = startPosition;

for (int i = 0; i < RowLength; i++)
{
Instantiate(Cube, currentPos, Quaternion.identity);
currentPos.x += Cube.transform.localScale.x;
}
}

此外,如果你想做一些事情,比如在彼此旁边生成额外的行,你可以像这样调用 SpawnRow():

void Start()
{
Vector3 currentPos = Vector3.zero;

for (int i = 0; i < 3; i++)
{
SpawnRow(currentPos, 10);
currentPos.z += Cube.transform.localScale.z;
}
}

这将为您提供三行,每行 10 个游戏对象,彼此直接相邻。

关于c# - 如何重置 Vector3 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32978697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com