Change Material
4 participantes
Página 1 de 1
Change Material
Boa Tarde.
Sei que a troca de cor de objeto é fácil, queria sabe se é possível mudar a cor de um determinado shader/material
Por exemplo tenho "Cordapele,olhos,cabelos,etc, é possível algum comando apenas atingir a cor da pele"?
Acabei de fazer um script, mais ele pega todo player
Sei que a troca de cor de objeto é fácil, queria sabe se é possível mudar a cor de um determinado shader/material
Por exemplo tenho "Cordapele,olhos,cabelos,etc, é possível algum comando apenas atingir a cor da pele"?
Acabei de fazer um script, mais ele pega todo player
- Código:
public void MudarCor (Material mat)
{
for (int x = 0; x < parts.Length; x++)
{
print("New Material");
}
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
Poste o seu script completo;
Phph09- Profissional
- PONTOS : 3789
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Change Material
esse já é o script completo rsrs
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
Isso varia de acordo com o material da mesh... Se o modelo quando modelado, for criado as texturas separadas(olhos, boca, pele e geralmente as roupas ou armaduras), você consegue trocar as cores dos materiais de acordo, mas se for um material para a mesh só, fica complicado... No caso, tu teria que separar os materials para trocar independente, ao contrário, ele trocaria como se fosse um Albebo Map, que trocaria a cor por inteiro. Mas caso esse não seja o caso e esteja separado, você no caso já sabe como trocar a cor? Tu queria detectar qual material seria? O mais fácil seria pegar pelo nome dele, você vê qual é o nome do da pele, e você compara com a variável "name" do material... Veja se assim funciona!
Re: Change Material
Os materiais são separados
eles estão com essas características
Image Ilustrativa
Esse script acima que fiz, mesmo os material sendo separados ele colorir td
teria algum jeito de apenas colorir a pele sem atingir as demais?
eles estão com essas características
Image Ilustrativa
Esse script acima que fiz, mesmo os material sendo separados ele colorir td
teria algum jeito de apenas colorir a pele sem atingir as demais?
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
Faça como eu disse, compare com o nome e depois de um break, ex:
- Código:
public void MudarCor (Material mat) {
for (int x = 0; x < parts.Length; x++) {
if(parts[x].name == "cordoobjeto"){
print("New Material");
break;
}
}
}
Última edição por recagonlei em Qui Dez 14, 2017 5:21 pm, editado 3 vez(es)
Re: Change Material
fiz como dito Adicionei Tbm, mas não funcionou
- Código:
parts[x].GetComponent<MeshRenderer>().material = mat;
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
Você fez a verificação do nome do material para mudar apenas ele? Essa linha apenas muda o material.
Re: Change Material
Uhum fiz a verificação
a linha que fiz era que faltava pra a cor ir no material, mais mesmo assim nao funcionou
é só eu tirar a variável q vc fez que funciona. O msm está assim se estiver errado me corrija
a linha que fiz era que faltava pra a cor ir no material, mais mesmo assim nao funcionou
é só eu tirar a variável q vc fez que funciona. O msm está assim se estiver errado me corrija
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//////////////////////////////////////////////////
/////////////////////////////////////////////////
public class Player : MonoBehaviour {
public GameObject[] parts;
public void MudarCor (Material mat) {
for (int x = 0; x < parts.Length; x++) {
if(parts[x].name == "cordoobjeto"){
parts[x].GetComponent<MeshRenderer>().material = mat;
print("New Material");
break;
}
}
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
cara eu sei change material mas em JS
GetComponent.<MeshRenderer>().material
para
GetComponent.<SkinnedMeshRenderer>().material
- Código:
#pragma strict
var Mat : Material;
function Start () {
}
function Update (){
GetComponent.<MeshRenderer>().material = Mat;
}
GetComponent.<MeshRenderer>().material
para
GetComponent.<SkinnedMeshRenderer>().material
MarceloYBP- Avançado
- PONTOS : 2912
REPUTAÇÃO : 33
Respeito as regras :
Re: Change Material
michelly escreveu:Uhum fiz a verificação
a linha que fiz era que faltava pra a cor ir no material, mais mesmo assim nao funcionou
é só eu tirar a variável q vc fez que funciona. O msm está assim se estiver errado me corrija
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//////////////////////////////////////////////////
/////////////////////////////////////////////////
public class Player : MonoBehaviour {
public GameObject[] parts;
public void MudarCor (Material mat) {
for (int x = 0; x < parts.Length; x++) {
if(parts[x].name == "cordoobjeto"){
parts[x].GetComponent<MeshRenderer>().material = mat;
print("New Material");
break;
}
}
O erro é está fazendo a verificação por partes... A mesh é uma só, correta? Pelo menos de acordo com a foto... Pegue os materials da mesh e faça a verificação, em vez de pegar pelas partes... E faça um Debug.Log() com o nome dos materiais e veja se está pegando os materiais corretos para a troca de cor:
- Código:
parts[x].GetComponent<MeshRenderer>().materials
Faça um For nos materials das partes ou na Mesh por inteira e o Debug, para conseguir ver o que possa estar errado.
Re: Change Material
Já esta ficando chato isso.
o debug fica parado não aparece nada, só quando eu retiro essa variável, juntamente com o break
o debug fica parado não aparece nada, só quando eu retiro essa variável, juntamente com o break
- Código:
if(parts[x].name == "cordoobjeto"){
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
cara faz o que eu disse la em cima que da certo sem erro nenhum
MarceloYBP- Avançado
- PONTOS : 2912
REPUTAÇÃO : 33
Respeito as regras :
Re: Change Material
Marcelo. Leia a minha dúvida acima que vc vai entender
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
Você tentar dar uma resumida... Na imagem que tu upou, essa aqui:
Todos esses materiais, estão em uma mesma Mesh, não é mesmo? Os 4 materials, estão juntos em uma só Mesh e cada um é responsável pela cor e outras propriedades cada tipo de parte dessa Mesh, correto?
No código, a variável parts, são quais Meshs? Você associou mais de uma, não? Pois o correto, seria você associar apenas essa Mesh onde estão esses 4 materiais, e fazer a verificação pela variável que eu disse, materials do Renderer(que no caso é o Renderer da Mesh). Com ela, você conseguirá acesso a esses 4 materiais e dentro do For, detectar o nome deles e assim conseguir mudar o material distinto. Ex:
Observando, que a classe Renderer, retorna qualquer Render ativo no objeto, MeshRenderer, Skinned, ou qualquer outro. Caso queira ver se está acessando todos os materiais, tire o If de dentro do For e Debug o nome do material.
Todos esses materiais, estão em uma mesma Mesh, não é mesmo? Os 4 materials, estão juntos em uma só Mesh e cada um é responsável pela cor e outras propriedades cada tipo de parte dessa Mesh, correto?
No código, a variável parts, são quais Meshs? Você associou mais de uma, não? Pois o correto, seria você associar apenas essa Mesh onde estão esses 4 materiais, e fazer a verificação pela variável que eu disse, materials do Renderer(que no caso é o Renderer da Mesh). Com ela, você conseguirá acesso a esses 4 materiais e dentro do For, detectar o nome deles e assim conseguir mudar o material distinto. Ex:
- Código:
Renderer tempRend = tempObject.GetComponent<Renderer>();
for(int i = 0; i < tempRend.materials; i++){
if(tempRend.materials[i].name == "objetName"){
Debug.Log("Change color to that object");
}
}
Observando, que a classe Renderer, retorna qualquer Render ativo no objeto, MeshRenderer, Skinned, ou qualquer outro. Caso queira ver se está acessando todos os materiais, tire o If de dentro do For e Debug o nome do material.
Última edição por recagonlei em Qui Dez 14, 2017 8:46 pm, editado 1 vez(es) (Motivo da edição : Melhorando a explicação.)
Re: Change Material
mas o que tu quer não e mudar de material?
MarceloYBP- Avançado
- PONTOS : 2912
REPUTAÇÃO : 33
Respeito as regras :
Re: Change Material
MarceloYBP escreveu:mas o que tu quer não e mudar de material?
"Sei que a troca de cor de objeto é fácil, queria sabe se é possível mudar a cor de um determinado shader/material"
No caso, ele quer mudar apenas a cor e não o material. E deseja mudar a cor de um material distinto em questão, para Meshs com mais de um material...
Re: Change Material
Pra teste como estou fazendo agora ,só estou usando apenas 1 mesh, juntamente com esses 4 materiais.
quando eu chegar em casa vejo isso ,porque estou saindo do trabalho
agora você embaralhou meu cérebro rsrssrs
quando eu chegar em casa vejo isso ,porque estou saindo do trabalho
agora você embaralhou meu cérebro rsrssrs
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Re: Change Material
O Script ficou muito confuso pra mim ,ent não conseguir dessa jeito
mais porém eu tive que por o Material na Escala 0
assim a cor vai direto na pele, sem agredir os demais, o pior é q não da pra fazer com os outros ja que quero mudar a cor deles tbm
mais porém eu tive que por o Material na Escala 0
assim a cor vai direto na pele, sem agredir os demais, o pior é q não da pra fazer com os outros ja que quero mudar a cor deles tbm
michelly- MembroAvançado
- PONTOS : 2978
REPUTAÇÃO : 29
Respeito as regras :
Tópicos semelhantes
» como mudar o material de um mesh que tem mas de 1 material por Script ?
» Material
» Material Editor
» Random Material
» Light ou Material
» Material
» Material Editor
» Random Material
» Light ou Material
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos