[RESOLVIDO] Inimigo detecta outro Inimigo.
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Inimigo detecta outro Inimigo.
pessoal vou tentar ser bastante transparente na explicação eu queria muito resolver isso:
o jogo se trata de Moba dai o problema parte de quando um minion executa o outro...
o q acontece ?
Bom acontece que quando um minion mata o outro ele n segue para o proximo inimigo JÁ instanciado.... ele ignora totalmente os outros Já instanciados e segue direto para a base inimiga... ele so reconhece outro inimigo quando esse outro inimigo Spawma no jogo porém ele n reconhece um minion q já esta Instanciado....
bom se o minion já esta no jogo ele só reconhece os minion inimigo q instância depois dele.
quando digo "não reconhece/não encontra" eu digo do transform do minion inimigo abaixo a linha de codigo com erro ;
essa e parte "MinionRedStatus.tr_minion_red.position" ainda é o transforme do já falecido minion e eu n sei fazer com q os minions atualizem esse codigo para seguir outro minion q ja esteja instanciado ao inver de esperar o proximo instanciar;
o jogo se trata de Moba dai o problema parte de quando um minion executa o outro...
o q acontece ?
Bom acontece que quando um minion mata o outro ele n segue para o proximo inimigo JÁ instanciado.... ele ignora totalmente os outros Já instanciados e segue direto para a base inimiga... ele so reconhece outro inimigo quando esse outro inimigo Spawma no jogo porém ele n reconhece um minion q já esta Instanciado....
bom se o minion já esta no jogo ele só reconhece os minion inimigo q instância depois dele.
quando digo "não reconhece/não encontra" eu digo do transform do minion inimigo abaixo a linha de codigo com erro ;
essa e parte "MinionRedStatus.tr_minion_red.position" ainda é o transforme do já falecido minion e eu n sei fazer com q os minions atualizem esse codigo para seguir outro minion q ja esteja instanciado ao inver de esperar o proximo instanciar;
- Código:
var distancia_minionred = Vector3.Distance(transform.position, MinionRedStatus.tr_minion_red.position);
hellside- Membro
- PONTOS : 1851
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
Use Raycasts para fazer isso, vc consegue fazer o minions dectetar outros minions ao redor, como um campo, bom existem outros modos acho que mais eficientes de se fazer essa parte além do Raycast, mas a ideia como um campo definido e uma rota a seguir, isso vai travar qualquer problema que possa acontecer com os minions.
poyser- Avançado
- PONTOS : 3034
REPUTAÇÃO : 46
Idade : 26
Áreas de atuação : https://play.google.com/store/apps/dev?id=6312026995180986052
Respeito as regras :
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
Eu sei fazer um Rycast como uma linha unica para qualquer lado mas n sei fazer um raycast q detecta em area....
uma vez eu coloquei um pivo no centro de um inimigo e coloquei um raio saindo desse pivo equando ele ficava girando como se fosse um radar de um submarino kkk funcionou mas gerou muitos problemas kkkk
vou refazer o codigo em Rycasts talvez fique melhor Vlw mano muito obrigado.
uma vez eu coloquei um pivo no centro de um inimigo e coloquei um raio saindo desse pivo equando ele ficava girando como se fosse um radar de um submarino kkk funcionou mas gerou muitos problemas kkkk
vou refazer o codigo em Rycasts talvez fique melhor Vlw mano muito obrigado.
hellside- Membro
- PONTOS : 1851
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
Entao.... eu coloquei um Rycast para detectar o inimigo so q deu a mesma coisa ... o raio so reconhece o ultimo inimigo q instanciou mesmo se os outros possuem tbm o componente q o raio procura.
hellside- Membro
- PONTOS : 1851
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
bem tem outro jeito alem do raycast.
da pra criar uma esfera/cubo imaginario e pegar todos os Colliders dentro dele
os métodos abaixo retornam um Collider[]
https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html
https://docs.unity3d.com/ScriptReference/Physics.OverlapBox.html
e caso queira algo visual pra ajudar, dá pra criar um:
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDrawGizmos.html
com isso dá pra criar uma esfera do tamanho do seu overlap pra conseguir enxergar melhor.
e no overlap também da pra limitar tudo a uma layer especifica
da pra criar uma esfera/cubo imaginario e pegar todos os Colliders dentro dele
os métodos abaixo retornam um Collider[]
https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html
https://docs.unity3d.com/ScriptReference/Physics.OverlapBox.html
e caso queira algo visual pra ajudar, dá pra criar um:
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDrawGizmos.html
com isso dá pra criar uma esfera do tamanho do seu overlap pra conseguir enxergar melhor.
e no overlap também da pra limitar tudo a uma layer especifica
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
Como eu falei tem outros metodos mais eficazes para se fazer isso, como o @dutrabr100 mencionou acima
poyser- Avançado
- PONTOS : 3034
REPUTAÇÃO : 46
Idade : 26
Áreas de atuação : https://play.google.com/store/apps/dev?id=6312026995180986052
Respeito as regras :
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
pessoal valeu pela ajuda vlw mesmo eu fiz por Raycast e gostei do resultado mas quando eu for fazer inimigos q voam irei aplicar outros metodos,... eu ainda tenho q aprender a trabalhar com layers aqui a baixo vou deixar o codigo de detecção como ficou... eu gostei do resultado.
- Código:
public class Minion: MonoBehaviour
{
public float raio;
torreBlue script_torreBlue;
public Transform tr_do_raio;
Animator anima_minion;
public NavMeshAgent nav_Agent;
public float move_speed;
public float Olhar_alvo;
public bool atacarMinionBlue;
public bool atacarTorre;
public bool olharfrente;
}
void Start()
{
anima_minion = GetComponent<Animator>();
nav_Agent = GetComponent<NavMeshAgent>();
script_torreBlue = GameObject.FindObjectOfType<torreBlue>();
nav_Agent.speed = move_speed;
atacarMinionBlue = true;
atacarTorre = true;
}
void Update()
{
RaycastHit frente;
if (Physics.Raycast(tr_do_raio.position, Vector3.forward, out frente, raio))
{
olharfrente = true;
if (olharfrente)
{
if (frente.transform.tag == "minionBlue")
{
Debug.DrawLine(transform.position, frente.point);
if (atacarMinionBlue)
{
atacarTorre = false;
nav_Agent.destination = transform.position;
anima_minion.SetBool("perseguir", false);
anima_minion.SetBool("atacar", true);
var rotation = Quaternion.LookRotation(frente.transform.position - transform.position);
rotation.x = 0;
rotation.z = 0;
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Olhar_alvo);
}
}
else
{
olharfrente = false;
atacarTorre = true;
}
}
}
}
hellside- Membro
- PONTOS : 1851
REPUTAÇÃO : 17
Respeito as regras :
Re: [RESOLVIDO] Inimigo detecta outro Inimigo.
hellside escreveu:pessoal valeu pela ajuda vlw mesmo eu fiz por Raycast e gostei do resultado mas quando eu for fazer inimigos q voam irei aplicar outros metodos,... eu ainda tenho q aprender a trabalhar com layers aqui a baixo vou deixar o codigo de detecção como ficou... eu gostei do resultado.
- Código:
public class Minion: MonoBehaviour
{
public float raio;
torreBlue script_torreBlue;
public Transform tr_do_raio;
Animator anima_minion;
public NavMeshAgent nav_Agent;
public float move_speed;
public float Olhar_alvo;
public bool atacarMinionBlue;
public bool atacarTorre;
public bool olharfrente;
}
void Start()
{
anima_minion = GetComponent<Animator>();
nav_Agent = GetComponent<NavMeshAgent>();
script_torreBlue = GameObject.FindObjectOfType<torreBlue>();
nav_Agent.speed = move_speed;
atacarMinionBlue = true;
atacarTorre = true;
}
void Update()
{
RaycastHit frente;
if (Physics.Raycast(tr_do_raio.position, Vector3.forward, out frente, raio))
{
olharfrente = true;
if (olharfrente)
{
if (frente.transform.tag == "minionBlue")
{
Debug.DrawLine(transform.position, frente.point);
if (atacarMinionBlue)
{
atacarTorre = false;
nav_Agent.destination = transform.position;
anima_minion.SetBool("perseguir", false);
anima_minion.SetBool("atacar", true);
var rotation = Quaternion.LookRotation(frente.transform.position - transform.position);
rotation.x = 0;
rotation.z = 0;
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Olhar_alvo);
}
}
else
{
olharfrente = false;
atacarTorre = true;
}
}
}
}
muito obrigado pelo código, notei que ele tem algo que resolve um problema que eu tenho atualmente que é com LookAt, que fica muito brusco.
hellside- Membro
- PONTOS : 1851
REPUTAÇÃO : 17
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] O inimigo flipa mas não vai para o outro lado
» [RESOLVIDO] Detecta o fim da animação e conjura um novo evento.
» [RESOLVIDO] Acessar Variáveis De outro Script
» [RESOLVIDO] ACESSAR SCRIPT DE OUTRO GAMEOBJECT
» [RESOLVIDO] Tem como Um Script rodar antes de Outro
» [RESOLVIDO] Detecta o fim da animação e conjura um novo evento.
» [RESOLVIDO] Acessar Variáveis De outro Script
» [RESOLVIDO] ACESSAR SCRIPT DE OUTRO GAMEOBJECT
» [RESOLVIDO] Tem como Um Script rodar antes de Outro
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos