x


Randomizing tile textures

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)];
                }
            }
        }
more ▼

asked May 14 '11 at 03:45 PM

JuggmasterZero gravatar image

JuggmasterZero
1 1 1 1

(comments are locked)
10|3000 characters needed characters left

2 answers: sort newest

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?

more ▼

answered May 14 '11 at 07:01 PM

JuggmasterZero gravatar image

JuggmasterZero
1 1 1 1

(comments are locked)
10|3000 characters needed characters left

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;
more ▼

answered May 14 '11 at 03:55 PM

Eric5h5 gravatar image

Eric5h5
80.3k 42 132 521

Ah, okay, thanks. The script reference was really vague on the material part.

May 14 '11 at 03:58 PM JuggmasterZero
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x5099
x1478
x99

asked: May 14 '11 at 03:45 PM

Seen: 751 times

Last Updated: May 14 '11 at 03:45 PM