Alguem sabe como resolver esse problema? AI nao procurar ela mesma
4 participantes
Página 1 de 1
Alguem sabe como resolver esse problema? AI nao procurar ela mesma
Olha galera blz? int hj venho aqui pedir ajuda de vcs pq estou com um problema e nao estou conseguindo resolver, eu tenho um script de AI ela interagi com o player de boa so que estou tentando fazer ela interagir com outras AI tbm, vou dar um exemplo do meu script aqui
bem como vcs podem ver ela procura os alvos que estao usando o script Easy_ID so que quando eu coloco o script nela para outra AI identificar ela...ela fica procurando ela mesma pelo fato do script esta nela, alguem sabe jeito de bloquear isso? eu ate q tenho uma ideia mas nao sei executar-la por ex se o primeiro alvos que eu achar for 0 esse vai ser eu, int eu nao posso me caçar nem me atacar....
vlws
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Marcos : MonoBehaviour
{
//Referencia ao NavMeshAgent//
UnityEngine.AI.NavMeshAgent nav;
Vector3 position;
public float DistSeguir;
public float DistParar;
public Easy_ID [] Alvos;
public int indiceAlvoMaisProximo = 0;
private void Start()
{
if (GetComponent<UnityEngine.AI.NavMeshAgent>())
{
nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
}
}
void Update()
{
Alvos = GameObject.FindObjectsOfType<Easy_ID>();
ChecarAlvos();
}
void ChecarAlvos()
{
float distanciaMaxDeVisao = DistSeguir;
for (int x = 0; x < Alvos.Length; x++)
{
float DistanciaDeVisaoAtual = Vector3.Distance(transform.position, Alvos[x].transform.position);
if (DistanciaDeVisaoAtual < distanciaMaxDeVisao)
{
distanciaMaxDeVisao = DistanciaDeVisaoAtual;
indiceAlvoMaisProximo = x;
nav.speed = 2;
nav.destination = Alvos[x].transform.position;
}
}
float distanciaMaxDeCaça = DistParar;
for (int x = 0; x < Alvos.Length; x++)
{
float DistanciaDeCaçaAtual = Vector3.Distance(transform.position, Alvos[x].transform.position);
if (DistanciaDeCaçaAtual < distanciaMaxDeCaça)
{
distanciaMaxDeCaça = DistanciaDeCaçaAtual;
indiceAlvoMaisProximo = x;
nav.speed = 0;
}
}
}
}
[CustomEditor(typeof(Marcos))]
[CanEditMultipleObjects]
public class MarcosEditor : Editor
{
void OnSceneGUI()
{
//Aqui Cria os circulos de percepção em volta da criatura
Marcos visao = (Marcos)target;
Handles.color = Color.green;
Handles.DrawWireArc(visao.transform.position, Vector3.up, Vector3.forward, 360, visao.DistSeguir);
Marcos parar = (Marcos)target;
Handles.color = Color.blue;
Handles.DrawWireArc(parar.transform.position, Vector3.up, Vector3.forward, 360, parar.DistParar);
}
}
bem como vcs podem ver ela procura os alvos que estao usando o script Easy_ID so que quando eu coloco o script nela para outra AI identificar ela...ela fica procurando ela mesma pelo fato do script esta nela, alguem sabe jeito de bloquear isso? eu ate q tenho uma ideia mas nao sei executar-la por ex se o primeiro alvos que eu achar for 0 esse vai ser eu, int eu nao posso me caçar nem me atacar....
vlws
Unidade3d5- Avançado
- PONTOS : 2843
REPUTAÇÃO : 28
Respeito as regras :
Re: Alguem sabe como resolver esse problema? AI nao procurar ela mesma
você pode adicionar todos os "alvos" em uma "list"
depois, você faz um "remove" dessa lista do elemento que contém o próprio componente.
É simples até. Se puder postar esse código "Easy_ID" fica mais fácil pra ajudar :D
depois, você faz um "remove" dessa lista do elemento que contém o próprio componente.
É simples até. Se puder postar esse código "Easy_ID" fica mais fácil pra ajudar :D
Re: Alguem sabe como resolver esse problema? AI nao procurar ela mesma
MarcosSchultz escreveu:você pode adicionar todos os "alvos" em uma "list"
depois, você faz um "remove" dessa lista do elemento que contém o próprio componente.
É simples até. Se puder postar esse código "Easy_ID" fica mais fácil pra ajudar :D
boa noite marcos, eu ate tentei fazer um jeito mas acho q nao vai dar certo, tipo se eu for o predador um eu fujo do prdador 2 e 3 se eu for o 2 eu fujo do 3 e ataco o 1,tipo hierarquias.... mas ta ai o script
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Easy_ID : MonoBehaviour {
[Header(" Eu sou")]
[Space(10)]
public bool Jogador;
[Space(30)]
public bool Predador1;
[Space(10)]
public bool Predador2;
[Space(10)]
public bool Predador3;
[Space(10)]
[Space(10)]
public bool Covarde;
[Space(10)]
public bool Caçar;
[Space(10)]
public bool Parar;
[Space(10)]
public bool Atacar;
[Space(10)]
public bool Fufir;
[Space(10)]
public bool DanoPorProximidade;
}
Unidade3d5- Avançado
- PONTOS : 2843
REPUTAÇÃO : 28
Respeito as regras :
Re: Alguem sabe como resolver esse problema? AI nao procurar ela mesma
É só você fazer essa checagem:
- Código:
if (Alvos[i] != this.gameObject){//Comandos
}
Re: Alguem sabe como resolver esse problema? AI nao procurar ela mesma
MayLeone escreveu:É só você fazer essa checagem:
- Código:
if (Alvos[i] != this.gameObject){//Comandos
}
Assim nao deu certo man ;/ e que tipo minha IA procurar os alvos que contem o scrip "Easy_ID".... e se ei por nela mesmo para que outras AI identifique-a ela fica atacando ela mesma, nao consigo pensar em algo para resolver isso
Unidade3d5- Avançado
- PONTOS : 2843
REPUTAÇÃO : 28
Respeito as regras :
Re: Alguem sabe como resolver esse problema? AI nao procurar ela mesma
MarcosSchultz escreveu:você pode adicionar todos os "alvos" em uma "list"
depois, você faz um "remove" dessa lista do elemento que contém o próprio componente.
É simples até. Se puder postar esse código "Easy_ID" fica mais fácil pra ajudar :D
e como faria isso? kk
Unidade3d5- Avançado
- PONTOS : 2843
REPUTAÇÃO : 28
Respeito as regras :
Re: Alguem sabe como resolver esse problema? AI nao procurar ela mesma
faça o seguinte:
[list=linenums]
[*]using System.Collections;
[*]using System.Collections.Generic;
[*]using UnityEngine;
[*]using UnityEditor;
[*]public class Marcos : MonoBehaviour
[*]{
[*] //Referencia ao NavMeshAgent//
[*] UnityEngine.AI.NavMeshAgent nav;
[*] Vector3 position;
[*] public float DistSeguir;
[*] public float DistParar;
[*]
[*] public Easy_ID [] Alvos;
[*] public int indiceAlvoMaisProximo = 0;
[*] private void Start()
[*] {
[*]
[*]
[*] if (GetComponent<UnityEngine.AI.NavMeshAgent>())
[*] {
[*] nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
[*] }
[*] }
[*] void Update()
[*] {
[*]
[*] Alvos = GameObject.FindObjectsOfType<Easy_ID>();
[*] ChecarAlvos();
[*]
[*] }
[*] void ChecarAlvos()
[*] {
[*] float distanciaMaxDeVisao = DistSeguir;
[*] for (int x = 0; x < Alvos.Length; x++)
[*] { if(Alvos(x).gameObject != gameObject){// vc verifica se obj que vc achou é diferente do próprio Obj
[/list]
[list=linenums]
[*] float DistanciaDeVisaoAtual = Vector3.Distance(transform.position, Alvos[x].transform.position);
[*] if (DistanciaDeVisaoAtual < distanciaMaxDeVisao)
[*] {
[*] distanciaMaxDeVisao = DistanciaDeVisaoAtual;
[*] indiceAlvoMaisProximo = x;
[*] nav.speed = 2;
[*] nav.destination = Alvos[x].transform.position;
[*] }
[*] }}
[*] float distanciaMaxDeCaça = DistParar;
[*] for (int x = 0; x < Alvos.Length; x++)
[*] {
[*] float DistanciaDeCaçaAtual = Vector3.Distance(transform.position, Alvos[x].transform.position);
[*] if (DistanciaDeCaçaAtual < distanciaMaxDeCaça)
[*] {
[*] distanciaMaxDeCaça = DistanciaDeCaçaAtual;
[*] indiceAlvoMaisProximo = x;
[*] nav.speed = 0;
[*] }
[*] }
[*] }
[*]}
[*][CustomEditor(typeof(Marcos))]
[*][CanEditMultipleObjects]
[*]public class MarcosEditor : Editor
[*]{
[*] void OnSceneGUI()
[*] {
[*] //Aqui Cria os circulos de percepção em volta da criatura
[*] Marcos visao = (Marcos)target;
[*] Handles.color = Color.green;
[*] Handles.DrawWireArc(visao.transform.position, Vector3.up, Vector3.forward, 360, visao.DistSeguir);
[*] Marcos parar = (Marcos)target;
[*] Handles.color = Color.blue;
[*] Handles.DrawWireArc(parar.transform.position, Vector3.up, Vector3.forward, 360, parar.DistParar);
[*] }
[*]}
[/list]
[list=linenums]
[*]using System.Collections;
[*]using System.Collections.Generic;
[*]using UnityEngine;
[*]using UnityEditor;
[*]public class Marcos : MonoBehaviour
[*]{
[*] //Referencia ao NavMeshAgent//
[*] UnityEngine.AI.NavMeshAgent nav;
[*] Vector3 position;
[*] public float DistSeguir;
[*] public float DistParar;
[*]
[*] public Easy_ID [] Alvos;
[*] public int indiceAlvoMaisProximo = 0;
[*] private void Start()
[*] {
[*]
[*]
[*] if (GetComponent<UnityEngine.AI.NavMeshAgent>())
[*] {
[*] nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
[*] }
[*] }
[*] void Update()
[*] {
[*]
[*] Alvos = GameObject.FindObjectsOfType<Easy_ID>();
[*] ChecarAlvos();
[*]
[*] }
[*] void ChecarAlvos()
[*] {
[*] float distanciaMaxDeVisao = DistSeguir;
[*] for (int x = 0; x < Alvos.Length; x++)
[*] { if(Alvos(x).gameObject != gameObject){// vc verifica se obj que vc achou é diferente do próprio Obj
[/list]
[list=linenums]
[*] float DistanciaDeVisaoAtual = Vector3.Distance(transform.position, Alvos[x].transform.position);
[*] if (DistanciaDeVisaoAtual < distanciaMaxDeVisao)
[*] {
[*] distanciaMaxDeVisao = DistanciaDeVisaoAtual;
[*] indiceAlvoMaisProximo = x;
[*] nav.speed = 2;
[*] nav.destination = Alvos[x].transform.position;
[*] }
[*] }}
[*] float distanciaMaxDeCaça = DistParar;
[*] for (int x = 0; x < Alvos.Length; x++)
[*] {
[*] float DistanciaDeCaçaAtual = Vector3.Distance(transform.position, Alvos[x].transform.position);
[*] if (DistanciaDeCaçaAtual < distanciaMaxDeCaça)
[*] {
[*] distanciaMaxDeCaça = DistanciaDeCaçaAtual;
[*] indiceAlvoMaisProximo = x;
[*] nav.speed = 0;
[*] }
[*] }
[*] }
[*]}
[*][CustomEditor(typeof(Marcos))]
[*][CanEditMultipleObjects]
[*]public class MarcosEditor : Editor
[*]{
[*] void OnSceneGUI()
[*] {
[*] //Aqui Cria os circulos de percepção em volta da criatura
[*] Marcos visao = (Marcos)target;
[*] Handles.color = Color.green;
[*] Handles.DrawWireArc(visao.transform.position, Vector3.up, Vector3.forward, 360, visao.DistSeguir);
[*] Marcos parar = (Marcos)target;
[*] Handles.color = Color.blue;
[*] Handles.DrawWireArc(parar.transform.position, Vector3.up, Vector3.forward, 360, parar.DistParar);
[*] }
[*]}
[/list]
Tópicos semelhantes
» alguem sabe como resolver esse problema (oclussion culing)
» ALGUEM SABE RESOLVER ESSE ERRO?
» Alguem sabe resolver esse erro Gradle build failed?
» ALGUÉM SABER COMO RESOLVER ESSE BUG???
» Alguém sabe como conseguir esse mesmo resultado?
» ALGUEM SABE RESOLVER ESSE ERRO?
» Alguem sabe resolver esse erro Gradle build failed?
» ALGUÉM SABER COMO RESOLVER ESSE BUG???
» Alguém sabe como conseguir esse mesmo resultado?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos