gpt4 book ai didi

c# - GameObject 不允许超过一个 child

转载 作者:行者123 更新时间:2023-11-30 15:56:50 27 4
gpt4 key购买 nike

所以基本上我是在尝试将一群 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。任何人都可以向我解释这种行为吗?SnakeHeadSnakeBodyPart 都是作为 3D 对象添加到我的项目中的简单球体。

最佳答案

我假设 snakeHeadsnakeBodyPart 都是预制件。

问题是您正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com