2017-09-05 101 views
3

所以基本上我試圖添加一堆孩子到GameObject。父遊戲物體被稱爲SnakeHead而所有其他GameObjects被稱爲SnakeBodyPartsGameObject不允許超過一個孩子

public class GameController : MonoBehaviour { 
    public GameObject snakeHead; 
    public GameObject snakeBodyPart; 
    public List<GameObject> snakeBodyParts; 

    void Start() { 
     snakeBodyParts = new List<GameObject>(); 
     Instantiate<GameObject>(snakeHead); 

     for (int i = 0; i < 4; i++) 
     { 
      var newObj = Instantiate<GameObject>(snakeBodyPart); 
      newObj.transform.position = new Vector3(snakeHead.transform.position.x, snakeHead.transform.position.y - (i + 1), 0); 
      newObj.transform.SetParent(snakeHead.transform); 
      snakeBodyParts.Add(newObj); 
     } 
    } 
} 

所以looke像snakeHead.transform.childCount;爲1。任何人都可以向我解釋這種行爲? SnakeHeadSnakeBodyPart都是一個簡單的球體,作爲3D對象添加到我的項目中。

+0

當您在調試器中運行並暫停時,您是否可以在編輯器中看到其他孩子? –

+1

你可以顯示你在哪裏調用'.childcount' – ryeMoss

+0

@SandyGifford除了SnakeHead,我還會看到其他5個GameObject(SnakeBodyPart和4個克隆的原始)。所以奇怪的是,snakeBodyParts的原始版本是SnakeHead的一個孩子,而我在這個for循環中實例化的所有克隆都沒有。 – user2877820

回答

3

我認爲黑魚snakeBodyPart都是預製件。

的問題是,你正在設置snakeBodyPart與蛇頭的父母,而不是預製的實例蛇頭

當你實例黑魚,你應該將其保存至一個臨時變量使用它來設置每個實例snakeBodyPart(newObj)的母公司。

Instantiate<GameObject>(snakeHead)應該是GameObject snakeHaedObj = Instantiate<GameObject>(snakeHead);那麼你可以做snakeHaedObj .transform.childCount;以後檢查的次數和與​​設置每個snakeBodyPart的父母。

事情是這樣的:

public GameObject snakeHead; 
public GameObject snakeBodyPart; 
public List<GameObject> snakeBodyParts; 

GameObject snakeHaedObj; 

void Start() 
{ 
    snakeBodyParts = new List<GameObject>(); 
    snakeHaedObj = Instantiate<GameObject>(snakeHead); 

    for (int i = 0; i < 4; i++) 
    { 
     var newObj = Instantiate<GameObject>(snakeBodyPart); 
     newObj.transform.position = new Vector3(snakeHead.transform.position.x, snakeHead.transform.position.y - (i + 1), 0); 
     newObj.transform.SetParent(snakeHaedObj.transform); 
     snakeBodyParts.Add(newObj); 
    } 
} 

注意childCount將只返回直接子不但不是對象的孩子下。看看this的帖子,瞭解如何做到這一點。

相關問題