GameObject不允许一个以上的孩子 [英] GameObject doesnt allow more than one child

查看:74
本文介绍了GameObject不允许一个以上的孩子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以基本上,我试图将一堆孩子添加到GameObject中.父GameObject称为SnakeHead,而所有其他GameObject称为SnakeBodyParts

So basically I am trying to add a bunch of children to a GameObject. The parent GameObject is called SnakeHead while all the other GameObjects are called 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对象添加到我的项目中的简单Sphere.

So it looke like snakeHead.transform.childCount; is 1. Can anyone explain to me this kind of behaviour? Both SnakeHead and SnakeBodyPart are a simple Sphere added as a 3D Object to my project.

推荐答案

我假设 snakeHead snakeBodyPart 都是预制的.

I assume that snakeHead and snakeBodyPart are both prefabs.

问题在于,您要使用SnakeHead预制而不是实例化的 snakeHead 来设置 snakeBodyPart 的父级.

The problem is that you are setting the parent of the snakeBodyPart with the snakeHead prefab instead of the instantiated snakeHead.

实例化 snakeHead 时,应该将其存储到一个临时变量中,并使用它来设置每个实例化的snakeBodyPart(newObj)的父级.

When you instantiate snakeHead, you are supposed to store it to a temporary variable the use it to set the parent of each instantiated snakeBodyPart(newObj).

Instantiate<GameObject>(snakeHead)应该为GameObject snakeHaedObj = Instantiate<GameObject>(snakeHead);,然后您可以稍后进行snakeHaedObj .transform.childCount;来检查计数并使用newObj.transform.SetParent(snakeHaedObj.transform);设置每个 snakeBodyPart 的父级.

Instantiate<GameObject>(snakeHead) should be GameObject snakeHaedObj = Instantiate<GameObject>(snakeHead); then you can do snakeHaedObj .transform.childCount; later on to check the count and set the parent of each snakeBodyPart with 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将仅返回直接子项,而不返回该子项下的对象.看看这篇帖子,了解如何做到这一点.

Note that childCount will only return the direct child not but not Objects under the child. Take a look at this post for how to do that.

这篇关于GameObject不允许一个以上的孩子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆