2016-11-19 246 views
1

我完成製作跑步遊戲。但我把障礙是這樣的:Unity 2D - 如何在跑步遊戲中放置障礙物?

enter image description here

這樣使得凍結經常電話。所以我做一個prefeb是這樣做的障礙的對象:

enter image description here

enter image description here

我想使用的功能SetActive(bool)出現/消失的障礙。最後,它是如何工作的是我的跑步者處於停滯和背景,障礙,硬幣,寶寶移動。但是我的創建者腳本有一個很大的問題。

我Prolem:

enter image description here

正如你看到的,此代碼創建兩個障礙物之間prefebs空白(紅色框)。我找不到問題。 PLZ幫我...

造物主腳本:

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; 
     } 
    } 
} 

這是我的層次:

enter image description here

+0

圖像被放置在0,0第一個障礙,在預製0? –

+0

@SteveJobs不,它不是。 – Diana

+0

您已經將這些預製件放置在場景中,並且您想要做的是將那些預製件設置爲玩家走動,對嗎? ,還是那些預製實例化和由另一個腳本放置? –

回答

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); 
     } 
    } 
} 

設置玩家遊戲對象爲「播放器」標籤,如下 enter image description here

+0

仍Part0和Part3是活躍的......但謝謝你的詳細解釋和幫助! – Diana

+0

如果可能的話,您可以向我發送您的項目副本,如果這不太大,我會調查此問題並讓您知道究竟發生了什麼。 –

+0

哦,這一次,當我將'transform.position.x'替換爲'player.transform.position.x'時,所有部分都處於停用狀態 – Diana