Unity:获取最后克隆的实例化对象的位置

时间:2020-06-24 16:34:01

标签: c# unity3d clone object-pooling objectinstantiation

我正在尝试使用Unity为Android创建无限的基础。尝试使用对象池来实现地面重复,但事实证明有些棘手。 我可以实例化并沿x轴创建克隆。

我想要实现的是获取最后一个克隆对象的位置并将其设置为的新位置,并在新位置创建新对象并再次实例化。

我需要与转换父级一起工作吗? 我在这方面走对了吗?

下面的代码。

public class InfiniteGround : MonoBehaviour
{
    public Transform ground1Obj;
    private int count;
    private Vector3 lastPosition;
   
    void Start()
    {
        count = 0;
        for (int i = 0; i < 10; i++)
        {
            Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
            count++;
            if (count == 10)
            {
                lastPosition = ground1Obj.position;
                Debug.Log("Last Position: " + lastPosition);
            }
                
        }

    }
}

2 个答案:

答案 0 :(得分:1)

对于实例化,它应该起作用,而不是您打算的方式。如果您想拥有无限的地面,则应根据玩家的位置添加地面

  • 如果玩家前进,则在他和 摧毁他身后的旧土地。
  • 如果玩家向后移动,实例化他身后的新地面, 摧毁他面前的旧土地

如果您想更改代码。我会:

  1. 更改函数名称(例如InstantiateFloor),因为您想在开始时多次调用它
  2. 根据播放器位置调用函数(如上所述)
  3. 只需实例化一个大地板块(而不是10个较小的地板块)并占据其位置

答案 1 :(得分:-1)

为什么不使用实例化返回的Gameobject?

GameObject newObject = Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
count++;

if (count == 10)
    {
        lastPosition = newObject .position;
        Debug.Log("Last Position: " + lastPosition);
    }
相关问题