domingo, 23 de março de 2014

Mudar material / textura de um objeto via código na Unity

Muitas vezes precisamos alterar o material / textura de um game object via código em tempo de execução durante nosso jogo.

É muito simples fazer isso, veja só:

// Primeiramente precisamos criar um script .js, declaramos também 2 variáveis:

var material1: Material;
var material2: Material;

// A variável material1 corresponde ao material padrão do nosso objeto e a material2
// corresponde ao material que desejamos aplicar ao game object em tempo de execução.

function Start () {
material1 = transform.renderer.material;
}

// No método Start() que é o primeiro a ser chamado em nosso script, definimos material1
// com a textura 'padrão' ou 'original' do nosso objeto.

// Agora precisamos definir de acordo com nosso projeto qual será o 'gatilho' que vai disparar
// a troca de material, neste caso vou utilizar o método abaixo:

function OnMouseExit () {
transform.renderer.material = material2;
}

// O método OnMouseExit () é chamado quando o mouse 'sai' de cima do nosso game object
// Dentro dele utilizo o comando 'transform.renderer.material = material2'
// Esse comando é responsavel por alterar o material do objeto, no caso, vai alterar o material
// do objeto ao qual esse script está anexado, fácil não? :)

Caso você queria que o objeto retorne a sua textura original basta utilizar a mesma linha de comando anterior só que agora atribuindo o material1:

transform.renderer.material = material1;

Importante: Neste script você deve inserir o material2 manualmente quando tiver anexado esse script ao seu game object, porém se você quiser carregar em tempo de execução basta inserir essa linha dentro do método Start():

material2 = Resources.Load("Nome do Material", Material);

Esse método carrega um material correspondente ao nome enviado por parâmetro, lembrando que o material deve estar dentro de uma pasta chamada Resources que deve ser criada dentro da pasta Assets do projeto.

Um comentário: