- Home /
C# 2D GameObject array, why are these two pieces of code not identical?
This first way of assigning GameObjects to the array works for the entire thing, but why does the second way only work once before it breaks and start throwing typecasting errors? Should they both not do the same thing?
this.cubes[x,y] = Instantiate(cubePrefab, pos, Quaternion.identity) as GameObject;
this.cubes[x,y] = (GameObject)Instantiate(cubePrefab, pos, Quaternion.identity);
Here is the whole body of code:
private GameObject[,] cubes;
public Transform cubePrefab;
void Setup(int numOfCubesX, int numOfCubesY)
{
Vector3 pos = new Vector3(0f,0f,0f);
this.cubes = new GameObject[numOfCubesX, numOfCubesY];
for(int x = 0; x < numOfCubesX; x++)
{
for(int y = 0; y < numOfCubesY; y++)
{
pos.x = x * 1.5f;
pos.y = y * 1.5f;
Debug.Log("making cube at (" + x + "," + y);
this.cubes[x,y] = Instantiate(cubePrefab, pos, Quaternion.identity) as GameObject;
}
}
}
Answer by oatsbarley · Jan 25, 2014 at 11:42 PM
Those two statements are doing different things, and respond differently if they can't convert between the source type and target type.
From as (C# Reference):
The as operator is like a cast operation. However, if the conversion isn't possible, as returns null instead of raising an exception.
From Casting and Type Conversions (C# Programming Guide):
a type cast that fails at run time will cause an InvalidCastException to be thrown
The as
statement is effectively ignoring the problem and continuing, whereas the explicit cast is properly throwing an exception.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Weird - IndexOutOfRangeException: Array index is out of range. 1 Answer
Put user list in 2d array 1 Answer