如何创建平台生成器?

时间:2018-11-02 15:57:11

标签: c# unity3d

我正在尝试创建一个简单的平台生成器,并且想出了以下方法:

float space = Random.Range(0, distance); Instantiate(building, building.transform.GetChild(1).position + new Vector3(building.transform.position.x,0,0)+ new Vector3(space,0,0), Quaternion.identity);

但是,正如预期的那样,它只是根据第一个平台的位置实例化平台。我如何每次都能获得生成平台的位置,而不仅仅是第一个?

2 个答案:

答案 0 :(得分:2)

Instantiate函数返回其实例化的对象。您可以获取该对象并从中获取位置和旋转。

用于保存最后一个实例化对象的全局变量:

public GameObject obj;

实例化并返回对实例化对象的引用:

obj = Instantiate(building, building.transform.GetChild(1).position
    + new Vector3(building.transform.position.x, 0, 0) + new Vector3(space, 0, 0), Quaternion.identity);

访问实例化对象的位置和旋转:

Vector3 pos = obj.transform.position;
Quaternion rot = obj.transform.rotation;

如果您需要使用最后一个实例化对象的位置,则只需检查它是否null。如果null,请使用预制的原始预制位置,因为还没有实例化的预制。如果不是null,则使用最后实例化的对象位置。

if (obj == null)
{
    //Use the original prefab position
    obj = Instantiate(building, building.transform.GetChild(1).position
       + new Vector3(building.transform.position.x, 0, 0) + new Vector3(space, 0, 0), Quaternion.identity);
}
else
{
    //Use last instantiated object position
    obj = Instantiate(building, obj.transform.GetChild(1).position +
        new Vector3(obj.transform.position.x, 0, 0) + new Vector3(space, 0, 0), Quaternion.identity);
}

答案 1 :(得分:0)

我没有使用Unity的经验。但是,在人们循环制作Windows Forms元素的情况下,我可以为您提供此信息:

您可以循环创建它们。并且,每一个信号都会从下一个边界偏移(i * [平台宽度+平台之间的间隙])+偏移量。

您也可以将最后一个平台保留在变量范围之外的变量中。您只需要在第一个发信号时处理它为空(null)即可。并在循环完成后使其超出范围。像这样:

{
  Platform lastPlatform = null;
  for(...){
  }
}

我希望有一些更好的Unity特定解决方案。