【问题标题】:Objects won't spawn at correct location对象不会在正确的位置生成
【发布时间】:2019-10-28 23:01:11
【问题描述】:

我正在尝试以随机模式生成立方体。

首先,一个立方体被生成到世界中。然后生成一个随机数。这个数字决定了下一个立方体的生成位置。我们称它为 cube1 生成 cube1 后,cube2 应该使用 cube1 的位置来生成,但它仍然使用原始立方体的位置。

我不明白为什么。

我已经尝试使用 Debug.Log 来查看不同的位置,但无论我尝试什么,我似乎都无法让它工作。

public class GenerateDungeon: MonoBehaviour {

    public GameObject[] cells;
    public int number = 0, i = 0;

    public void Start()
    {
        Instantiate(cells[i], new Vector3(0, 0, 0), Quaternion.identity);

        while(i < 2)
        {
            number = Random.Range(1, 5);

            i++;

            if (number == 1)
            {
                Instantiate(cells[i], cells[i - 1].transform.position + new Vector3(0, 4, 0), Quaternion.identity);
            }
            else if (number == 2)
            {
                Instantiate(cells[i], cells[i - 1].transform.position + new Vector3(4, 0, 0), Quaternion.identity);
            }
            else if (number == 3)
            {
                Instantiate(cells[i], cells[i - 1].transform.position + new Vector3(0, -4, 0), Quaternion.identity);
            }
            else if (number == 4)
            {
                Instantiate(cells[i], cells[i - 1].transform.position + new Vector3(-4, 0, 0), Quaternion.identity);
            }

        }
    }
}

我没有收到任何错误消息,但它没有按照我的预期工作。

【问题讨论】:

  • 您在两次调用中使用相同的随机范围,因此它可以对超过 1 个立方体使用相同的数字。
  • ",但它并没有按照我的预期工作。",这对我们来说不是一个很好的诊断吗?

标签: c# unity3d


【解决方案1】:

调用 Instantiate 时,第一个参数是要复制的对象,而不是复制到的目标引用。

所以,您可能想要的是存储对源对象的引用:

public GameObject CubeToCopy;

然后在实例化时,您希望像这样将每个复制到数组中:

cells[i] = Instantiate(CubeToCopy, [...]);

这样,'cells' 数组将存储您实际实例化的对象,并且您的位置逻辑应该开始正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2018-01-16
    相关资源
    最近更新 更多