Como fazer o raycast ignorar a primeira colisao?
2 participantes
Página 1 de 1
Como fazer o raycast ignorar a primeira colisao?
Olá queria saber como eu faço para lançar um raycast e esse mesmo raycast quando colidir com algum collider ignorar esta colisao e pegar a segunda colisao.
dazentt55- Avançado
- PONTOS : 3016
REPUTAÇÃO : 10
Áreas de atuação : progamador
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Primeiro me responda uma coisa, essa primeira colisão que você quer ignorar, se trata do seu objeto emissor do raycast?(ex: seu player, sua arma, etc)dazentt55 escreveu:Olá queria saber como eu faço para lançar um raycast e esse mesmo raycast quando colidir com algum collider ignorar esta colisao e pegar a segunda colisao.
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Nao amigo, e que eu queria alterar a cor de um objeto que está atraz de outro objeto para o player conseguir ver esse objeto e o unico jeito que imaginei seria ignorar o 1 raycastFagner escreveu:Primeiro me responda uma coisa, essa primeira colisão que você quer ignorar, se trata do seu objeto emissor do raycast?(ex: seu player, sua arma, etc)dazentt55 escreveu:Olá queria saber como eu faço para lançar um raycast e esse mesmo raycast quando colidir com algum collider ignorar esta colisao e pegar a segunda colisao.
dazentt55- Avançado
- PONTOS : 3016
REPUTAÇÃO : 10
Áreas de atuação : progamador
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Entendi, eu fiz uma cena de exemplo que faz exatamente isso que você quer:
Ela armazena todos os hits do raycast e muda apenas o material do segundo item...
aqui está o Link da cena
*Versão da Unity: 2017.1.1
e aqui o script que fiz:
Mas pelo que entendi, talvez essa não seja a melhor maneira de fazer isso, você já pesquisou sobre outline em objetos?
Ela armazena todos os hits do raycast e muda apenas o material do segundo item...
aqui está o Link da cena
*Versão da Unity: 2017.1.1
e aqui o script que fiz:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Raycaster : MonoBehaviour {
public Material novoMaterial;
void Update () {
RaycastHit[] Colisoes; // vetor de colisões
Colisoes = Physics.RaycastAll(transform.position, Vector3.forward, 10); //colisoes recebe todos os hits em 10 units de distância.
if (Colisoes.Length > 1) { //Se o numero de colisões for maior que 1
RaycastHit colisao2 = Colisoes[1]; //colisao2 recebe o segundo hit, lembrando que o vetor inicia em 0 (0,1,2...)
Debug.DrawRay(transform.position, colisao2.transform.position); //Mostra o raycast indo do emissor ao segundo objeto em colisao.
Renderer cubo = colisao2.transform.GetComponent<Renderer>(); //cubo armazena o componente renderer do segundo objeto a colidir com o raycast
cubo.material = novoMaterial; //O cubo recebe o novo material
}
}
}
Mas pelo que entendi, talvez essa não seja a melhor maneira de fazer isso, você já pesquisou sobre outline em objetos?
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Fagner escreveu:Entendi, eu fiz uma cena de exemplo que faz exatamente isso que você quer:
Ela armazena todos os hits do raycast e muda apenas o material do segundo item...
aqui está o Link da cena
*Versão da Unity: 2017.1.1
e aqui o script que fiz:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Raycaster : MonoBehaviour {
public Material novoMaterial;
void Update () {
RaycastHit[] Colisoes; // vetor de colisões
Colisoes = Physics.RaycastAll(transform.position, Vector3.forward, 10); //colisoes recebe todos os hits em 10 units de distância.
if (Colisoes.Length > 1) { //Se o numero de colisões for maior que 1
RaycastHit colisao2 = Colisoes[1]; //colisao2 recebe o segundo hit, lembrando que o vetor inicia em 0 (0,1,2...)
Debug.DrawRay(transform.position, colisao2.transform.position); //Mostra o raycast indo do emissor ao segundo objeto em colisao.
Renderer cubo = colisao2.transform.GetComponent<Renderer>(); //cubo armazena o componente renderer do segundo objeto a colidir com o raycast
cubo.material = novoMaterial; //O cubo recebe o novo material
}
}
}
Mas pelo que entendi, talvez essa não seja a melhor maneira de fazer isso, você já pesquisou sobre outline em objetos?
Muito obrigado, era exatamente isso o que eu precisava :D
dazentt55- Avançado
- PONTOS : 3016
REPUTAÇÃO : 10
Áreas de atuação : progamador
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Disponha...dazentt55 escreveu:
Muito obrigado, era exatamente isso o que eu precisava :D
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Fiquei com uma dúvida agora, como eu vou fazer para o material do objeto ser alterado? tem alguma forma de eu pegar quando o raycast para de colidir com aluma tag? ou algo do tipo?Fagner escreveu:Disponha...dazentt55 escreveu:
Muito obrigado, era exatamente isso o que eu precisava :D
dazentt55- Avançado
- PONTOS : 3016
REPUTAÇÃO : 10
Áreas de atuação : progamador
Respeito as regras :
Re: Como fazer o raycast ignorar a primeira colisao?
Na cena de exemplo já faço a alteração de material, mas se com alterar, você quer dizer voltar ao material antigo, é fácil, lembre-se que temos uma variável cubo que já recebe o novo material, é só armazenar o material original numa variável temporária, e quando o raycast parar de tocar, atribuir de volta.dazentt55 escreveu:Fiquei com uma dúvida agora, como eu vou fazer para o material do objeto ser alterado? tem alguma forma de eu pegar quando o raycast para de colidir com aluma tag? ou algo do tipo?Fagner escreveu:Disponha...dazentt55 escreveu:
Muito obrigado, era exatamente isso o que eu precisava :D
Caso queira, também pode usar o IF no qual faço a checagem se as colisões são maiores que 1 e acrescentar outra condição para checar por tag, para que apenas os objetos com a tag possam mudar o material, e não todos.
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Tópicos semelhantes
» (Duvida) Ignorar colisão 2D.
» Como ignorar um erro? fazer ele parar de aparecer no console?
» Raycast - Spawnar objeto na colisão do raycast
» Como fazer com que collider detecte colisao de objeto especifico?
» COMO FAZER COLISÃO COM CAIXAS TIPO OS PUZZLES DO PATETA E MAX DO SNES?
» Como ignorar um erro? fazer ele parar de aparecer no console?
» Raycast - Spawnar objeto na colisão do raycast
» Como fazer com que collider detecte colisao de objeto especifico?
» COMO FAZER COLISÃO COM CAIXAS TIPO OS PUZZLES DO PATETA E MAX DO SNES?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos