Unity 2D - 如何在 运行 游戏中放置障碍物?

Unity 2D - How to place obstacle in Running game?

我完成了 运行 游戏。但我这样设置了障碍:

这种方式使得phone经常冻结。所以我做了一个prefeb,它是由这样的障碍对象组成的:

我想用函数SetActive(bool)来appear/disappear障碍。最后,它的工作原理是我的跑步者处于静止状态,背景、障碍物、硬币、juwel 被移动。但是我的创作者脚本有一个大问题。

我的问题:

如您所见,这段代码在两个障碍物预置之间创建了空白(红色框)。我找不到问题。请帮助我...

创作者脚本:

using UnityEngine;
using System.Collections;

public class CsPartCreator : MonoBehaviour {
    int count = 1;
    float timer = 0.0f;

    // Use this for initialization
    void Start () {
        for (int i = 1; i < 26; i++)//set Deactive all object excluding first object (Because This object is watched at first.)
            transform.GetChild(i).gameObject.SetActive(false);
    }

    // Update is called once per frame
    void Update () {
        timer += Time.deltaTime;

        if (timer > 5f && count < 23)//every 5 seconds and count is smaller than the number of prefeb
        {
            transform.GetChild(count).gameObject.SetActive(true);//
            count++;
            timer = 0;
        }
    }
}

这是我的层次结构:

我认为,缺少预制件的Z值比背景更负,或者您使用了设置在背景后面的排序层。

然后检查 Hirachy Part0、Part1、Part2、Part3 中的所有障碍游戏对象是否正确排序。让我知道这些顺序是否正确

请检查:)

using UnityEngine;
using System.Collections;
using System.Linq;
using System.Collections.Generic;

public class CsPartCreator : MonoBehaviour
{
    private GameObject player;

    float timer = 0.0f;

    private List<GameObject> obstacles;

    void Awake()
    {
        player = GameObject.FindWithTag("Player");
        obstacles = new List<GameObject>();
    }

    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < 26; i++)//set Deactive all object excluding first object (Because This object is watched at first.)
        {
            obstacles.Add(transform.GetChild(i).gameObject);
            transform.GetChild(i).gameObject.SetActive(false);

        }
    }

    // Update is called once per frame
    void Update()
    {
        if (obstacles == null || obstacles.Count() == 0)
            return;

        var toActivate = obstacles.Where(x => x.transform.position.x > transform.position.x && x.transform.position.x < transform.position.x + 10).ToList(); // +10 is the range
        foreach (GameObject go in toActivate)
        {
            go.SetActive(true);
            obstacles.Remove(go);
        }
    }
}

将玩家游戏对象设置为 "Player" 标签,如下图所示