I have the following code:
var grid : GameObject[,];
function Start(){
grid = new GameObject[gridSizeX, gridSizeY];
for(var y : int = 0; y < gridSizeY; y++){
for(var x : int = 0; x < gridSizeX; x++){
var s : GameObject = Instantiate(square, Vector3(transform.position.x-(x * (square.renderer.bounds.size.x)), transform.position.y, transform.position.z+(y * (square.renderer.bounds.size.z))), Quaternion.identity);
grid[x, y] = s;
}
}
}
And then in a different object:
function Start(){
gridData = gameObject.Find("Grid").GetComponent("DefenseGrid");
Debug.Log(gridData);
}
function OnMouseOver(){
gridData.grid[1,2].renderer.material.color = Color.red;
renderer.material.color = Color.red;
}
This throws the error: "MissingFieldException: Field ‘UnityEngine.GameObject[,].’ not found.
This doesn’t make any sense to me at all, since when I do tests in the first object, I can access the array properly.
It worked for me. I used:
//DefenseGrid.js
var grid : GameObject[,];
var gridSizeX : int;
var gridSizeY : int;
var square : GameObject;
function Start(){
grid = new GameObject[gridSizeX, gridSizeY];
for(var y : int = 0; y < gridSizeY; y++){
for(var x : int = 0; x < gridSizeX; x++){
var s : GameObject = GameObject.Instantiate(square, Vector3(transform.position.x-(x * (square.renderer.bounds.size.x)), transform.position.y, transform.position.z+(y * (square.renderer.bounds.size.z))), Quaternion.identity);
grid[x, y] = s;
}
}
}
and:
//WhateverGrid.js
var gridData : DefenseGrid;
function Start(){
gridData = GameObject.Find("Grid").GetComponent("DefenseGrid");
}
function OnMouseOver(){
gridData.grid[1,2].renderer.material.color = Color.red;
renderer.material.color = Color.red;
}
Be sure you write “defense” all over in your script, and not some “defense” and some “defence”. Maybe that triggered your error somehow. I did that mistake once. :S I have never been so frustrated, I could not understand what I did wrong; the code were free of errors elsewhere. Defence and defense are different spellings of the same word 