游戏对象不允许有多个子对象。

3

基本上,我正在尝试将一堆子物体添加到一个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。有人能解释一下这种行为吗? SnakeHeadSnakeBodyPart 都是一个简单的球体,添加到我的项目中作为3D对象。


当您在调试器中运行并暂停时,您能否在编辑器中看到其他子元素? - Sandy Gifford
1
你能展示一下你在哪里调用了.childcount吗? - ryeMoss
@SandyGifford 除了 SnakeHead,我看到还有其他 5 个游戏对象(SnakeBodyPart 的原始对象和 4 个克隆对象)。所以奇怪的是,snakeBodyParts 的原始对象是 SnakeHead 的子对象,而我在这个 for 循环中实例化的所有克隆对象都不是。 - user2877820
@ryemoss 在 for 循环之后。 - user2877820
看起来你正在使用snakeHead作为一个可实例化的预制体,但是在实例化(Instantiate<GameObject>(snakeHead);)之后没有保存对它的引用。你是在编辑器中使用库中的预制件设置了snakeHead吗?还是在游戏世界中使用了一个对象? - Sandy Gifford
1个回答

3
我假设snakeHeadsnakeBodyPart都是预制件。
问题在于你正在将snakeBodyPart的父对象设置为snakeHead预制件,而不是已实例化的snakeHead
当你实例化snakeHead时,应该将其存储到一个临时变量中,然后使用它来设置每个实例化的snakeBodyPart(newObj)的父对象。 Instantiate<GameObject>(snakeHead) 应该改为 GameObject snakeHaedObj = Instantiate<GameObject>(snakeHead); 然后稍后可以通过snakeHaedObj .transform.childCount; 检查数量,并使用newObj.transform.SetParent(snakeHaedObj.transform); 来设置每个snakeBodyPart的父对象。
类似于这样:
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仅返回直接子级,而不包括子级下的对象。请参阅此帖子以了解如何处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接