对象未正确合并

Objects not pooling correctly

我在合并一些对象时遇到问题。我查看了我们在 class 中获得的用于重新创建场景但不同的起始文件,但我没有得到正确的结果而且我似乎无法弄清楚:/

我有的是:

具有 3 个子对象池(ground、dew、corona)的环境。 ground 有 3 个 child(飞机),dew 和 corona 都有 10 个 child(模型)。

我想做的是将数组中的第一个对象移动到数组的最后一个位置,并更改 z 位置以在玩家 运行 超过它后将其向前移动。

一旦我的角色经过某个位置,我的地面物体就会正确地向前移动,但是露水和日冕却不会,我不明白为什么。

这是我正在使用的代码:

public class Environment : MonoBehaviour
{

    List<Transform> dews = new List<Transform>();
    List<Transform> coronas = new List<Transform>();
    List<Transform> grounds = new List<Transform>();

    Transform player;

    int propsCount = 0;
    int groundCount = 0;

    // Use this for initialization
    void Start()
    {
        player = GameObject.Find("Player").transform;

        dews = GameObject.Find("DewPool").GetComponentsInChildren<Transform>().ToList();
        coronas = GameObject.Find("CoronaPool").GetComponentsInChildren<Transform>().ToList();
        grounds = GameObject.Find("GroundPool").GetComponentsInChildren<Transform>().ToList();

        dews.RemoveAt (0);
        coronas.RemoveAt (0);
        grounds.RemoveAt (0);

    }

    // Update is called once per frame
    void Update()
    {
        // Voeg hier code toe voor Object Pooling!
        Vector3 nieuwePos;

        if (player.transform.position.z > dews[0].transform.position.z + 5)
        {
            dews[0].transform.position = nieuwePos = new Vector3(dews[0].transform.position.x, dews[0].transform.position.y, dews[0].transform.position.z + 50);
            dews.Add(dews[0]);
            dews.RemoveAt(0);
        }

        if (player.transform.position.z > coronas[0].transform.position.z + 5)
        {
            coronas[0].transform.position = nieuwePos = new Vector3(coronas[0].transform.position.x, coronas[0].transform.position.y, coronas[0].transform.position.z + 55);
            coronas.Add(coronas[0]);
            coronas.RemoveAt(0);
        }
        if (player.transform.position.z > grounds[0].transform.position.z + 40)
        {
            grounds[0].transform.position = nieuwePos = new Vector3(grounds[0].transform.position.x, grounds[0].transform.position.y, grounds[0].transform.position.z + 120);
            grounds.Add(grounds[0]);
            grounds.RemoveAt(0);
        }

    }
}

所有包含对象的池都位于 0,dews 和 coronas 分别从 Z-index 7.5 和 10 开始,副本总是 5 Z 更远。

玩家是一个空的游戏对象,位于 0 - 0 - 4.4,包含模型 Ethan。

第一个露水和电晕被正确地向后推,其余的非常有问题。

如果有人能提供帮助,将不胜感激,在此先感谢!

通过添加

修复了它
for (int i = dews.Count-1; i > 0; i-=2) {
        dews.RemoveAt (i);
    }

    for (int i = coronas.Count-1; i > 0; i-=2) {
        coronas.RemoveAt (i);
    }

进入我的 start() 函数,我的 objects 有另一个 child 而我的 objects 没有。 可能不是最好的解决方案,但现在我可以接受:-)