This is what I tried. Successfully generated a 10x10 grid of tiles. The tiles are coming out textureless, however. Help!!!
var Cliff : Material;
var Dirt : Material;
var Grass : Material;
var Rock : Material;
var Tile : Transform;
var aTextures : Array;
function Start()
{
aTextures = new Array(Cliff, Dirt, Grass, Rock);
for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
Instantiate(Tile, Vector3(x*10 ,y*10 , 0), Quaternion.Euler(90,0,0));
Tile.renderer.materials[1] = aTextures[Random.Range(0, aTextures.length)];
}
}
}
A couple things; one, you're trying to change renderer.materials on the actual prefab, instead of the instance. Instead do this:
var thisTile = Instantiate(Tile...
thisTile.renderer...
Two, renderer.materials doesn't work that way. It's likely you meant renderer.material anyway, but in case you actually are using multiple materials per tile, then you need to do something like
var materialsArray = tile.renderer.materials;
materialsArray[1] = ...
tile.renderer.materials = materialsArray;
Okay, I got it working by setting the first material instead of trying to do the second. Here's the code:
var matCliff : Material;
var matDirt : Material;
var matGrass : Material;
var matRock : Material;
var preTile : Transform;
var aMaterials : Array;
function Start()
{
for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
aMaterials = Array(matCliff, matDirt, matGrass, matRock);
var thisTile = Instantiate(preTile, Vector3(x*10 ,y*10 , 0), Quaternion.Euler(90,0,0));
thisTile.renderer.material = aMaterials[Random.Range(0, aMaterials.length)];
}
}
}
After I got that working, I was messing around with the code to highlight tiles. Here's that code:
function OnMouseOver()
{
renderer.materials[1].color = Color(.5,.5,.5,.5);
}
function OnMouseExit()
{
renderer.materials[1].color = Color(.5,.5,.5,0);
}
Why does this code work and trying to assign a material this way does not?