如何实例化组中的对象?

How can i Instantiate objects in a group?

public void generateObjectOnTerrain()
    {
        objectPool = new ObjectPool(objectToInstantiate, objectsToInstantiate);

        float randX = 0f;
        float randZ = 0f;

        for (int i = 0; i < objectsToInstantiate; i++)
        {
            if (random == true)
            {
                //Generate random x,z,y position on the terrain
                randX = UnityEngine.Random.Range(xTerrainPos, xTerrainPos + terrainWidth);
                randZ = UnityEngine.Random.Range(zTerrainPos, zTerrainPos + terrainLength);
            }
            else
            {

            }

            float yVal = Terrain.activeTerrain.SampleHeight(new Vector3(randX, 0, randZ));

            var randScaleX = Random.Range(RandScaleMin.x, RandScaleMax.x);
            var randScaleY = Random.Range(RandScaleMin.y, RandScaleMax.y);
            var randScaleZ = Random.Range(RandScaleMin.z, RandScaleMax.z);
            var randVector3 = new Vector3(randScaleX, randScaleY, randScaleZ);

            //Apply Offset if needed
            yVal = yVal + yOffset;

            clonedObject = objectPool.GetInstance();

            if (randomScale == true)
                clonedObject.transform.localScale = randVector3;//new Vector3(randScaleX, randScaleY, randScaleZ);

            if (parent)
                clonedObject.transform.parent = this.transform;

            clonedObject.tag = "ClonedObject";

            clonedObject.transform.position = new Vector3(randX, yVal, randZ);
        }

        createdObjects = GameObject.FindGameObjectsWithTag(objname);

        UpdateList(false, "ClonedObject");
    }

这将在地形区域的随机位置实例化对象。

我想在 else 中,当它不是随机将对象放在一个组中时,有两个主要 parameters/variables,一个设置对象之间的 space,第二个设置如何制作它们例如,如果在 objectsToInstantiate 中有 20 个对象,我将一个变量设置为 4,将另一个变量设置为 10,则对象将在 4 行中,即 5 行,并且对象之间的 space 将从每一面。

如果我有 55 个对象,并且我将其设置为 4 行,那么将有 14 行,每行 4,最后一行将包含 3 个对象。

例如,连续绘制 4 个对象和 5 行 space 的 10:

如果有 23 个对象,那么它将看起来像这样:

没试过,但应该可以。

int columns = 4;
int space = 10;//set these variables from your parameters

Vector2 CalcPosition(int index) // call this func for all your objects
{
    float posX = (index%columns)*space;
    float posY = (index/columns)*space;
    return new Vector2(posX, posY);
}