[RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Galera como faco para seguinte tenho um objeto que troca as texturas ja instanciado e funcionando!
porem nesse objeto tem um filho que tb preciso trocar as texturas com outro botao UI nao pode ser o msm botao do pai,
abaixo e o codigo instanciando o objeto pai que ja esta funcionando , porem o filho eu nao consigo mudar as texturas ( as texturas ja esta em List)
public void InstanciarBalao(int idBalao)
{
novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);
meshBalao = novoBalao.GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];
}
Obg a tds!!
porem nesse objeto tem um filho que tb preciso trocar as texturas com outro botao UI nao pode ser o msm botao do pai,
abaixo e o codigo instanciando o objeto pai que ja esta funcionando , porem o filho eu nao consigo mudar as texturas ( as texturas ja esta em List)
public void InstanciarBalao(int idBalao)
{
novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);
meshBalao = novoBalao.GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];
}
Obg a tds!!
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Voce pode utilizar o GetChild(index) e coloca o index do Objeto filho ou usar um for caso queira pegar todos objetos filhos. Por Exemplo:
- Código:
public void SetChildTexture(int index)
{
MeshRenderer meshBalaoFilho = novoBalao.transform.GetChild(index).GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalaoFilho.material.mainTexture = balaoTexture[idBalaoTexture];
}
public void SetAllChildrenTexture()
{
for(int i = 0; i<novoBalao.transform.childCount; i++)
{
MeshRenderer meshBalaoFilho = novoBalao.transform.GetChild(i).GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalaoFilho.material.mainTexture = balaoTexture[idBalaoTexture];
}
}
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Voce pode utilizar o GetChild(index) e coloca o index do Objeto filho ou usar um for caso queira pegar todos objetos filhos. Por Exemplo:
- Código:
public void SetChildTexture(int index)
{
MeshRenderer meshBalaoFilho = novoBalao.transform.GetChild(index).GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalaoFilho.material.mainTexture = balaoTexture[idBalaoTexture];
}
public void SetAllChildrenTexture()
{
for(int i = 0; i<novoBalao.transform.childCount; i++)
{
MeshRenderer meshBalaoFilho = novoBalao.transform.GetChild(i).GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalaoFilho.material.mainTexture = balaoTexture[idBalaoTexture];
}
}
pensei em uma maneira mais limpa como faco para ao invez de filho eu instanciar esse objeto embaixo do meu balao e depois torna la filha como faco isso?
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Ata, acho q entendi. Voce utiliza o SetParent(Transform parent) para deixar um objeto como filho de outro, mas o próprio método Instantiate já possui uma sobrecarga para isso, como voce quer instancia-lo.
Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
Exemplo:
Seria isso?
Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
Exemplo:
- Código:
public GameObject objFilho;
public void InstantiateChildObject()
{
GameObject newChildObj = Instantiate(objFilho, Vector3.zero, Quaternion.identity, novoBalao.transform);
}
Seria isso?
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Ata, acho q entendi. Voce utiliza o SetParent(Transform parent) para deixar um objeto como filho de outro, mas o próprio método Instantiate já possui uma sobrecarga para isso, como voce quer instancia-lo.
Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
Exemplo:
- Código:
public GameObject objFilho;
public void InstantiateChildObject()
{
GameObject newChildObj = Instantiate(objFilho, Vector3.zero, Quaternion.identity, novoBalao.transform);
}
Seria isso?
Acho q nao daria certo pq tenho varios baloes diferentes assim daria erro, quero instancia um objeto exatamente embaixo do meu novoBalao que ja e instanciado normalmento , so que esse obejto usa texturas que irei muda las com o evenTrigger! obg pela ajuda----> novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Veja se eu entendi, Voce instancia o balao e muda sua textura por um botao, voce quer instanciar um objeto em baixo do seu balao e deixa-lo como filho e possuir um novo botao que altera a textura desse objeto filho, é isso?
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Veja se eu entendi, Voce instancia o balao e muda sua textura por um botao, voce quer instanciar um objeto em baixo do seu balao e deixa-lo como filho e possuir um novo botao que altera a textura desse objeto filho, é isso?
Exatamente isso! E uma bandeira que o balão vai levar quando o balão instância eu posso mudar a textura dele , quero fazer o mesmo com a bandeira , instânciado ela embaixo do balão e TB mudar as texturas dela!
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Olha fiz este exemplo utilizando o método Instantiate e colocando o objeto pai como o novo balao.
A esfera é a representação do Balao o plane da Bandeira.
A esfera é a representação do Balao o plane da Bandeira.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Olha fiz este exemplo utilizando o método Instantiate e colocando o objeto pai como o novo balao.
A esfera é a representação do Balao o plane da Bandeira.
Bom dia perfeito Man, como faço isso ? Por acaso consegue deixar o código por favor ? Desculpa ser chato e sei q e trabalhoso mas essa parte de instânciar ainda quebro cabeça Po brigadão msm !!!! Show de bola
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Bom dia amigo, que isso, denada . Vou disponibilizar o código daqui a um trmpo, pois nao to com o pc agora, mas ja pegando, ja te mando. O que eu fiz foi só criar um prefab da bandeira e quando voce clica no botao do balao, na mesma funçao instancia a bandeira um pouco abaixo dele. E entao criei um outro botao que modifica a meshRenderer drssa nova bandeira instanciada.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Bom dia amigo, que isso, denada . Vou disponibilizar o código daqui a um trmpo, pois nao to com o pc agora, mas ja pegando, ja te mando. O que eu fiz foi só criar um prefab da bandeira e quando voce clica no botao do balao, na mesma
funçao instancia a bandeira um pouco abaixo dele. E entao criei um outro botao que modifica a meshRenderer drssa nova bandeira instanciada.
Show de bola até msm o botão com a textura eu n sei fazer achei maneira a ideia o botão mostrar qual textura aplicada !!
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Primeiro cria o prefab da bandeira depois voce irá instancia-la na mesma função do botao que instancia o balao. Como voce quer poder alterar a textura da bandeira também, voce precisa criar uma varaivel meshRenderer, que será a meshRenderer da bandeira. Praticamente a mesma coisa que voce fez para instanciar e modificar a textura do seu balao. Para fazer o botao que mostra em qual textura o balao e a bandeira está, eu criei uma imagem como filho do botao da Textura e deixei na posição (0, 0, 0) para centralizar, os sprites mostrando a textura eu fiz no Photoshop mesmo, recortei em circulos as texturas e coloquei na array de Sprites viewTextureButton e coloquei nas mesmas posiçoes que a array de texturas. Por ex. A 1° Textura é a listrada preto e branco, o primeiro sprite da array viewTextureButton é o listrado e branco... e assim continua. Não é uma opção muito viável, por exemplo eu poderia ter feito um shader para isso, seria bem menos trabalhoso. Dependendo do botao clicado para mudar a textura, a variavel int Id dos respectivos objetos (balao ou bandeira) aumentam, alterando o visualizador de textura do botao de acordo com a textura que a esfera está, e o mesmo se aplica para a bandeira, porém com variaveis diferentes. Qualquer duvida é só perguntar.
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
- Funções Explicadas:
Variáveis e Função Instanciar Balão e Bandeira:- Código:
public GameObject balloon, newBalloon, flag; //GameObjects a serem instanciados, coloque o prefab deles
private MeshRenderer meshBalloon, meshFlag; //MeshRenderer do balao e da bandeira
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag; //Botoes
public Texture[] balloonTextures; //Texturas do Balao
public Sprite[] viewTextureButton; //Sprites que mostram em que textura esta
private int idBallonTexture, idFlagTexture = 0; //Id para alterar a textura
public void InstantiateBalloon() //Funcao que instancia o balao e a bandeira
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity); //Instancia o balao
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Coloca a textura inicial do balao
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform); //Instancia a bandeira um pouco abaixo do seu objeto Pai, o novoBalao
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Coloca a textura inicial da bandeira
}
Função Modificar Textura de Objetos e do Visualizador:- Código:
public void ChangeBalloonTexture() //Funcao mudar a textura do balao
{
idBallonTexture++; //O index aumenta para mudar para a proxima textura
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture]; //Pega a imagem do botao que mostra em que textura do balao esta (visualizador) e modifica de acordo com o index da textura
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Modifica a textura do balao
}
public void ChangeFlagTexture() //Funcao mudar a textura da bandeira
{
idFlagTexture++; //O index aumenta para mudar para a proxima textura
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Modifica a textura da bandeira
}
- Script Completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Balloon : MonoBehaviour
{
public GameObject balloon, newBalloon, flag;
private MeshRenderer meshBalloon, meshFlag;
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag;
public Texture[] balloonTextures;
public Sprite[] viewTextureButton;
private int idBallonTexture, idFlagTexture = 0;
private bool holding = true;
public Sprite hold, drop;
void Start()
{
}
void Update()
{
if (!holding) newBalloon.transform.position += Vector3.up * Time.deltaTime;
}
public void InstantiateBalloon()
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity);
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform);
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void ChangeBalloonTexture()
{
idBallonTexture++;
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
}
public void ChangeFlagTexture()
{
idFlagTexture++;
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0;
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void DropBalloon()
{
holding = false;
if (!holding)
{
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = drop;
StartCoroutine(DestroyBalloon());
}
}
IEnumerator DestroyBalloon()
{
yield return new WaitForSeconds(3);
holding = true;
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = hold;
Destroy(newBalloon);
idBallonTexture = 0;
idFlagTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
}
}
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Primeiro cria o prefab da bandeira depois voce irá instancia-la na mesma função do botao que instancia o balao. Como voce quer poder alterar a textura da bandeira também, voce precisa criar uma varaivel meshRenderer, que será a meshRenderer da bandeira. Praticamente a mesma coisa que voce fez para instanciar e modificar a textura do seu balao. Para fazer o botao que mostra em qual textura o balao e a bandeira está, eu criei uma imagem como filho do botao da Textura e deixei na posição (0, 0, 0) para centralizar, os sprites mostrando a textura eu fiz no Photoshop mesmo, recortei em circulos as texturas e coloquei na array de Sprites viewTextureButton e coloquei nas mesmas posiçoes que a array de texturas. Por ex. A 1° Textura é a listrada preto e branco, o primeiro sprite da array viewTextureButton é o listrado e branco... e assim continua. Não é uma opção muito viável, por exemplo eu poderia ter feito um shader para isso, seria bem menos trabalhoso. Dependendo do botao clicado para mudar a textura, a variavel int Id dos respectivos objetos (balao ou bandeira) aumentam, alterando o visualizador de textura do botao de acordo com a textura que a esfera está, e o mesmo se aplica para a bandeira, porém com variaveis diferentes. Qualquer duvida é só perguntar.
- Funções Explicadas:
Variáveis e Função Instanciar Balão e Bandeira:
- Código:
public GameObject balloon, newBalloon, flag; //GameObjects a serem instanciados, coloque o prefab deles
private MeshRenderer meshBalloon, meshFlag; //MeshRenderer do balao e da bandeira
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag; //Botoes
public Texture[] balloonTextures; //Texturas do Balao
public Sprite[] viewTextureButton; //Sprites que mostram em que textura esta
private int idBallonTexture, idFlagTexture = 0; //Id para alterar a textura
public void InstantiateBalloon() //Funcao que instancia o balao e a bandeira
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity); //Instancia o balao
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Coloca a textura inicial do balao
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform); //Instancia a bandeira um pouco abaixo do seu objeto Pai, o novoBalao
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Coloca a textura inicial da bandeira
}
Função Modificar Textura de Objetos e do Visualizador:
- Código:
public void ChangeBalloonTexture() //Funcao mudar a textura do balao
{
idBallonTexture++; //O index aumenta para mudar para a proxima textura
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture]; //Pega a imagem do botao que mostra em que textura do balao esta (visualizador) e modifica de acordo com o index da textura
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Modifica a textura do balao
}
public void ChangeFlagTexture() //Funcao mudar a textura da bandeira
{
idFlagTexture++; //O index aumenta para mudar para a proxima textura
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Modifica a textura da bandeira
}
- Script Completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Balloon : MonoBehaviour
{
public GameObject balloon, newBalloon, flag;
private MeshRenderer meshBalloon, meshFlag;
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag;
public Texture[] balloonTextures;
public Sprite[] viewTextureButton;
private int idBallonTexture, idFlagTexture = 0;
private bool holding = true;
public Sprite hold, drop;
void Start()
{
}
void Update()
{
if (!holding) newBalloon.transform.position += Vector3.up * Time.deltaTime;
}
public void InstantiateBalloon()
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity);
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform);
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void ChangeBalloonTexture()
{
idBallonTexture++;
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
}
public void ChangeFlagTexture()
{
idFlagTexture++;
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0;
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void DropBalloon()
{
holding = false;
if (!holding)
{
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = drop;
StartCoroutine(DestroyBalloon());
}
}
IEnumerator DestroyBalloon()
{
yield return new WaitForSeconds(3);
holding = true;
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = hold;
Destroy(newBalloon);
idBallonTexture = 0;
idFlagTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
}
}
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
poxa amigo muito obg por todo esforco sei o trabalho que deu e desejo a vc td sucesso , eu nao consegui fazer funcionar pq ja tenho a List meus baloes q sao varios modelos diferentes instanciando certinho entao so tentei adaptar a bandeira mas nao esta instancaiando a bandeira ainda nao da erro nenhum so nao instancia e eu ja arrastei a msm para o gameobject bandeira , n sei se vc pode me add zap 24988284425 se nao puder irei entender , photoshop eu mexo sim obg amigo!!using UnityEngine.EventSystems;using System.Collections.Generic;using UnityEngine;public class Botoes : MonoBehaviour{private int idBandeiraTexture = 0;public GameObject bandeira;private MeshRenderer MeshBandeira;public float spd = 1f;public GameObject Aqui;public GameObject[] balao;private GameObject novoBalao;public Texture[] balaoTexture;private int idBalaoTexture;private MeshRenderer meshBalao;private Rigidbody rb;private GameObject guia;public bool conectado = true;//public GameObject bandeira;void Start(){GameObject fogos = GameObject.FindWithTag("fogo");// fogos.SetActive(false);rb = GetComponent<Rigidbody>();}public void update(){novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);}public void InstanciarBalao(int idBalao){// List<GameObject> balaoList = new List<GameObject>();// balao = new List<GameObject>();novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];idBandeiraTexture = 0;GameObject newFlag = Instantiate(bandeira, new Vector3(0, -0.4f, 0), bandeira.transform.rotation, novoBalao.transform);MeshBandeira = newFlag.GetComponent<MeshRenderer>();MeshBandeira.material.mainTexture = balaoTexture [idBandeiraTexture];}
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
capim22 escreveu:Pokedlg escreveu:Primeiro cria o prefab da bandeira depois voce irá instancia-la na mesma função do botao que instancia o balao. Como voce quer poder alterar a textura da bandeira também, voce precisa criar uma varaivel meshRenderer, que será a meshRenderer da bandeira. Praticamente a mesma coisa que voce fez para instanciar e modificar a textura do seu balao. Para fazer o botao que mostra em qual textura o balao e a bandeira está, eu criei uma imagem como filho do botao da Textura e deixei na posição (0, 0, 0) para centralizar, os sprites mostrando a textura eu fiz no Photoshop mesmo, recortei em circulos as texturas e coloquei na array de Sprites viewTextureButton e coloquei nas mesmas posiçoes que a array de texturas. Por ex. A 1° Textura é a listrada preto e branco, o primeiro sprite da array viewTextureButton é o listrado e branco... e assim continua. Não é uma opção muito viável, por exemplo eu poderia ter feito um shader para isso, seria bem menos trabalhoso. Dependendo do botao clicado para mudar a textura, a variavel int Id dos respectivos objetos (balao ou bandeira) aumentam, alterando o visualizador de textura do botao de acordo com a textura que a esfera está, e o mesmo se aplica para a bandeira, porém com variaveis diferentes. Qualquer duvida é só perguntar.
- Funções Explicadas:
Variáveis e Função Instanciar Balão e Bandeira:
- Código:
public GameObject balloon, newBalloon, flag; //GameObjects a serem instanciados, coloque o prefab deles
private MeshRenderer meshBalloon, meshFlag; //MeshRenderer do balao e da bandeira
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag; //Botoes
public Texture[] balloonTextures; //Texturas do Balao
public Sprite[] viewTextureButton; //Sprites que mostram em que textura esta
private int idBallonTexture, idFlagTexture = 0; //Id para alterar a textura
public void InstantiateBalloon() //Funcao que instancia o balao e a bandeira
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity); //Instancia o balao
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Coloca a textura inicial do balao
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform); //Instancia a bandeira um pouco abaixo do seu objeto Pai, o novoBalao
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Coloca a textura inicial da bandeira
}
Função Modificar Textura de Objetos e do Visualizador:
- Código:
public void ChangeBalloonTexture() //Funcao mudar a textura do balao
{
idBallonTexture++; //O index aumenta para mudar para a proxima textura
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture]; //Pega a imagem do botao que mostra em que textura do balao esta (visualizador) e modifica de acordo com o index da textura
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Modifica a textura do balao
}
public void ChangeFlagTexture() //Funcao mudar a textura da bandeira
{
idFlagTexture++; //O index aumenta para mudar para a proxima textura
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Modifica a textura da bandeira
}
- Script Completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Balloon : MonoBehaviour
{
public GameObject balloon, newBalloon, flag;
private MeshRenderer meshBalloon, meshFlag;
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag;
public Texture[] balloonTextures;
public Sprite[] viewTextureButton;
private int idBallonTexture, idFlagTexture = 0;
private bool holding = true;
public Sprite hold, drop;
void Start()
{
}
void Update()
{
if (!holding) newBalloon.transform.position += Vector3.up * Time.deltaTime;
}
public void InstantiateBalloon()
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity);
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform);
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void ChangeBalloonTexture()
{
idBallonTexture++;
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
}
public void ChangeFlagTexture()
{
idFlagTexture++;
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0;
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void DropBalloon()
{
holding = false;
if (!holding)
{
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = drop;
StartCoroutine(DestroyBalloon());
}
}
IEnumerator DestroyBalloon()
{
yield return new WaitForSeconds(3);
holding = true;
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = hold;
Destroy(newBalloon);
idBallonTexture = 0;
idFlagTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
}
}
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
poxa amigo muito obg por todo esforco sei o trabalho que deu e desejo a vc td sucesso , eu nao consegui fazer funcionar pq ja tenho a List meus baloes q sao varios modelos diferentes instanciando certinho entao so tentei adaptar a bandeira mas nao esta instancaiando a bandeira ainda nao da erro nenhum so nao instancia e eu ja arrastei a msm para o gameobject bandeira , n sei se vc pode me add zap 24988284425 se nao puder irei entender , photoshop eu mexo sim obg amigo!!using UnityEngine.EventSystems;using System.Collections.Generic;using UnityEngine;public class Botoes : MonoBehaviour{private int idBandeiraTexture = 0;public GameObject bandeira;private MeshRenderer MeshBandeira;public float spd = 1f;public GameObject Aqui;public GameObject[] balao;private GameObject novoBalao;public Texture[] balaoTexture;private int idBalaoTexture;private MeshRenderer meshBalao;private Rigidbody rb;private GameObject guia;public bool conectado = true;//public GameObject bandeira;void Start(){GameObject fogos = GameObject.FindWithTag("fogo");// fogos.SetActive(false);rb = GetComponent<Rigidbody>();}public void update(){novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);}public void InstanciarBalao(int idBalao){// List<GameObject> balaoList = new List<GameObject>();// balao = new List<GameObject>();novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];idBandeiraTexture = 0;GameObject newFlag = Instantiate(bandeira, new Vector3(0, -0.4f, 0), bandeira.transform.rotation, novoBalao.transform);MeshBandeira = newFlag.GetComponent<MeshRenderer>();MeshBandeira.material.mainTexture = balaoTexture [idBandeiraTexture];}
percebi uma coisa esta dando esse erro :MissingComponentException: There is no 'MeshRenderer' attached to the "Bandeira(Clone)" game object, but a script is trying to access it.You probably need to add a MeshRenderer to the game object "Bandeira(Clone)". Or your script needs to check if the component is attached before using it.
e tb percebi q ela esta sendo instanciada sim porem em outro local bem distante do balao, minha bandeira usa o cloth skinned meshrenderer. msm c erro ela e instanciada porem longe do balao !
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
capim22 escreveu:capim22 escreveu:Pokedlg escreveu:Primeiro cria o prefab da bandeira depois voce irá instancia-la na mesma função do botao que instancia o balao. Como voce quer poder alterar a textura da bandeira também, voce precisa criar uma varaivel meshRenderer, que será a meshRenderer da bandeira. Praticamente a mesma coisa que voce fez para instanciar e modificar a textura do seu balao. Para fazer o botao que mostra em qual textura o balao e a bandeira está, eu criei uma imagem como filho do botao da Textura e deixei na posição (0, 0, 0) para centralizar, os sprites mostrando a textura eu fiz no Photoshop mesmo, recortei em circulos as texturas e coloquei na array de Sprites viewTextureButton e coloquei nas mesmas posiçoes que a array de texturas. Por ex. A 1° Textura é a listrada preto e branco, o primeiro sprite da array viewTextureButton é o listrado e branco... e assim continua. Não é uma opção muito viável, por exemplo eu poderia ter feito um shader para isso, seria bem menos trabalhoso. Dependendo do botao clicado para mudar a textura, a variavel int Id dos respectivos objetos (balao ou bandeira) aumentam, alterando o visualizador de textura do botao de acordo com a textura que a esfera está, e o mesmo se aplica para a bandeira, porém com variaveis diferentes. Qualquer duvida é só perguntar.
- Funções Explicadas:
Variáveis e Função Instanciar Balão e Bandeira:
- Código:
public GameObject balloon, newBalloon, flag; //GameObjects a serem instanciados, coloque o prefab deles
private MeshRenderer meshBalloon, meshFlag; //MeshRenderer do balao e da bandeira
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag; //Botoes
public Texture[] balloonTextures; //Texturas do Balao
public Sprite[] viewTextureButton; //Sprites que mostram em que textura esta
private int idBallonTexture, idFlagTexture = 0; //Id para alterar a textura
public void InstantiateBalloon() //Funcao que instancia o balao e a bandeira
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity); //Instancia o balao
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Coloca a textura inicial do balao
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform); //Instancia a bandeira um pouco abaixo do seu objeto Pai, o novoBalao
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Coloca a textura inicial da bandeira
}
Função Modificar Textura de Objetos e do Visualizador:
- Código:
public void ChangeBalloonTexture() //Funcao mudar a textura do balao
{
idBallonTexture++; //O index aumenta para mudar para a proxima textura
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture]; //Pega a imagem do botao que mostra em que textura do balao esta (visualizador) e modifica de acordo com o index da textura
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Modifica a textura do balao
}
public void ChangeFlagTexture() //Funcao mudar a textura da bandeira
{
idFlagTexture++; //O index aumenta para mudar para a proxima textura
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Modifica a textura da bandeira
}
- Script Completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Balloon : MonoBehaviour
{
public GameObject balloon, newBalloon, flag;
private MeshRenderer meshBalloon, meshFlag;
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag;
public Texture[] balloonTextures;
public Sprite[] viewTextureButton;
private int idBallonTexture, idFlagTexture = 0;
private bool holding = true;
public Sprite hold, drop;
void Start()
{
}
void Update()
{
if (!holding) newBalloon.transform.position += Vector3.up * Time.deltaTime;
}
public void InstantiateBalloon()
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity);
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform);
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void ChangeBalloonTexture()
{
idBallonTexture++;
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
}
public void ChangeFlagTexture()
{
idFlagTexture++;
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0;
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void DropBalloon()
{
holding = false;
if (!holding)
{
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = drop;
StartCoroutine(DestroyBalloon());
}
}
IEnumerator DestroyBalloon()
{
yield return new WaitForSeconds(3);
holding = true;
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = hold;
Destroy(newBalloon);
idBallonTexture = 0;
idFlagTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
}
}
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
poxa amigo muito obg por todo esforco sei o trabalho que deu e desejo a vc td sucesso , eu nao consegui fazer funcionar pq ja tenho a List meus baloes q sao varios modelos diferentes instanciando certinho entao so tentei adaptar a bandeira mas nao esta instancaiando a bandeira ainda nao da erro nenhum so nao instancia e eu ja arrastei a msm para o gameobject bandeira , n sei se vc pode me add zap 24988284425 se nao puder irei entender , photoshop eu mexo sim obg amigo!!using UnityEngine.EventSystems;using System.Collections.Generic;using UnityEngine;public class Botoes : MonoBehaviour{private int idBandeiraTexture = 0;public GameObject bandeira;private MeshRenderer MeshBandeira;public float spd = 1f;public GameObject Aqui;public GameObject[] balao;private GameObject novoBalao;public Texture[] balaoTexture;private int idBalaoTexture;private MeshRenderer meshBalao;private Rigidbody rb;private GameObject guia;public bool conectado = true;//public GameObject bandeira;void Start(){GameObject fogos = GameObject.FindWithTag("fogo");// fogos.SetActive(false);rb = GetComponent<Rigidbody>();}public void update(){novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);}public void InstanciarBalao(int idBalao){// List<GameObject> balaoList = new List<GameObject>();// balao = new List<GameObject>();novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];idBandeiraTexture = 0;GameObject newFlag = Instantiate(bandeira, new Vector3(0, -0.4f, 0), bandeira.transform.rotation, novoBalao.transform);MeshBandeira = newFlag.GetComponent<MeshRenderer>();MeshBandeira.material.mainTexture = balaoTexture [idBandeiraTexture];}
percebi uma coisa esta dando esse erro :MissingComponentException: There is no 'MeshRenderer' attached to the "Bandeira(Clone)" game object, but a script is trying to access it.You probably need to add a MeshRenderer to the game object "Bandeira(Clone)". Or your script needs to check if the component is attached before using it.
e tb percebi q ela esta sendo instanciada sim porem em outro local bem distante do balao, minha bandeira usa o cloth skinned meshrenderer. msm c erro ela e instanciada porem longe do balao !
a bandeira esta sendo isntanciada bem longe do balaonovoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];idBandeiraTexture = 0;GameObject newFlag = Instantiate(bandeira, new Vector3(0,-0.4f, 0), bandeira.transform.rotation, novoBalao.transform);MeshBandeira = newFlag.GetComponent<MeshRenderer>();MeshBandeira.material.mainTexture = balaoTexture [idBandeiraTexture];
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pode ser talvez por causa do cloth. Voce usou o Paint para segurar a bandeira? Porque ela pode estar caindo infinitamente por causa do cloth.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Sim usei e minimio o jogo e vejo a bandeira instanciada pela scene ela esta longe e parada n esta caindo!!Pokedlg escreveu:Pode ser talvez por causa do cloth. Voce usou o Paint para segurar a bandeira? Porque ela pode estar caindo infinitamente por causa do cloth.
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
eu fiz teste ate msm com um cubo no lugar da bandeira e tb instancia longe!!capim22 escreveu:Sim usei e minimio o jogo e vejo a bandeira instanciada pela scene ela esta longe e parada n esta caindo!!Pokedlg escreveu:Pode ser talvez por causa do cloth. Voce usou o Paint para segurar a bandeira? Porque ela pode estar caindo infinitamente por causa do cloth.
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Que estranho. Voce poderia mandar imagens?
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
capim22 escreveu:capim22 escreveu:Pokedlg escreveu:Primeiro cria o prefab da bandeira depois voce irá instancia-la na mesma função do botao que instancia o balao. Como voce quer poder alterar a textura da bandeira também, voce precisa criar uma varaivel meshRenderer, que será a meshRenderer da bandeira. Praticamente a mesma coisa que voce fez para instanciar e modificar a textura do seu balao. Para fazer o botao que mostra em qual textura o balao e a bandeira está, eu criei uma imagem como filho do botao da Textura e deixei na posição (0, 0, 0) para centralizar, os sprites mostrando a textura eu fiz no Photoshop mesmo, recortei em circulos as texturas e coloquei na array de Sprites viewTextureButton e coloquei nas mesmas posiçoes que a array de texturas. Por ex. A 1° Textura é a listrada preto e branco, o primeiro sprite da array viewTextureButton é o listrado e branco... e assim continua. Não é uma opção muito viável, por exemplo eu poderia ter feito um shader para isso, seria bem menos trabalhoso. Dependendo do botao clicado para mudar a textura, a variavel int Id dos respectivos objetos (balao ou bandeira) aumentam, alterando o visualizador de textura do botao de acordo com a textura que a esfera está, e o mesmo se aplica para a bandeira, porém com variaveis diferentes. Qualquer duvida é só perguntar.
- Funções Explicadas:
Variáveis e Função Instanciar Balão e Bandeira:
- Código:
public GameObject balloon, newBalloon, flag; //GameObjects a serem instanciados, coloque o prefab deles
private MeshRenderer meshBalloon, meshFlag; //MeshRenderer do balao e da bandeira
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag; //Botoes
public Texture[] balloonTextures; //Texturas do Balao
public Sprite[] viewTextureButton; //Sprites que mostram em que textura esta
private int idBallonTexture, idFlagTexture = 0; //Id para alterar a textura
public void InstantiateBalloon() //Funcao que instancia o balao e a bandeira
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity); //Instancia o balao
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Coloca a textura inicial do balao
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform); //Instancia a bandeira um pouco abaixo do seu objeto Pai, o novoBalao
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Coloca a textura inicial da bandeira
}
Função Modificar Textura de Objetos e do Visualizador:
- Código:
public void ChangeBalloonTexture() //Funcao mudar a textura do balao
{
idBallonTexture++; //O index aumenta para mudar para a proxima textura
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture]; //Pega a imagem do botao que mostra em que textura do balao esta (visualizador) e modifica de acordo com o index da textura
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Modifica a textura do balao
}
public void ChangeFlagTexture() //Funcao mudar a textura da bandeira
{
idFlagTexture++; //O index aumenta para mudar para a proxima textura
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Modifica a textura da bandeira
}
- Script Completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Balloon : MonoBehaviour
{
public GameObject balloon, newBalloon, flag;
private MeshRenderer meshBalloon, meshFlag;
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag;
public Texture[] balloonTextures;
public Sprite[] viewTextureButton;
private int idBallonTexture, idFlagTexture = 0;
private bool holding = true;
public Sprite hold, drop;
void Start()
{
}
void Update()
{
if (!holding) newBalloon.transform.position += Vector3.up * Time.deltaTime;
}
public void InstantiateBalloon()
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity);
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform);
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void ChangeBalloonTexture()
{
idBallonTexture++;
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
}
public void ChangeFlagTexture()
{
idFlagTexture++;
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0;
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void DropBalloon()
{
holding = false;
if (!holding)
{
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = drop;
StartCoroutine(DestroyBalloon());
}
}
IEnumerator DestroyBalloon()
{
yield return new WaitForSeconds(3);
holding = true;
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = hold;
Destroy(newBalloon);
idBallonTexture = 0;
idFlagTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
}
}
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
poxa amigo muito obg por todo esforco sei o trabalho que deu e desejo a vc td sucesso , eu nao consegui fazer funcionar pq ja tenho a List meus baloes q sao varios modelos diferentes instanciando certinho entao so tentei adaptar a bandeira mas nao esta instancaiando a bandeira ainda nao da erro nenhum so nao instancia e eu ja arrastei a msm para o gameobject bandeira , n sei se vc pode me add zap 24988284425 se nao puder irei entender , photoshop eu mexo sim obg amigo!!using UnityEngine.EventSystems;using System.Collections.Generic;using UnityEngine;public class Botoes : MonoBehaviour{private int idBandeiraTexture = 0;public GameObject bandeira;private MeshRenderer MeshBandeira;public float spd = 1f;public GameObject Aqui;public GameObject[] balao;private GameObject novoBalao;public Texture[] balaoTexture;private int idBalaoTexture;private MeshRenderer meshBalao;private Rigidbody rb;private GameObject guia;public bool conectado = true;//public GameObject bandeira;void Start(){GameObject fogos = GameObject.FindWithTag("fogo");// fogos.SetActive(false);rb = GetComponent<Rigidbody>();}public void update(){novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);}public void InstanciarBalao(int idBalao){// List<GameObject> balaoList = new List<GameObject>();// balao = new List<GameObject>();novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];idBandeiraTexture = 0;GameObject newFlag = Instantiate(bandeira, new Vector3(0, -0.4f, 0), bandeira.transform.rotation, novoBalao.transform);MeshBandeira = newFlag.GetComponent<MeshRenderer>();MeshBandeira.material.mainTexture = balaoTexture [idBandeiraTexture];}
percebi uma coisa esta dando esse erro :MissingComponentException: There is no 'MeshRenderer' attached to the "Bandeira(Clone)" game object, but a script is trying to access it.You probably need to add a MeshRenderer to the game object "Bandeira(Clone)". Or your script needs to check if the component is attached before using it.
e tb percebi q ela esta sendo instanciada sim porem em outro local bem distante do balao, minha bandeira usa o cloth skinned meshrenderer. msm c erro ela e instanciada porem longe do balao !
Voce terá que usar o SkinnedMeshRenderer para mudar o material da banderia, então:
- Código:
private SkinnedMeshRenderer MeshBandeira;
//...
MeshBandeira = newFlag.GetComponent<SkinnedMeshRenderer>();
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:capim22 escreveu:capim22 escreveu:Pokedlg escreveu:Primeiro cria o prefab da bandeira depois voce irá instancia-la na mesma função do botao que instancia o balao. Como voce quer poder alterar a textura da bandeira também, voce precisa criar uma varaivel meshRenderer, que será a meshRenderer da bandeira. Praticamente a mesma coisa que voce fez para instanciar e modificar a textura do seu balao. Para fazer o botao que mostra em qual textura o balao e a bandeira está, eu criei uma imagem como filho do botao da Textura e deixei na posição (0, 0, 0) para centralizar, os sprites mostrando a textura eu fiz no Photoshop mesmo, recortei em circulos as texturas e coloquei na array de Sprites viewTextureButton e coloquei nas mesmas posiçoes que a array de texturas. Por ex. A 1° Textura é a listrada preto e branco, o primeiro sprite da array viewTextureButton é o listrado e branco... e assim continua. Não é uma opção muito viável, por exemplo eu poderia ter feito um shader para isso, seria bem menos trabalhoso. Dependendo do botao clicado para mudar a textura, a variavel int Id dos respectivos objetos (balao ou bandeira) aumentam, alterando o visualizador de textura do botao de acordo com a textura que a esfera está, e o mesmo se aplica para a bandeira, porém com variaveis diferentes. Qualquer duvida é só perguntar.
- Funções Explicadas:
Variáveis e Função Instanciar Balão e Bandeira:
- Código:
public GameObject balloon, newBalloon, flag; //GameObjects a serem instanciados, coloque o prefab deles
private MeshRenderer meshBalloon, meshFlag; //MeshRenderer do balao e da bandeira
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag; //Botoes
public Texture[] balloonTextures; //Texturas do Balao
public Sprite[] viewTextureButton; //Sprites que mostram em que textura esta
private int idBallonTexture, idFlagTexture = 0; //Id para alterar a textura
public void InstantiateBalloon() //Funcao que instancia o balao e a bandeira
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity); //Instancia o balao
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Coloca a textura inicial do balao
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform); //Instancia a bandeira um pouco abaixo do seu objeto Pai, o novoBalao
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Coloca a textura inicial da bandeira
}
Função Modificar Textura de Objetos e do Visualizador:
- Código:
public void ChangeBalloonTexture() //Funcao mudar a textura do balao
{
idBallonTexture++; //O index aumenta para mudar para a proxima textura
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture]; //Pega a imagem do botao que mostra em que textura do balao esta (visualizador) e modifica de acordo com o index da textura
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture]; //Modifica a textura do balao
}
public void ChangeFlagTexture() //Funcao mudar a textura da bandeira
{
idFlagTexture++; //O index aumenta para mudar para a proxima textura
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0; //O index reseta caso passe do tamanho da array
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
meshFlag.material.mainTexture = balloonTextures[idFlagTexture]; //Modifica a textura da bandeira
}
- Script Completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Balloon : MonoBehaviour
{
public GameObject balloon, newBalloon, flag;
private MeshRenderer meshBalloon, meshFlag;
public Button buttonInteract, buttonTextureBallon, buttonTextureFlag;
public Texture[] balloonTextures;
public Sprite[] viewTextureButton;
private int idBallonTexture, idFlagTexture = 0;
private bool holding = true;
public Sprite hold, drop;
void Start()
{
}
void Update()
{
if (!holding) newBalloon.transform.position += Vector3.up * Time.deltaTime;
}
public void InstantiateBalloon()
{
newBalloon = Instantiate(balloon, new Vector3(0, 0.38f, 0), Quaternion.identity);
meshBalloon = newBalloon.GetComponent<MeshRenderer>();
idBallonTexture = 0;
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
idFlagTexture = 0;
GameObject newFlag = Instantiate(flag, new Vector3(0,-0.4f,0), flag.transform.rotation, newBalloon.transform);
meshFlag = newFlag.GetComponent<MeshRenderer>();
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void ChangeBalloonTexture()
{
idBallonTexture++;
if (idBallonTexture >= balloonTextures.Length) idBallonTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
meshBalloon.material.mainTexture = balloonTextures[idBallonTexture];
}
public void ChangeFlagTexture()
{
idFlagTexture++;
if (idFlagTexture >= balloonTextures.Length) idFlagTexture = 0;
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
meshFlag.material.mainTexture = balloonTextures[idFlagTexture];
}
public void DropBalloon()
{
holding = false;
if (!holding)
{
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = drop;
StartCoroutine(DestroyBalloon());
}
}
IEnumerator DestroyBalloon()
{
yield return new WaitForSeconds(3);
holding = true;
buttonInteract.transform.GetChild(0).GetComponent<Image>().sprite = hold;
Destroy(newBalloon);
idBallonTexture = 0;
idFlagTexture = 0;
buttonTextureBallon.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idBallonTexture];
buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture];
}
}
Caso queira adaptar a ideia de visualização das textura dos botoes e voce não sabe mexer no photoshop, se voce quiser pode me mandar as texturas que voce utiliza e eu faço o recorte delas em redondo.
poxa amigo muito obg por todo esforco sei o trabalho que deu e desejo a vc td sucesso , eu nao consegui fazer funcionar pq ja tenho a List meus baloes q sao varios modelos diferentes instanciando certinho entao so tentei adaptar a bandeira mas nao esta instancaiando a bandeira ainda nao da erro nenhum so nao instancia e eu ja arrastei a msm para o gameobject bandeira , n sei se vc pode me add zap 24988284425 se nao puder irei entender , photoshop eu mexo sim obg amigo!!using UnityEngine.EventSystems;using System.Collections.Generic;using UnityEngine;public class Botoes : MonoBehaviour{private int idBandeiraTexture = 0;public GameObject bandeira;private MeshRenderer MeshBandeira;public float spd = 1f;public GameObject Aqui;public GameObject[] balao;private GameObject novoBalao;public Texture[] balaoTexture;private int idBalaoTexture;private MeshRenderer meshBalao;private Rigidbody rb;private GameObject guia;public bool conectado = true;//public GameObject bandeira;void Start(){GameObject fogos = GameObject.FindWithTag("fogo");// fogos.SetActive(false);rb = GetComponent<Rigidbody>();}public void update(){novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);}public void InstanciarBalao(int idBalao){// List<GameObject> balaoList = new List<GameObject>();// balao = new List<GameObject>();novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z),balao[idBalao].transform.rotation);meshBalao = novoBalao.GetComponent<MeshRenderer>();idBalaoTexture = 0;meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];idBandeiraTexture = 0;GameObject newFlag = Instantiate(bandeira, new Vector3(0, -0.4f, 0), bandeira.transform.rotation, novoBalao.transform);MeshBandeira = newFlag.GetComponent<MeshRenderer>();MeshBandeira.material.mainTexture = balaoTexture [idBandeiraTexture];}
percebi uma coisa esta dando esse erro :MissingComponentException: There is no 'MeshRenderer' attached to the "Bandeira(Clone)" game object, but a script is trying to access it.You probably need to add a MeshRenderer to the game object "Bandeira(Clone)". Or your script needs to check if the component is attached before using it.
e tb percebi q ela esta sendo instanciada sim porem em outro local bem distante do balao, minha bandeira usa o cloth skinned meshrenderer. msm c erro ela e instanciada porem longe do balao !
Voce terá que usar o SkinnedMeshRenderer para mudar o material da banderia, então:
Já fiz isso TB , o problema e q n instância perto do balão só instância bem longe ! Não está pegando a posição do balão instânciado!
- Código:
private SkinnedMeshRenderer MeshBandeira;
//...
MeshBandeira = newFlag.GetComponent<SkinnedMeshRenderer>();
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Opa amigo, desculpe, erro meu. Ele está instanciando em relação ao Mundo e não ao Pai. Tente fazer assim:
- Código:
GameObject newFlag = Instantiate(bandeira, Vector3.zero, bandeira.transform.rotation, novoBalao.transform);
newFlag.localPosition = new Vector3(0, -0.8f, 0);
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Opa amigo, desculpe, erro meu. Ele está instanciando em relação ao Mundo e não ao Pai. Tente fazer assim:
- Código:
GameObject newFlag = Instantiate(bandeira, Vector3.zero, bandeira.transform.rotation, novoBalao.transform);
newFlag.localPosition = new Vector3(0, -0.8f, 0);
b dia que isso n precisa pedir desculpas , eu q tenho q pedir por ser chato, fiz oq falou e da erro LocalPosition
Assets\Botoes.cs(44,17): error CS1061: 'GameObject' does not contain a definition for 'localPosition' and no accessible extension method 'localPosition' accepting a first argument of type 'GameObject' could be found (are you missing a using directive or an assembly reference?)
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Desculpe novamente . esqueci de utilizar o transform tente assim:
- Código:
GameObject newFlag = Instantiate(bandeira, Vector3.zero, bandeira.transform.rotation, novoBalao.transform);
newFlag.transform.localPosition = new Vector3(0, -0.8f, 0);
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
muito obg amigo instanciou certinho, agora so esta dando erro na linha 46 , acho q e em relacaço as texturas da bandeira , tipo eu ja apliquei as texturas na prefab da bandeira , acho q p da certo eu teria q criar uma list nesse mesm script ne?Pokedlg escreveu:Desculpe novamente . esqueci de utilizar o transform tente assim:
- Código:
GameObject newFlag = Instantiate(bandeira, Vector3.zero, bandeira.transform.rotation, novoBalao.transform);
newFlag.transform.localPosition = new Vector3(0, -0.8f, 0);
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Qual é a linha 46 e o erro?
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
ta dando erro nessa linhaPokedlg escreveu:Qual é a linha 46 e o erro?
linha 46 = MeshBandeira.material.mainTexture = bandeiraTexture[idBandeiraTexture];
e na 73
NullReferenceException: Object reference not set to an instance of an object
Botoes.ChangeFlagTexture () (at Assets/Botoes.cs:73)
linja 73 = MeshBandeira.material.mainTexture = bandeiraTexture[idBandeiraTexture];
falta so isso p resolver aqui obg por td ajuda !!
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Acredito que voce tenha que colocar as texturas na sua array "bandeiraTexture" ou atribuir o botao de mudar a textura. Denada .
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
estranho ja atribui as texturas na array ja fiz o botao p troca das texturas , mas o msms erros nas msms linhas , e detalhe ele esta aplicando a ultima textura numero 22 ao invez da 0 conforme o script doidera!!Pokedlg escreveu:Acredito que voce tenha que colocar as texturas na sua array "bandeiraTexture" ou atribuir o botao de mudar a textura. Denada .
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Voce trocou a variavel "MeshRenderer MeshBandeira" por "SkinnedMeshRenderer MeshBandeira" ? E colocou que
- Código:
MeshBandeira = newFlag.GetComponent<SkinnedMeshRenderer>();
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
estou fazendo teste bem basico sem clouth por enqunto usando meshrenderer msm , o erro e o msm das duas linhasPokedlg escreveu:Voce trocou a variavel "MeshRenderer MeshBandeira" por "SkinnedMeshRenderer MeshBandeira" ? E colocou que
- Código:
MeshBandeira = newFlag.GetComponent<SkinnedMeshRenderer>();
MeshBandeira.material.mainTexture = bandeiraTexture[idBandeiraTexture];
e eu ja atribui as texturas estranho!!
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
capim22 escreveu:estou fazendo teste bem basico sem clouth por enqunto usando meshrenderer msm , o erro e o msm das duas linhasPokedlg escreveu:Voce trocou a variavel "MeshRenderer MeshBandeira" por "SkinnedMeshRenderer MeshBandeira" ? E colocou que
- Código:
MeshBandeira = newFlag.GetComponent<SkinnedMeshRenderer>();
MeshBandeira.material.mainTexture = bandeiraTexture[idBandeiraTexture];
e eu ja atribui as texturas estranho!!
Not allowed to access Renderer.material on prefab object. Use Renderer.sharedMaterial insteadUnityEngine.Renderer:get_material ()
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Voce terá que usar o sharedMaterial. Tente trocar a linha que faz a alteração da textura por essa:
- Código:
MeshBandeira.sharedMaterial.mainTexture = balaoTexture [idBandeiraTexture];
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
kk tinha acabado de fazer isso ate msm antes , fucnionou porem so troca 2 texturas mesmo tendo as 22 texturas la !!Pokedlg escreveu:Voce terá que usar o sharedMaterial. Tente trocar a linha que faz a alteração da textura por essa:
- Código:
MeshBandeira.sharedMaterial.mainTexture = balaoTexture [idBandeiraTexture];
idBandeiraTexture++; //O index aumenta para mudar para a proxima textura
if (idBandeiraTexture >= bandeiraTexture.Length) { idBandeiraTexture = 0; } //O index reseta caso passe do tamanho da array
// buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
MeshBandeira.sharedMaterial.mainTexture = bandeiraTexture[idBandeiraTexture];
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
se eu tirar public void ChangeFlagTexture --- > (int idBandeiraTexture) <------ funciona , vi outro erro q e que qd instancio outro balao a bandeira muda nos dois!!capim22 escreveu:kk tinha acabado de fazer isso ate msm antes , fucnionou porem so troca 2 texturas mesmo tendo as 22 texturas la !!Pokedlg escreveu:Voce terá que usar o sharedMaterial. Tente trocar a linha que faz a alteração da textura por essa:
- Código:
MeshBandeira.sharedMaterial.mainTexture = balaoTexture [idBandeiraTexture];
idBandeiraTexture++; //O index aumenta para mudar para a proxima textura
if (idBandeiraTexture >= bandeiraTexture.Length) { idBandeiraTexture = 0; } //O index reseta caso passe do tamanho da array
// buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
MeshBandeira.sharedMaterial.mainTexture = bandeiraTexture[idBandeiraTexture];
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Isso não era para acontecer porque ele pega a mesh sempre da nova bandeira instaciada.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
consegui resolver a troca de texturas porem so tem esse erro qd instancio outro balao a bandeira muda nos dois !!Pokedlg escreveu:Isso não era para acontecer porque ele pega a mesh sempre da nova bandeira instaciada.
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Estranho estou preso nisso ate agora desde aquela hora tentando mas sempre q instancio novo balao a bandeira muda nos dois!!Pokedlg escreveu:Isso não era para acontecer porque ele pega a mesh sempre da nova bandeira instaciada.
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Estranho, aqui funciona normalmente, manda o codigo para eu ver o que possa estar acontecendo.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
obg msmPokedlg escreveu:Estranho, aqui funciona normalmente, manda o codigo para eu ver o que possa estar acontecendo.
using UnityEngine.EventSystems;
using System.Collections.Generic;
using UnityEngine;
public class Botoes : MonoBehaviour
{
public Texture[] bandeiraTexture;
private int idBandeiraTexture ;
public GameObject bandeira;
private MeshRenderer MeshBandeira;
public float spd = 1f;
public GameObject Aqui;
public GameObject[] balao;
private GameObject novoBalao;
public Texture[] balaoTexture;
private int idBalaoTexture;
private MeshRenderer meshBalao;
private Rigidbody rb;
private GameObject guia;
public bool conectado = true;
//public GameObject bandeira;
void Start()
{
GameObject fogos = GameObject.FindWithTag("fogo");
// fogos.SetActive(false);
rb = GetComponent<Rigidbody>();
}
public void update()
{
http://novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);
}
public void InstanciarBalao(int idBalao)
{
novoBalao = Instantiate(balao[idBalao], new Vector3(Aqui.transform.position.x, Aqui.transform.position.y + 15, Aqui.transform.position.z), balao[idBalao].transform.rotation);
meshBalao = novoBalao.GetComponent<MeshRenderer>();
idBalaoTexture = 0;
meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];
}
public void instanciarBandeira(int idBandeira )
{
GameObject newFlag = Instantiate(bandeira, Vector3.zero, bandeira.transform.rotation, novoBalao.transform);
newFlag.transform.localPosition = new Vector3(0,0, -5f);
MeshBandeira = bandeira.GetComponent<MeshRenderer>();
idBandeiraTexture = 0;
MeshBandeira.sharedMaterial.mainTexture = bandeiraTexture[idBandeiraTexture];
}
public void mudarCorBalao()
{
idBalaoTexture++;
if (idBalaoTexture >= balaoTexture.Length) { idBalaoTexture = 0; }
meshBalao.material.mainTexture = balaoTexture[idBalaoTexture];
}
public void subirBalao()
{
novoBalao.transform.Translate(0, -0.05f * Time.deltaTime, 0.1f);
}
public void liberarBalao()
{
guia = novoBalao.transform.Find("GUIA").gameObject;
guia.SetActive(false);
rb = novoBalao.GetComponent<Rigidbody>();
rb.isKinematic = false;
GameObject fogos = GameObject.FindWithTag("fogo");
http://fogos.SetActive(true);
}
public void ChangeFlagTexture(int bandeira) //Funcao mudar a textura da bandeira
{
idBandeiraTexture++; //O index aumenta para mudar para a proxima textura
if (idBandeiraTexture >= bandeiraTexture.Length) { idBandeiraTexture = 0; } //O index reseta caso passe do tamanho da array
// buttonTextureFlag.transform.GetChild(0).GetComponent<Image>().sprite = viewTextureButton[idFlagTexture]; //Pega a imagem do botao que mostra em que textura da bandeira esta (visualizador) e modifica de acordo com o index da textura
MeshBandeira.sharedMaterial.mainTexture = bandeiraTexture[idBandeiraTexture]; //Modifica a textura da bandeira
}
}
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Acontece que voce não está alterando a mesh da nova bandeira instanciada, voce está alterando a mesh do prefab da bandeira, que cria as novas bandeiras e é por isso que voce teve que usar o sharedMaterial, por estar tentando alterar um prefab. Na linha
tente fazer assim:
assim voce estará pegando o material da nova bandeira.
- Código:
MeshBandeira = bandeira.GetComponent<MeshRenderer>(); //voce utiliza o bandeira.GetComponent<MeshRenderer>();
tente fazer assim:
- Código:
MeshBandeira = newFlag.GetComponent<MeshRenderer>();
assim voce estará pegando o material da nova bandeira.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Pokedlg escreveu:Acontece que voce não está alterando a mesh da nova bandeira instanciada, voce está alterando a mesh do prefab da bandeira, que cria as novas bandeiras e é por isso que voce teve que usar o sharedMaterial, por estar tentando alterar um prefab. Na linha
- Código:
MeshBandeira = bandeira.GetComponent<MeshRenderer>(); //voce utiliza o bandeira.GetComponent<MeshRenderer>();
tente fazer assim:
- Código:
MeshBandeira = newFlag.GetComponent<MeshRenderer>();
assim voce estará pegando o material da nova bandeira.
b dia a bandeira e meu objeto da bandeira como se fosse newflag eu so coloquei esse nome p ficar mas facil !
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
capim22 escreveu:Pokedlg escreveu:Acontece que voce não está alterando a mesh da nova bandeira instanciada, voce está alterando a mesh do prefab da bandeira, que cria as novas bandeiras e é por isso que voce teve que usar o sharedMaterial, por estar tentando alterar um prefab. Na linha
- Código:
MeshBandeira = bandeira.GetComponent<MeshRenderer>(); //voce utiliza o bandeira.GetComponent<MeshRenderer>();
tente fazer assim:
- Código:
MeshBandeira = newFlag.GetComponent<MeshRenderer>();
Bom dia resolvido certissimo obg por tda ajuda n sei como agradecer por td seu trabalho muito obg msm sucesso sempre ae!!!!!!
RESOLVIDO!
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
capim22 escreveu:capim22 escreveu:Pokedlg escreveu:Acontece que voce não está alterando a mesh da nova bandeira instanciada, voce está alterando a mesh do prefab da bandeira, que cria as novas bandeiras e é por isso que voce teve que usar o sharedMaterial, por estar tentando alterar um prefab. Na linha
- Código:
MeshBandeira = bandeira.GetComponent<MeshRenderer>(); //voce utiliza o bandeira.GetComponent<MeshRenderer>();
tente fazer assim:
- Código:
MeshBandeira = newFlag.GetComponent<MeshRenderer>();
Bom dia resolvido certissimo obg por tda ajuda n sei como agradecer por td seu trabalho muito obg msm sucesso sempre ae!!!!!!
RESOLVIDO!
So um extra aqui sabe me dizer pq n consigo usar o skinned agora?
MeshBandeira = newFlag.GetComponent<SkinnedMeshRenderer>(); da erro com skinned irei usar o cloth! sabe pq?
capim22- Avançado
- PONTOS : 2045
REPUTAÇÃO : 20
Respeito as regras :
Re: [RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
Bom dia, Denada!! Sucesso para vc também! Voce alterou a variavel MeshBandeira que era MeshRenderer e tem que ser SkinnedMeshRenderer? A variavel tem que ficar assim:
- Código:
private SkinnedMeshRenderer MeshBandeira;
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Pegar filho pelo nome
» [RESOLVIDO] Instanciar um objeto como filho
» [RESOLVIDO] Remover objeto filho
» [RESOLVIDO]Como altero o som de passos do FPS controller conforme muda de terreno
» [RESOLVIDO] Como verificar a tag de um filho de um GameObject
» [RESOLVIDO] Instanciar um objeto como filho
» [RESOLVIDO] Remover objeto filho
» [RESOLVIDO]Como altero o som de passos do FPS controller conforme muda de terreno
» [RESOLVIDO] Como verificar a tag de um filho de um GameObject
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos