How to Instantiate Custom Class

Hello,

I am new to using Unity. I have previously made Android games using Eclipse (and coding in Java).

I am trying to make a game which is built upon a grid of squares. At the moment I have a ‘world’ GameObject in my scene which takes up the whole of the camera’s view and has a world.cs script attached. I also have a ‘square’ GameObject which is linked to a square prefab and has a square.cs script attached.

What I want to do is instantiate multiple ‘square’ prefabs and give each one a different position and a different ‘ID’ which is a ‘private int’ variable in my square.cs script.

In world.cs I have the variables:

int NUMBER_OF_ROWS = 13;
int NUMBER_OF_COLUMNS = 9;
int nextID = 0;
Transform instantiateSquare;

I have dragged the square GameObject to the instantiateSquare variable in the world’s inspector to link it up.

So, in the Awake() function of world.cs I want to do:

for (int i=0; i<NUMBER_OF_ROWS; i++) {			
	for (int j=0; j<NUMBER_OF_COLUMNS; j++) {
		Square localSquare = Instantiate(instantiateSquare, transform.position, transform.rotation);				
		localSquare.ID = nextID;
		nextID++;
						}
				}

It’s all a bit of a mess. It does not like the ‘Square’ as a type before the declaration of localSquare. How can I get Unity to recognize my custom class Square defined in square.cs as a type to instantiate? The error message given is ‘The name ‘Square’ does not exist in the current context’. I had the code working to some degree with the Square changed to Transform (and a few other tweaks I’ve since forgotten) but then I got the error 'UnityEngine.Transform does not contain a definition for ‘ID’.

I do not want to create a Generic type of prefab based on Transform, I want to create a Square with variables that I can set and manipulate in its own script. Any help is greatly appreciated.

Add to top variable declaration section

private Square mySquare;

Add to Awake

mySquare = gameObject.GetComponent<Square>;

(assuming Square is attached to this gameObject, if not need to combine with a Find or other mechanism to “get” reference). Edit: looks like you want a bunch of Squares

Add to top of .cs file

using System.Collections.Generic;

Add to variable declaration

private List<Square> allSquares = new List<Square>();

(or similar for Array )

Post back if I’ve gotten bits of this wrong.