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

标签 c# unity3d

所以基本上我是在尝试将一群 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/

相关文章:

c# - 使用 Dynamic Linq 库运行总和

c# - Windows Phone 8.1 Pivot 中的两列 Gridview

c# - 如何在使用 Visual Studio 发布应用程序时自动执行 gulp 任务?

c# - 如何将 UI RawImage 转换为字节数组

c# - 为什么我的动画(动画师)延迟了?

c# - Unity : Need to reset a pooled object on return to pool. 也许使用 ScriptableObject?

c# - ASP.Net 中的 response.redirect 问题

c# - 使用 OData 补丁的 asp.net mvc web api 部分更新

unity3d - 带着色器图的双面着色器

c# - 当手靠近/远离 HoloLens 相机时,将游戏对象移近/远离 HoloLens 相机