[TUTORIAL] Mudando material
2 participantes
Página 1 de 1
[TUTORIAL] Mudando material
olá galera venho aqui postar um tutorial de mudar o material de meshes e Skinmeshes, coloque esse script no obj que quer trocar os materiais, ele mudara todos os materiais dos filhos também, em um botão muda para o material selecionado e no outro volta ao original;
CONFIRAM MEU PROJETO :bounce: :bounce:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class MudandoMaterial : MonoBehaviour
{
public bool MudarMaterial;
public bool VoltarMaterial;
[Space(20)]
public Material MaterialTrocar;
// Variaveis dos Materiais
[Serializable]
public class MatsOriginal
{
[Space(10)]
[HideInInspector]
public SkinnedMeshRenderer[] Skins;
[Space(20)]
[HideInInspector]
public MeshRenderer[] Meshes;
[Space(10)]
public List<SkinnedMeshRenderer> SkinsAchados;
public List<MeshRenderer> MeshesAchados;
[Space(20)]
public List<Mats> SkinsMats;
[Space(20)]
public List<Mats> MeshesMats;
[Serializable]
public class Mats
{
public Material[] Materiais;
}
}
[Space(30)]
public MatsOriginal MaterialOriginal;
float CroGuard;
void GuardarMateriais()
{
if (CroGuard == 0)
{
MaterialOriginal.Skins = GetComponentsInChildren<SkinnedMeshRenderer>();
for (int x = 0; x < MaterialOriginal.Skins.Length; x++)
{
if (!MaterialOriginal.SkinsAchados.Contains(MaterialOriginal.Skins[x]))
{
MaterialOriginal.SkinsAchados.Add(MaterialOriginal.Skins[x]);
MaterialOriginal.SkinsMats.Add(new MatsOriginal.Mats());
MaterialOriginal.SkinsMats[x].Materiais = MaterialOriginal.Skins[x].materials;
}
}
}
CroGuard += Time.deltaTime;
if (CroGuard <= 1)
{
MaterialOriginal.Meshes = GetComponentsInChildren<MeshRenderer>();
for (int x = 0; x < MaterialOriginal.Meshes.Length; x++)
{
if (!MaterialOriginal.MeshesAchados.Contains(MaterialOriginal.Meshes[x]))
{
MaterialOriginal.MeshesAchados.Add(MaterialOriginal.Meshes[x]);
MaterialOriginal.MeshesMats.Add(new MatsOriginal.Mats());
MaterialOriginal.MeshesMats[x].Materiais = MaterialOriginal.Meshes[x].materials;
}
}
}
}
[Space(10)]
public List<Material> MateriaisOriginais;
void TransformarEmPedra()
{
SkinnedMeshRenderer[] Skins = GetComponentsInChildren<SkinnedMeshRenderer>();
// torna o material de pedra nas Skins
for (int s = 0; s < Skins.Length; s++)
{
Material[] Mats = Skins[s].materials;
for (int m = 0; m < Mats.Length; m++)
{
MateriaisOriginais.Add(Skins[s].materials[m]);
Mats[m] = MaterialTrocar;
}
Skins[s].materials = Mats;
}
MeshRenderer[] Meshs = GetComponentsInChildren<MeshRenderer>();
// Torna pedra todas as meshes
for (int s = 0; s < Meshs.Length; s++)
{
Material[] Mats = Meshs[s].materials;
for (int m = 0; m < Mats.Length; m++)
{
MateriaisOriginais.Add(Skins[s].materials[m]);
Mats[m] = MaterialTrocar;
}
Meshs[s].materials = Mats;
}
}
private void Start()
{
GuardarMateriais();
}
private void Update()
{
if (MudarMaterial)
{
Invoke("TransformarEmPedra", 0.1f);
MudarMaterial = false;
}
if (VoltarMaterial)
{
Invoke("VoltarMateriais", 0.1f);
VoltarMaterial = false;
}
}
void VoltarMateriais()
{
{// esta void toca quando o obj é destruido e nesse caso serve para tornar os materiais originais novamente
SkinnedMeshRenderer[] Skins = GetComponentsInChildren<SkinnedMeshRenderer>();
// torna o material de pedra nas Skins
for (int s = 0; s < Skins.Length; s++)
{
Skins[s].materials = MaterialOriginal.SkinsMats[s].Materiais;
}
MeshRenderer[] Meshs = gameObject.GetComponentsInChildren<MeshRenderer>();
// Torna pedra todas as meshes
for (int s = 0; s < Meshs.Length; s++)
{
Meshs[s].materials = MaterialOriginal.MeshesMats[s].Materiais;
}
}
}
}
CONFIRAM MEU PROJETO :bounce: :bounce:
Re: [TUTORIAL] Mudando material
To tentando usar seu código mas não ta funcionando. O que eu quero é só a parte que voltar o material para o material original depois de trocar ele. Poderia me ajudar?
buyakyo- Iniciante
- PONTOS : 667
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mudando material
linha 147, mudar 'Skins' para 'Meshs' que vai funcionar. Tentei editar meu comentário mas não sei como que faz, tb não sei pq a letra mudou de cor kkkkbuyakyo escreveu:To tentando usar seu código mas não ta funcionando. O que eu quero é só a parte que voltar o material para o material original depois de trocar ele. Poderia me ajudar?
buyakyo- Iniciante
- PONTOS : 667
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Mudando o FOG
» [TUTORIAL] Mudar material quando Acender luz
» [TUTORIAL] Trocar material ao apertar botão
» [TUTORIAL] Unity 2017 - Cores aleatórias em um material
» [TUTORIAL] Introdução para iniciante e tutorial de Click move com raycast
» [TUTORIAL] Mudar material quando Acender luz
» [TUTORIAL] Trocar material ao apertar botão
» [TUTORIAL] Unity 2017 - Cores aleatórias em um material
» [TUTORIAL] Introdução para iniciante e tutorial de Click move com raycast
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos