childCount始终为0

时间:2015-04-21 15:09:24

标签: c# unity3d game-engine

public void CreateEnemyObjectsToRoad( RoadPool roadpool, int numberOfEnemies, int enemyType )
    {
        enemy = new Transform[numberOfEnemies];
        enemyIndex = new int[numberOfEnemies];

        int arrayedEnemyObject = 0;
        int enemyObjectsDistance = 1;
        int randomSpawn = Random.Range( 0, 3 );

        for( int i = 0; i < road.Length; i++ )
        {
            int numberOfParents;
            Transform parentObject;

            if( randomSpawn == 0 )
            {
                parentObject = road[i].Find("SpawnPoint1");
            }
            else if( randomSpawn == 1 )
            {
                parentObject = road[i].Find("SpawnPoint2");
            }
            else if( randomSpawn == 2 )
            {
                parentObject = road[i].Find("SpawnPoint3");
            }
            else
            {
                parentObject = road[i].Find("SpawnPoint4");
            }

            numberOfParents = parentObject.childCount;

            Debug.Log(parentObject);
            Debug.Log(numberOfParents);

            for( int j = 0; j < numberOfParents && arrayedEnemyObject < numberOfEnemies; j++ )
            {
                Transform obj = roadpool.PullEnemyOjbectsFromPool(enemyType);
                obj.position = parentObject.GetChild(j).position;
                obj.gameObject.SetActive(true);

                enemy[j] = obj;
                enemyIndex[j] = enemyType;

                arrayedEnemyObject++;
            }
        }
    }

我试图将敌人产生到我无限道路的随机点。我用Transform创建了父。它可以工作,但是当我试图计算它不起作用时我必须计算父母,我的numberOfParents变量总是为零。

的debug.log My Debug.Log

Road Prefab My Road Prefab

1 个答案:

答案 0 :(得分:0)

您是否在运行时实例化SpawnPoint1等?如果是这样的话,那就是#Spa; SpawnPoint1(克隆)&#34;。与单独查找名称相比,标签和图层名称更容易。在检查器中转到Tag,并为其指定唯一的标签名称。之后,您可以找到带有标签名称的对象(有积分函数)。查找具有特定标记/图层名称的对象数量应该很容易。只需将孩子标记为&#34; spawnChild&#34;然后执行以下操作:

 var childCount : int = GameObject.FindGameObjectsWithTag("spawnChild").Length;

还可以使用Debug.Log来获取每个if / then的数量。理想情况下,您应该使用case语句而不是if / then,但我认为它并不重要。您也可能想要在for循环之外初始化Transform或int变量。

此外,您可能希望在变换上执行childCount而不是GameObject,例如:

parentObject.transform.childCount

或者你可以

parentObject = road[i].Find("SpawnPoint1").transform;

或者你应该GameObject parentObject;Transform parentObject;。然后你可以找到GameObject的转换。