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.任何人都可以向我解释这种行为吗? SnakeHead
和SnakeBodyPart
都是一个简单的Sphere,作为3D对象添加到我的项目中。
我认为snakeHead和snakeBodyPart都是预制件。
问题是您使用snakeHead预制件而不是实例化的snakeHead设置snakeBodyPart的父级 。
当你实例化snakeHead时 ,你应该将它存储到一个临时变量中,用它来设置每个实例化的snakeBodyPart( newObj
)的父变量。
Instantiate
应该是GameObject snakeHaedObj = Instantiate
那么你可以做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
下的对象。 看一下这篇文章,了解如何做到这一点。