GameObject不允许多个孩子

时间:2017-09-05 17:12:48

标签: c# unity3d

所以基本上我试图将一堆子项添加到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都是一个简单的Sphere,作为3D对象添加到我的项目中。

1 个答案:

答案 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帖子,了解如何操作。