GameObject不允许多个孩子

所以基本上我正在尝试将一堆子项添加到GameObject中。 父SnakeHead称为SnakeHead而所有其他SnakeBodyParts称为SnakeBodyParts

 public class GameController : MonoBehaviour { public GameObject snakeHead; public GameObject snakeBodyPart; public List snakeBodyParts; void Start() { snakeBodyParts = new List(); Instantiate(snakeHead); for (int i = 0; i < 4; i++) { var newObj = Instantiate(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); } } } 

所以它像snakeHead.transform.childCount;一样snakeHead.transform.childCount; 是1.任何人都可以向我解释这种行为吗? SnakeHeadSnakeBodyPart都是一个简单的Sphere,作为3D对象添加到我的项目中。

我认为snakeHeadsnakeBodyPart都是预制件。

问题是您使用snakeHead预制件而不是实例化的snakeHead设置snakeBodyPart的父

当你实例化snakeHead时 ,你应该将它存储到一个临时变量中,用它来设置每个实例化的snakeBodyPart( newObj )的父变量。

Instantiate(snakeHead)应该是GameObject snakeHaedObj = Instantiate(snakeHead); 那么你可以做snakeHaedObj .transform.childCount; 稍后检查计数并使用newObj.transform.SetParent(snakeHaedObj.transform);设置每个snakeBodyPart的父newObj.transform.SetParent(snakeHaedObj.transform);

像这样的东西:

 public GameObject snakeHead; public GameObject snakeBodyPart; public List snakeBodyParts; GameObject snakeHaedObj; void Start() { snakeBodyParts = new List(); snakeHaedObj = Instantiate(snakeHead); for (int i = 0; i < 4; i++) { var newObj = Instantiate(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只会返回直接子childCount返回子childCount下的对象。 看一下这篇文章,了解如何做到这一点。