1

我正在尝试使用 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);
            }
                
        }

    }
}
4

2 回答 2

1

对于实例化,它应该可以工作,但不是您想要的方式。如果你想拥有无限的地面,你应该根据玩家的位置添加地面

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

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

  1. 例如更改函数名(InstantiateFloor),因为您想在开始时多次调用它
  2. 根据玩家位置调用函数(如上所述)
  3. 只需实例化 1 个大地板(而不是 10 个较小的)并占据那个位置
于 2020-06-24T16:41:57.087 回答
-1

为什么不使用实例化返回的游戏对象?

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

if (count == 10)
    {
        lastPosition = newObject .position;
        Debug.Log("Last Position: " + lastPosition);
    }
于 2020-06-24T19:20:37.740 回答