Instantiate Prefabs on "Grid" Pattern?

Hey!
I want to instantiate a unknown number of prefabs on a pattern. They should spawn in a specific area which has the Form of a funnel/hopper or a half circle like this
69076-spawn-pattern.jpg

so how do i instantiate x prefabs that they don’t get placed over each other and also on a specific pattern

Vector3 pos;
public GameObject obj;
void Start(){
for (int i = 0; i < obj.Length; i++) {
pos = new Vector3[obj.Length];
pos[0] = new Vector3(transform.position.x + i, transform.position.y, transform.position.z);
pos[1] = new Vector3(transform.position.x + i, transform.position.y-1, transform.position.z);
//etc…
Instantiate (obj , pos[0], transform.rotation);
_ Instantiate (obj , pos[1], transform.rotation);_
* //etc…*
* }*
* }*
add number to transform.position.y to make new row . & miniplate the object scale to reduce gap between objects .