【发布时间】:2017-09-05 17:12:48
【问题描述】:
所以基本上我想将一堆孩子添加到游戏对象中。父游戏对象称为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 都是一个简单的 Sphere,作为 3D 对象添加到我的项目中。
【问题讨论】:
-
当你在调试器中运行这个并暂停时,你能在编辑器中看到其他的孩子吗?
-
你能告诉我你在哪里打电话给
.childcount -
@SandyGifford 除了 SnakeHead,我还看到了 5 个其他游戏对象(SnakeBodyPart 的原件和 4 个克隆)。所以奇怪的是,snakeBodyParts 的原件是 SnakeHead 的子代,而我在这个 for 循环中实例化的所有克隆都不是。
-
@ryemoss 就在 for 循环之后。
-
看起来您正在使用蛇头作为可实例化的预制件,但在实例化后从未保存对它的引用 (
Instantiate<GameObject>(snakeHead);)。您是否使用库中的预制件在编辑器中设置了蛇头?还是与游戏世界中的一个对象?