[RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Olá a todos, tudo bom?
Estou estudando o uso do Input System e Cinemachine no meu jogo.
Ao começar a estudar sobre o Multiplayer Local, fiquei com um problema que está me travando e não consigo encontrar informações em outros lugares para estudar sobre.
Transformei o meu carro em um Prefab e ele é Instanciado ao apertar em algum botão no Teclado ou no Controle, até ai está tudo certo, porém o CinemachineVirtualCamera solicita um
Follow e um Target.
E o meu GameObject com a informação que era passada ao Cinemachine é filho de Carro e só aparece quando é instanciado, com isso a câmera fica no centro da tela e não é atrelada ao carro.
E este é um só exemplo, pois gostaria de aprender a fazer isso, pois usarei este método não só nesta situação, mas em diversas outras.
O Script abaixo eu já consigo adicionar a informação que preciso ao Cinemachine, mais ainda não sei como acessar o objeto 'Target' filho do Carro.
[size=41] [/size]
Estou estudando o uso do Input System e Cinemachine no meu jogo.
Ao começar a estudar sobre o Multiplayer Local, fiquei com um problema que está me travando e não consigo encontrar informações em outros lugares para estudar sobre.
Transformei o meu carro em um Prefab e ele é Instanciado ao apertar em algum botão no Teclado ou no Controle, até ai está tudo certo, porém o CinemachineVirtualCamera solicita um
Follow e um Target.
E o meu GameObject com a informação que era passada ao Cinemachine é filho de Carro e só aparece quando é instanciado, com isso a câmera fica no centro da tela e não é atrelada ao carro.
E este é um só exemplo, pois gostaria de aprender a fazer isso, pois usarei este método não só nesta situação, mas em diversas outras.
O Script abaixo eu já consigo adicionar a informação que preciso ao Cinemachine, mais ainda não sei como acessar o objeto 'Target' filho do Carro.
[size=41] [/size]
- Código:
Cinemachine.CinemachineVirtualCamera c_VirtualCamera;
public Transform target;
public GameObject carro;
private void Awake()
{
c_VirtualCamera = GetComponent<Cinemachine.CinemachineVirtualCamera>();
}
private void Update() {
if (carro == null){
carro = GameObject.FindWithTag("Carro");
}
c_VirtualCamera.m_LookAt = target.transform;
c_VirtualCamera.m_Follow = target.transform;
}
RenatoBarreto- Iniciante
- PONTOS : 1391
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Re: [RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Acho que o problema vai um pouco além de só pegar um filho do carro, tá usando o que pro multiplayer?
Você vai querer que a câmera ache um gameobject filho do carro, mas apenas se o carro for o que o jogador controla em seu computador.
Se eu tô com um fusca e você com um Audi, no meu PC a câmera precisa checar quem é o player local/localplayer/hasAutority pra então pegar o veiculo e só então achar o objeto target.
Assim a minha câmera acha meu fusca e ignora seu Audi e no seu PC a sua acha seu Audi e ignora meu fusca.
Você vai querer que a câmera ache um gameobject filho do carro, mas apenas se o carro for o que o jogador controla em seu computador.
Se eu tô com um fusca e você com um Audi, no meu PC a câmera precisa checar quem é o player local/localplayer/hasAutority pra então pegar o veiculo e só então achar o objeto target.
Assim a minha câmera acha meu fusca e ignora seu Audi e no seu PC a sua acha seu Audi e ignora meu fusca.
Fagner- Moderador
- PONTOS : 4444
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Desculpa eu não especifiquei, mas por enquanto estou testando o multiplayer local.
Minha maior dificuldade está sendo realmente acessar objetos dentro do Prefab. Tenho algumas outras coisas no jogo que também verificam objetos que estão dentro do carro.
Eu li a documentação de GetChild, GameObject.Find, e diversos outros e não sei como acesso um objeto dentro de um Prefab apenas no momento em que esse Prefab é Instaciado.
Minha maior dificuldade está sendo realmente acessar objetos dentro do Prefab. Tenho algumas outras coisas no jogo que também verificam objetos que estão dentro do carro.
Eu li a documentação de GetChild, GameObject.Find, e diversos outros e não sei como acesso um objeto dentro de um Prefab apenas no momento em que esse Prefab é Instaciado.
RenatoBarreto- Iniciante
- PONTOS : 1391
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Re: [RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Olha, buscar por nome ou por hierarquia é suscetível a erros, se fosse você criaria um script com a única finalidade de armazenar referências, esse script ficaria no prefab e teria o target e tudo mais que você vier a precisar.
Quando instanciar, você faz assim:
Gameobject carro = instantiate(...);
Cinemachine.target = carro.getComponent<ReferenciasCarro>().target;
Quando instanciar, você faz assim:
Gameobject carro = instantiate(...);
Cinemachine.target = carro.getComponent<ReferenciasCarro>().target;
Fagner- Moderador
- PONTOS : 4444
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Fagner, entendi.
Muito obrigado mesmo pela ajuda, vou tentar da maneira que você indiciou.
Muito obrigado mesmo pela ajuda, vou tentar da maneira que você indiciou.
RenatoBarreto- Iniciante
- PONTOS : 1391
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Re: [RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Então, quero deixar aqui para outras pessoas que possam ter a mesma dificuldade que eu, por enquanto eu fiz assim.
Como você falou Fagner, criei um outro objeto vazio chamado AlvoP1 que está sempre na atrelado ao Follow e Look At do Cinemachine na Câmera do Player 1.
No Objeto Target dentro do carro botei um código e deu acesso público as informações de Position e Rotation.
No Script que estava no Objeto AlvoP1 eu fiz o seguinte.
OBS.: Não sou programador, então com certeza tem algo errado, mas agora está funcionando um pouco.
OBS.: Neste código que eu fiz, o câmera segue o carro, mas fica tremendo e sacudindo, estou estudando sobre Normalize para ver se pode ser este o problema.
Mais uma vez, muito obrigado Fagner por compartilhar seu conhecimento.
Como você falou Fagner, criei um outro objeto vazio chamado AlvoP1 que está sempre na atrelado ao Follow e Look At do Cinemachine na Câmera do Player 1.
No Objeto Target dentro do carro botei um código e deu acesso público as informações de Position e Rotation.
No Script que estava no Objeto AlvoP1 eu fiz o seguinte.
OBS.: Não sou programador, então com certeza tem algo errado, mas agora está funcionando um pouco.
OBS.: Neste código que eu fiz, o câmera segue o carro, mas fica tremendo e sacudindo, estou estudando sobre Normalize para ver se pode ser este o problema.
Mais uma vez, muito obrigado Fagner por compartilhar seu conhecimento.
- Código:
public class DarFollowLook : MonoBehaviour
{
public Vector3 copiaPosicaoAlvo;
public Quaternion copiaRotacaoAlvo;
public GameObject Target;
private void Update()
{
if(Target == null)
{
Target = GameObject.FindWithTag("Target");
} else
{
CopiaPosicao();
transform.position = transform.position = copiaPosicaoAlvo;
transform.rotation = transform.rotation = copiaRotacaoAlvo;
Debug.Log("Só para testar a posição -> " + copiaPosicaoAlvo);
Debug.Log("Só para testar a rotação -> " + copiaRotacaoAlvo);
}
}
private void CopiaPosicao()
{
copiaPosicaoAlvo = Target.GetComponent<ReferenciaCarro1>().posicaoTarget;
copiaRotacaoAlvo = Target.GetComponent<ReferenciaCarro1>().rotacaoTarget;
}
}
RenatoBarreto- Iniciante
- PONTOS : 1391
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Re: [RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
Desculpem eu sou novo no fórum, mas consegui resolver o problema.
O fiz um caminho desnecessário no meu Script e era só usar a alteração abaixo ao invés de ter um método para Copiar a Posição do objeto Target.
Agosta está tudo funcionando perfeitamente.
Sou novo no Fórum e não sei como marcar que este tópico está Resolvido.
O fiz um caminho desnecessário no meu Script e era só usar a alteração abaixo ao invés de ter um método para Copiar a Posição do objeto Target.
Agosta está tudo funcionando perfeitamente.
- Código:
transform.position = Target.transform.position;
transform.rotation = Target.transform.rotation;
Sou novo no Fórum e não sei como marcar que este tópico está Resolvido.
RenatoBarreto- Iniciante
- PONTOS : 1391
REPUTAÇÃO : 5
Idade : 33
Respeito as regras :
Tópicos semelhantes
» Quero setar uma variavel de um objeto para outros objetos , mas o objeto esta dentro de uma array desse objeto
» [RESOLVIDO] Rotacionar Prefab dentro da Scene
» [RESOLVIDO] Meu prefab não esta salvando objetos linkados.
» [Resolvido]Objeto não está sendo instanciado
» [RESOLVIDO] Rigidbody2D.AddForce esta teleportando o objeto
» [RESOLVIDO] Rotacionar Prefab dentro da Scene
» [RESOLVIDO] Meu prefab não esta salvando objetos linkados.
» [Resolvido]Objeto não está sendo instanciado
» [RESOLVIDO] Rigidbody2D.AddForce esta teleportando o objeto
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos