Como alterar todos os materiais de um mesh renderer?
5 participantes
Página 1 de 1
Como alterar todos os materiais de um mesh renderer?
Basicamente isto, quero alterar todos os materiais de um gameObject para outro, posso alterar apenas o primeiro material usando gameObject.GetComponent<MeshRenderer> ().material = materialQueEuDesejar;, mas não consigo usar o <MeshRenderer>().materials[];
todos os tópicos que vi no fórum da unity são da idade da pedra e não funcionam mais, ou são em javascript que não entendo nada. Uma ajuda seria de grande beneficio. Obrigado.
todos os tópicos que vi no fórum da unity são da idade da pedra e não funcionam mais, ou são em javascript que não entendo nada. Uma ajuda seria de grande beneficio. Obrigado.
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Faz assim:
Referências:
https://docs.unity3d.com/ScriptReference/MeshRenderer.html
https://docs.unity3d.com/ScriptReference/Material.html
https://unity3d.com/pt/learn/tutorials/topics/scripting/loops
https://answers.unity.com/questions/164600/foreach-loop-with-an-array-of-gameobjects.html
Espero ter lhe ajudado.
- Código:
public MeshRenderer[] rend;
public void MudarMateriais(Material a){
foreach(MeshRenderer b in rend){
b.material = a;
}
}
Referências:
https://docs.unity3d.com/ScriptReference/MeshRenderer.html
https://docs.unity3d.com/ScriptReference/Material.html
https://unity3d.com/pt/learn/tutorials/topics/scripting/loops
https://answers.unity.com/questions/164600/foreach-loop-with-an-array-of-gameobjects.html
Espero ter lhe ajudado.
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Tbm estava precisando de algo parecido igual a este, mais acabei desistindo
mas tenta ai pode ser que funcione
ou
mas tenta ai pode ser que funcione
- Código:
public MeshRenderer[] rend;
void Start(){rend = GetComponentsInChildren<MeshRenderer>();}
public void MudarMateriais(Material a){
foreach(MeshRenderer b in rend){
b.material = a;
}
}
}
ou
- Código:
public MeshRenderer[] rend;
public void MudarMateriais(Material a){
foreach (MeshRenderer b in GetComponentsInChildren<Renderer>())
b.material = a;
}
}
ffabim- MembroAvançado
- PONTOS : 3354
REPUTAÇÃO : 69
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
não da certo, primeiro porque é uma array, segundo porque não quero uma array com os mesh renderers"ate porque usualmente so tem 1 por gameobjects" e sim uma array com todos os materiais no mesh renderer.
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Estranho, mais não entendi você tem uma mesh com vários materiais e não quer usar array?
ffabim- MembroAvançado
- PONTOS : 3354
REPUTAÇÃO : 69
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
to falando que não da de usar
rend = GetComponent<MeshRenderer>();
Porque a variável rend é uma array [] , segundo porque eu não quero fazer um loop nas minhas mesh renderers, logo porque o objeto só tem uma, no caso seria feito um loop em cada material dentro da mesh renderer, mas já tentei de vários jeitos e não consegui nenhum resultado
rend = GetComponent<MeshRenderer>();
Porque a variável rend é uma array [] , segundo porque eu não quero fazer um loop nas minhas mesh renderers, logo porque o objeto só tem uma, no caso seria feito um loop em cada material dentro da mesh renderer, mas já tentei de vários jeitos e não consegui nenhum resultado
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Entendi, veja ai se funciona estou sem unity no momento
- Código:
public Material[] materials;
public MeshRenderer rend;
public void MudarMateriais(Material newMaterial)
{Material[] materials = new Material[rend.materials.Length];
for (int i = 0; i < materials.Length; ++i)
{
materials[i] = newMaterial;
}
rend.materials = materials;
}
}
ffabim- MembroAvançado
- PONTOS : 3354
REPUTAÇÃO : 69
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Ja deixei funcionando, apenas importei outro modelo com um material apenas vai me servir perfeitamente, melhor do que programar sem saber ashsahashsahas
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
rsrsrs, no caso resolveu o seu problema?
ffabim- MembroAvançado
- PONTOS : 3354
REPUTAÇÃO : 69
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Sim, eu queria fazer isso porque estava com preguiça de importar uma copia do modelo com apenas um material, então tecnicamente já esta resolvido, nem testei seu código mals.
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
cara eu fiz isso de mudar o material para poder tornar meus personagens em pedra, kkk
puta merda que foi tenso pacas,acho que vou fazer um tuto
Public MeshRenderer[] Meshs;
Public Materials[] Material;
Meshs.materials = Material; dessa maneira os material vão ser substituido pelo material
puta merda que foi tenso pacas,acho que vou fazer um tuto
Public MeshRenderer[] Meshs;
Public Materials[] Material;
Meshs.materials = Material; dessa maneira os material vão ser substituido pelo material
Re: Como alterar todos os materiais de um mesh renderer?
Da para fazer uma variável do tipo materials? tenho quase certeza que testei isso e não dava
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Material sempre será no singular, você deve utilizar ele no plural apenas se quiser denominar esta variável assim. Para criar um conjunto de materiais, utilize:
^ Lembre-se de importar as bibliotecas corretamente.
- Código:
Material[] mats;
//Ou faça assim:
List<Material> mat;
^ Lembre-se de importar as bibliotecas corretamente.
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Então como você conseguiu @Dom3000?
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Você usou naquele poder da medusa certo?
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
É meio complicado entender o que você quer. Tente explicar-se novamente, assim podemos lhe ajudar.
@Edit: Você quer mudar o material do objeto?
@Edit: Você quer mudar o material do objeto?
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Tenho alguns mesh renderer que tem de 5 a 7 materiais diferentes cada um, quero trocar todos esses materiais por um outro. Desculpe a falta de clareza, tenho problemas para me expressar.
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
Eu fiz assim para mudar a cor do carro ele tinha como voce falou materiais diferentes mesma cor mais cada parte do carro tinhao ceu, entao eu coloquei o mesmo material neles todos entao quando eu mudo a cor ele muda todo objecto entedeu?
Re: Como alterar todos os materiais de um mesh renderer?
eu fiz assim: criei uma classe e nessa classe coloquei uma variavel de array de material, ai criei uma aray dessa nova classe assim fica uma array de aray de materiais, no start eu chamo a função de getcomponetsInChildren das meshes e skinsmeshes, ai eu guardo os materials de cada mesh e skinmeshes nessa minha nova classe, ai quando mudo o material eu substituo o material um por um pelo material da pedra assim as meshes e skinsmesh ficam com o numero de materials original, tipo se a meshes ter 7 materiais ela continua com os 7 materiais so que seram os mesmos, quando quer voltar ao material original, se faz a mesma coisa so em vez de colocar o material se coloca o material original correspondente para cada skinmesh ou mesh;
não sei exatamente se vai funcionar pois não testei mas por esse script vc pode ter uma ideia do que falei em cima
não sei exatamente se vai funcionar pois não testei mas por esse script vc pode ter uma ideia do que falei em cima
- Código:
// 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;
}
}
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;
}}
}
}
public Material MatPedra;
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] = MagiasDeATK.MatPedra;
}
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] = MagiasDeATK.MatPedra;
}
Meshs[s].materials = Mats;
}
}
OnDestoy(){// 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 = AtingidosMagia [p].gameObject.GetComponentsInChildren<MeshRenderer> ();
// Torna pedra todas as meshes
for (int s = 0; s < Meshs.Length; s++) {
Meshs [s].materials = MaterialOriginal.MeshesMats[s].Materiais;
}
}
Re: Como alterar todos os materiais de um mesh renderer?
Consegui, valeu doom, aparentemente o meshRenderer.materials [0] = outromaterial não funciona,
o meu código ficou assim no final;
o meu código ficou assim no final;
- Código:
MeshRenderer rend;
public Material materialATrocar;
Material[] materiais;
void Start(){
materiais = rend.materials;
}
void Update(){
rend.materials = materiais;
TrocarMateriais();
}
void TrocarMateriais(){
if(trocarMaterias == true){
for (int i = 0; i < materiais.Length; i++) {
materiais [i] = materialATrocar;
}
}
}
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
dessa maneira vc vai conseguir mudar o material , mas não vai conseguir devolver o material originalFluttershy28 escreveu:Consegui, valeu doom, aparentemente o meshRenderer.materials [0] = outromaterial não funciona,
o meu código ficou assim no final;
- Código:
MeshRenderer rend;
public Material materialATrocar;
Material[] materiais;
void Start(){
materiais = rend.materials;
}
void Update(){
rend.materials = materiais;
TrocarMateriais();
}
void TrocarMateriais(){
if(trocarMaterias == true){
for (int i = 0; i < materiais.Length; i++) {
materiais [i] = materialATrocar;
}
}
}
Re: Como alterar todos os materiais de um mesh renderer?
Sim, eu não preciso devolver o material para o que eu quero, basicamente é meu sistema de construção, quando eu terminar esse sistema vou postar mais um vídeo de como o jogo esta ficando , faz um tempo desde a ultima vez
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
então blz, fico ansioso para ver o projeto, quero ver um projeto melhor que o meu, ate agora não achei, nenhum
Re: Como alterar todos os materiais de um mesh renderer?
vou postar igual um tutorial aqui no forum sobre isso
Re: Como alterar todos os materiais de um mesh renderer?
Os melhores projetos que já vi aqui no site são o seu e o do marcos4503
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
não vi os do marcos4503@ pode me mandar algum link
o que vi no brasil são jogos indie nada perto de profissional, na gringa já vi muitos bem legais como o do Emushit https://www.youtube.com/channel/UC7T8ybogdDIv0Xncvf09z3w
mas mesmo ele não supera e cara eu achava impossível fazer igual, mas atualmente meu projeto superou o dele ate fiz um Golpe do Dragão que ficou muito foda o shen long se move como no anime mesmo , mas o cara deve estar trabalhando em algum outro projeto quero ver só o que ele vai fazer, deve que sera incrível;
o que vi no brasil são jogos indie nada perto de profissional, na gringa já vi muitos bem legais como o do Emushit https://www.youtube.com/channel/UC7T8ybogdDIv0Xncvf09z3w
mas mesmo ele não supera e cara eu achava impossível fazer igual, mas atualmente meu projeto superou o dele ate fiz um Golpe do Dragão que ficou muito foda o shen long se move como no anime mesmo , mas o cara deve estar trabalhando em algum outro projeto quero ver só o que ele vai fazer, deve que sera incrível;
Re: Como alterar todos os materiais de um mesh renderer?
https://www.schultzgames.com/t7114-alpha-android-winthia-chronicles-alpha-devlog-21-de-marco-de-2018-v-1-6
Eu estou acompanhando o projeto dele e acho que está muito bacana
Eu estou acompanhando o projeto dele e acho que está muito bacana
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Como alterar todos os materiais de um mesh renderer?
cara ta ficando bom mesmo;Fluttershy28 escreveu:https://www.schultzgames.com/t7114-alpha-android-winthia-chronicles-alpha-devlog-21-de-marco-de-2018-v-1-6
Eu estou acompanhando o projeto dele e acho que está muito bacana
cara será que meu projeto vende?
Tópicos semelhantes
» Alterar apenas um Material do Mesh Renderer
» Como adicionar todos materiais de um Obj em um Array ou Lista?
» Skinned Mesh Combiner MT - Combine as malhas (Skinned Mesh Renderer) dos seus personagens!
» (UNITY 3D) Mesh Splitter - Como separar uma Mesh em multiplos Game Objects?
» Alterar componentes de todos os objeto de um array
» Como adicionar todos materiais de um Obj em um Array ou Lista?
» Skinned Mesh Combiner MT - Combine as malhas (Skinned Mesh Renderer) dos seus personagens!
» (UNITY 3D) Mesh Splitter - Como separar uma Mesh em multiplos Game Objects?
» Alterar componentes de todos os objeto de um array
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos