[DÚVIDA] Como descobrir se o Player está na frente do Npc
5 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[DÚVIDA] Como descobrir se o Player está na frente do Npc
eae
galera preciso de ajuda ,como eu posso descobrir se o Player Está ná frente do Npc? já tentei usar RayCast mais isso só funciona se ele literalmente estiver entre o Raycast! oque eu quero fazer é mais ou menos isso
galera preciso de ajuda ,como eu posso descobrir se o Player Está ná frente do Npc? já tentei usar RayCast mais isso só funciona se ele literalmente estiver entre o Raycast! oque eu quero fazer é mais ou menos isso
Última edição por Matheus sonico em Dom Jan 22, 2017 11:14 pm, editado 1 vez(es)
Matheus sonico- Avançado
- PONTOS : 3836
REPUTAÇÃO : 29
Idade : 22
Respeito as regras :
Re: [DÚVIDA] Como descobrir se o Player está na frente do Npc
A solucao é raycast mesmo, so que voce deve verificar o angulo de visao do NPC e lançar o raycast com base no angulo entre o player e o NPC:
Não se esqueça de adicionar a tag Player ao Player.
Se voce quiser que o raycast saia do "Olho" do personagem pode criar mais uma variavel Transform e linkar a posicao do olho do player e fazer o raycast sair de la:
- Código:
public Transform player; // TRNAFORM DO PLAYER
public float fieldOfViewDegrees = 180f; // ANGULO QUE PODE VER
public float visibilityDistance = 30f; // DISTANCIA QUE PODE VER
public bool CanSeePlayer()
{
RaycastHit hit;
Vector3 rayDirection = player.position - transform.position;
// VERIFICAR SE ESTA DENTRO DO ANGULO DE VISAO
if ((Vector3.Angle(rayDirection, transform.forward)) <= fieldOfViewDegrees * 0.5f)
{
if (Physics.Raycast(transform.position, rayDirection, out hit, visibilityDistance))
{
// RETORNA true SE O OBJETO QUE COLIDIU COM O RAYCAST TIVER TAG Player
return (hit.transform.CompareTag("Player"));
}
}
return false;
}
Não se esqueça de adicionar a tag Player ao Player.
Se voce quiser que o raycast saia do "Olho" do personagem pode criar mais uma variavel Transform e linkar a posicao do olho do player e fazer o raycast sair de la:
- Código:
// VARIAVEL A SER ADICIONADA NO COMEÇO
public Transform olho;
// ALTERAR DIRECAO DO RAYCAST COM BASE NO OLHO DO NPC
Vector3 rayDirection = player.position - olho.position;
Última edição por Manawydan em Dom Jan 22, 2017 8:42 pm, editado 1 vez(es)
Re: [DÚVIDA] Como descobrir se o Player está na frente do Npc
- Código:
using UnityEngine;
public class Vector3Dot : MonoBehaviour
{
private Transform _playerTransform;
private void Start()
{
if (_playerTransform == null)
_playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
}
private void Update()
{
Vector3 direction = _playerTransform.position - transform.position;
if (Vector3.Dot(transform.position, direction.normalized) > 0)
Debug.Log(_playerTransform.name + " Esta em frente");
else
Debug.Log(_playerTransform.name + " Nao estao em frente");
}
}
Re: [DÚVIDA] Como descobrir se o Player está na frente do Npc
vlw gente os dois deram certo aqui :D ,mas irei utilizar o método do RayCast
Matheus sonico- Avançado
- PONTOS : 3836
REPUTAÇÃO : 29
Idade : 22
Respeito as regras :
Re: [DÚVIDA] Como descobrir se o Player está na frente do Npc
Sei que já está resolvido, mas já tive problemas em o raycast ser muito "fino" para detectar um determinado objeto. A melhor solução que encontrei foi ter um collider maior no objeto a ser detectado, sendo no próprio objeto ou em um gameobject filho no caso de objetos que precisam de física. Tem também a CapsuleCast , mas é muito cara em processamento.
Re: [DÚVIDA] Como descobrir se o Player está na frente do Npc
artplayer escreveu:Sei que já está resolvido, mas já tive problemas em o raycast ser muito "fino" para detectar um determinado objeto. A melhor solução que encontrei foi ter um collider maior no objeto a ser detectado, sendo no próprio objeto ou em um gameobject filho no caso de objetos que precisam de física. Tem também a CapsuleCast , mas é muito cara em processamento.
Eu crio 2 raycasts, um em cada borda do capsule collider, consome bem menos que o CapsuleCast...
George Lucas Vieira- Avançado
- PONTOS : 3392
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Tópicos semelhantes
» [DUVIDA] Player só anda para frente
» como fazer um objeto ser criado na frente do player
» Como fazer o Player ir para a frente dele, independente da orientação?
» Como usar Vector3.Angles para detectar que algo está na frente de outro objeto?
» [Unity 5] Como verificar se player está se locomovendo ?
» como fazer um objeto ser criado na frente do player
» Como fazer o Player ir para a frente dele, independente da orientação?
» Como usar Vector3.Angles para detectar que algo está na frente de outro objeto?
» [Unity 5] Como verificar se player está se locomovendo ?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos