EDUcontrole IA para NavMesh em teste
Página 1 de 1
EDUcontrole IA para NavMesh em teste
fala galera,estou desenvolvendo um sistema de IA usando nav mesh e estou testando ainda e gostaria de saber se vcs sabem como faz ou se tem algum tutorial ensinando a colocar açoes por ex na parte do sendo no inspector eu quero que tenha opçoes e que esssas opçoes fiquem desativadas ate que eu as ative,vamos supor no SENSO eu quero que toca um audio/animaçao/spawna algumacoisa/ etc mas quero que tudo seja pelo inspector inclusive as animaçoes esse e o script, se alguem quiser pegar ele pra usar em seu jogo fique a vontade e so fazer bake no terreno e add o script no seu bicho ou npc que o resto add automaticamente ai dpeois e so dar play no jogo que ele ja vai começar a andar pelo mapa.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//Aqui sao os requerimentos nessesarios//
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(AudioSource))]
public class EDU_controle : MonoBehaviour {
//public GameObject[] Ações;
//Variavel que controla a percepção caça e ataque da IA//
[Range(0,500)]
//[Header("AJUSTE DA VELOCIDADE DE MOVIMENTAÇÃO DA IA")]
[Tooltip("Altera a velocidade de movimento da IA")]
public float VelocidadeDeAndar = 1;
public bool ANDANDO = false;
//[Header("AJUSTE DE TEMPO ATE O PROXIMO DESTINO DA IA")]
[Tooltip("Aqui voce define o tempo ate o proximo checkpoint")]
public float PorximoDestinoEm = 8;
//[Header("CONTAGEM DO CRONOMETRO")]
[Tooltip("Contagem ate zerar o cronometro")]
public float relogio;
[Space(20)]
[Range(0,500)]
//[Header("AJUSTE DO SENSO DA IA")]
[Tooltip("Altera o campo de visão da IA")]
public float Senso = 20;
public bool OBSERVANDO = false;
[Space(20)]
[Range(0,500)]
//[Header("AJUSTE DA CAÇA DA IA")]
[Tooltip("Altera o campo de caça da IA")]
public float Caça = 10;
public bool CAÇANDO = false;
[Space(20)]
[Range(0,500)]
//[Header("AJUSTE VELOCIDADE DE CAÇA DA IA")]
[Tooltip("Altera a velocidade de caça da IA")]
public float VelocidadeDeCaça = 3;
[Space(20)]
[Range(0,500)]
//[Header("AJUSTE DA DISTANCIA QUE A IA VAI PARAR PRA TE ATACAR")]
[Tooltip("Altera a distancia que a IA vai parar em relação ao alvo")]
public float Ataque = 2;
public bool ATACANDO = false;
[Space(20)]
//Referencia ao animator//
private Animator anim;
//Referencia ao jogador//
Transform Jogador;
/// <Patrulha>
UnityEngine.AI.NavMeshAgent nav;
Vector3 position;
/// </Patrulha>/// <summary>
void Start () {
anim = GetComponent<Animator> ();
Jogador = GameObject.FindWithTag ("Player").transform;
nav = GetComponent <UnityEngine.AI.NavMeshAgent> ();
MudarParaUmaNovaPosiçao ();
}
void Update (){
//Aqui diz pra IA andar pelo mapa//
relogio += Time.deltaTime;
nav.speed = VelocidadeDeAndar;
nav.SetDestination(position);
anim.SetBool ("Andar", true);
ANDANDO = true;
Cronometro ();
//Aqui é a percepçao da IA//
float distSenso = Vector3.Distance (transform.position, Jogador.transform.position);
if (distSenso <= Senso) {
OBSERVANDO = true;
anim.SetBool ("Senso", true);
nav.speed = 0;
CAÇANDO = false;
ATACANDO = false;
ANDANDO = false;
transform.LookAt (Jogador);
anim.SetBool ("Ataque",false);
anim.SetBool ("Caça", false);
anim.SetBool ("Andar", false);
//Debug.Log ("Senso");
} else {
OBSERVANDO = false;
anim.SetBool ("Senso", false);
}
//Aqui é a percepçao de Caça da IA//
float distCaça = Vector3.Distance (transform.position, Jogador.transform.position);
if (distCaça <= Caça) {
CAÇANDO = true;
anim.SetBool ("Caça", true);
Seguir ();
OBSERVANDO = false;
ATACANDO = false;
ANDANDO = false;
transform.LookAt (Jogador);
anim.SetBool ("Ataque",false);
anim.SetBool ("Senso", false);
anim.SetBool ("Andar", false);
// Debug.Log ("Caça");
} else {
CAÇANDO = false;
anim.SetBool ("Caça", false);
}
//Aqui é a percepçao de ataque da IA//
float distAtaque = Vector3.Distance (transform.position, Jogador.transform.position);
if (distAtaque <= Ataque) {
ATACANDO = true;
anim.SetBool ("Ataque",true);
nav.stoppingDistance = Ataque;
nav.speed = 0;
CAÇANDO = false;
OBSERVANDO = false;
ANDANDO = false;
transform.LookAt(Jogador);
anim.SetBool ("Senso",false);
anim.SetBool ("Caça",false);
anim.SetBool ("Andar", false);
//Debug.Log ("Ataque");
} else {
ATACANDO = false;
anim.SetBool ("Ataque",false);
}
}
//Aqui é o cronometro,se ele for igual ao numero do proximoDestino o cronometro zera e seta uma nova posição pra IA//
void Cronometro(){
if (relogio >= PorximoDestinoEm)
{
relogio = 0;
MudarParaUmaNovaPosiçao();
}
}
//Aqui faz a IA andar aleatoriamente pelo mapa OBS a UnitSphere define o maximo de metros que o checkpoint ira aparecer para ela poder ir//
void MudarParaUmaNovaPosiçao() {
Vector3 randomPosition = Random.insideUnitSphere * 30;
randomPosition.y = 0;
randomPosition += transform.position;
UnityEngine.AI.NavMeshHit hit;
UnityEngine.AI.NavMesh.SamplePosition (randomPosition, out hit, 5, 1);
Vector3 finalPosition = hit.position;
position = finalPosition;
}
//Aqui é a void que faz a IA caçar o player
void Seguir (){
nav.destination = Jogador.transform.position;
nav.speed = VelocidadeDeCaça;
anim.SetBool ("Caça", true);
Vector3 OlharPlayer = Jogador.transform.position;
transform.LookAt (OlharPlayer);
anim.SetBool ("Senso", false);
anim.SetBool ("Andar", false);
}
}
Unidade3d5- Avançado
- PONTOS : 2984
REPUTAÇÃO : 28
Respeito as regras :
Tópicos semelhantes
» Teste de usuário para um jogo
» [Teste] Fisica para meu jogo [Cartoon]
» TESTE inimigo anda por um trajeto definido, para ao ser iluminado, e segue seu caminho
» Como mover um objeto para outro objeto (Navmesh ?)
» [Teste]Sistema de FPS.
» [Teste] Fisica para meu jogo [Cartoon]
» TESTE inimigo anda por um trajeto definido, para ao ser iluminado, e segue seu caminho
» Como mover um objeto para outro objeto (Navmesh ?)
» [Teste]Sistema de FPS.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos