所以基本上我试图将一堆子项添加到GameObject中。父GameObject被称为SnakeHead
,而所有其他GameObject被称为SnakeBodyParts
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);
}
}
}
所以它像snakeHead.transform.childCount;
一样令人讨厌是1.有人可以向我解释这种行为吗?
SnakeHead
和SnakeBodyPart
都是一个简单的Sphere,作为3D对象添加到我的项目中。
答案 0 :(得分:3)
我认为 snakeHead 和 snakeBodyPart 都是预制件。
问题是您使用snakeHead预制件而不是实例化的 snakeHead 设置 snakeBodyPart 的父级。
当您实例化 snakeHead 时,您应该将其存储到临时变量中,使用它来设置每个实例化的snakeBodyPart(newObj
)的父级。
Instantiate<GameObject>(snakeHead)
应为GameObject snakeHaedObj = Instantiate<GameObject>(snakeHead);
,然后您可以snakeHaedObj .transform.childCount;
稍后查看计数,并将每个 snakeBodyPart 的父级设为newObj.transform.SetParent(snakeHaedObj.transform);
这样的事情:
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帖子,了解如何操作。