2017-09-05 62 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的帖子,了解如何做到这一点。

相关问题