所以基本上我是在尝试将一群 child 添加到游戏对象中。父游戏对象称为 SnakeHead
,而所有其他游戏对象称为 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
都是作为 3D 对象添加到我的项目中的简单球体。
最佳答案
我假设 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发布如何做到这一点。
关于c# - GameObject 不允许超过一个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46060208/