- Home /
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.
Answer by getyour411 · Feb 09, 2014 at 12:56 AM
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.
Your answer
Follow this Question
Related Questions
Instantiate A Prefab 1 Answer
Access prefab's variables after instantiation 1 Answer
Instantiate in Editor 1 Answer
Instantiated object don't recognize MouseClick. 0 Answers
Accessing Script on instated prefab 1 Answer