[RESOLVIDO] Raycast que seque o player
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Raycast que seque o player
Parece simples e é mas por alquma razão eu to tendo problemas ,to fazendo uma visão para o inimigo ,eu consegui achar uma maneira facil de fazer o mais complicado que é uma visão em formato de cone na frente do inimigo ,mas só em teoria pq é um tipo de verificar a orientação do inimigo em relação ao player. na verdade isso não vem ao caso só vou deixar o script caso alquem queira usar.
como isso dá pra saber se o player tá de frente pro inimigo ,só que eu quero usar um Raycast junto ,para caso tenha alguma parede na frente dessa visão o inimigo não enxergue o player ou seja se o hit.point não bater no player ,então eu fiz o codigo ficar assim.
só que não to conseguindo aplicar a logica ,me parece muito fácil mas sou péssimo com manipulação de Raycasts ,tipo eu quero que sempre o hit.point esteja colado no player e quando finalmente ele estiver dentro da visão e não tiver nada na frente do player ai o inimigo pode velo.
- Código:
Vector3 targetDir = player.transform.position - transform.position;
float angle = Vector3.Angle(targetDir, transform.forward);
float distancia = Vector3.Distance(transform.position,player.transform.position);
if(angle < 40.0f && distancia < maxDistancia)
{
//Debug.Log("enchergou");
estado = "perceguir";
}
como isso dá pra saber se o player tá de frente pro inimigo ,só que eu quero usar um Raycast junto ,para caso tenha alguma parede na frente dessa visão o inimigo não enxergue o player ou seja se o hit.point não bater no player ,então eu fiz o codigo ficar assim.
- Código:
void Viu()
{
Vector3 targetDir = player.transform.position - transform.position;
float angle = Vector3.Angle(targetDir, transform.forward);
float distancia = Vector3.Distance(transform.position,player.transform.position);
RaycastHit hit;
if(Physics.Raycast(transform.position + transform.up + transform.forward * 2,player.transform.position,out hit, MaxRadius))
{
Debug.Log(hit.transform.name);
if(hit.transform.name == player.name)
{
if(angle < 40.0f && distancia < maxDistancia)
{
//Debug.Log("enchergou");
estado = "perceguir";
}
}
}
Debug.DrawLine(transform.position + transform.up + transform.forward *2,hit.point);
}
só que não to conseguindo aplicar a logica ,me parece muito fácil mas sou péssimo com manipulação de Raycasts ,tipo eu quero que sempre o hit.point esteja colado no player e quando finalmente ele estiver dentro da visão e não tiver nada na frente do player ai o inimigo pode velo.
hendrick22- MembroAvançado
- PONTOS : 2692
REPUTAÇÃO : 57
Idade : 25
Respeito as regras :
Re: [RESOLVIDO] Raycast que seque o player
Por que não usa OnBecameVisible em vez de raycast? É bem mais leve...
Também da pra usar um if na mesh do seu player, exemplo, meshRenderer.isVisible
Também da pra usar um if na mesh do seu player, exemplo, meshRenderer.isVisible
Re: [RESOLVIDO] Raycast que seque o player
OnbecameVisible vou dar uma olhada ,mas Marcos não to fazendo muitos Raycasts é só um mesmo que o vetor no qual quero que ele siga seja o Player pra poder limitar a visão do inimigo ,a função do angulo já funciona muito bem sozinha ,mas se tiver algo na frente ele vai ver o player de qualquer jeito ,queria fazer algo semelhante ao que vc usou para não deixar a camera entrar ne um objeto ,nos tutoriais de camera em terceira pessoa.MarcosSchultz escreveu:Por que não usa OnBecameVisible em vez de raycast? É bem mais leve...
Também da pra usar um if na mesh do seu player, exemplo, meshRenderer.isVisible
com hit.point
a e queria te agradacer se eu sei um pouco de c# hojé é por causa de vc.
hendrick22- MembroAvançado
- PONTOS : 2692
REPUTAÇÃO : 57
Idade : 25
Respeito as regras :
Re: [RESOLVIDO] Raycast que seque o player
Você pode usar um if de conferência entre 2 pontos, usando Physics.Linecast(inicio, fim)
Re: [RESOLVIDO] Raycast que seque o player
funciono ,obrigado tai como ficou o codigoMarcosSchultz escreveu:Você pode usar um if de conferência entre 2 pontos, usando Physics.Linecast(inicio, fim)
- Código:
void Viu()
{
Vector3 targetDir = player.transform.position - transform.position;
float angle = Vector3.Angle(targetDir, transform.forward);
float distancia = Vector3.Distance(transform.position,player.transform.position);
RaycastHit hit;
if(Physics.Linecast(transform.position + transform.up + transform.forward,player.transform.position + Vector3.up,out hit))
{
//Debug.Log("viu o objeto"+ hit.transform.name);
if(hit.transform.name == player.name)
{
if(angle < 40.0f && distancia < maxDistancia)
{
//Debug.Log("enchergou");
estado = "perceguir";
}
}
}
}
hendrick22- MembroAvançado
- PONTOS : 2692
REPUTAÇÃO : 57
Idade : 25
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO]Checar touch em objetos e Raycast Raycast..
» [RESOLVIDO] Raycast (erro?)
» [RESOLVIDO] Raycast
» [RESOLVIDO] Raycast Sol
» [RESOLVIDO] Duvida com RayCast
» [RESOLVIDO] Raycast (erro?)
» [RESOLVIDO] Raycast
» [RESOLVIDO] Raycast Sol
» [RESOLVIDO] Duvida com RayCast
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos