[TUTORIAL] Inteligência artificial, inimigo e AIPoints
+31
SauloeArthur
francisco barroso
ninjagamergabriel
FuncaoFF
DGDark
NKKF
BrazaTattoo
ixgames
Callyde Jr
Unidade3d5
bsoll4
Diego Felix
GetulioGamerbr
arnaldojunior
AndyShow
alemaopessoa
artplayer
dinho
Guisao666
JohnnyKills
iahGod
gagasilva
cosmoplay
Orixinals
Chilinger
Jhonny_Ayllet
Lucas Garcia Frade
Rafael Pirani
Alan Porfirio
Dionilson
MarcosSchultz
35 participantes
Página 1 de 2
Página 1 de 2 • 1, 2
[TUTORIAL] Inteligência artificial, inimigo e AIPoints
Estive trabalhando neste script, e finalmente está pronto. trata-se de uma inteligência artificial simples, usando AIPoints
O inimigo se move randomicamente entre os AIPoints e se ve o player, começa a persegui-lo e s conseguir, ataca-lo também
se perder o player de vista, volta para a rotina de andar aleatoriamente pelos AIpoints.
Como usar? Primeiramente coloque a tag " Player " no seu player
agora jogue este script no seu inimigo ( o nome do script deve ser " AIPOINTS " ) ::
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(CharacterController))]
public class AIPOINTS : MonoBehaviour {
public Transform[] AIPoints; // PONTOS POR ONDE O INIMIGO PODE TRANSITAR
private List<Transform> ListaDeAiPoints = new List<Transform>(); // LISTA QUE IRA GUARDAR OS AIPoints DISPONIVEIS PARA O INIMIGO ANDAR NO MOMENTO
public float velocidadeDeMovimento = 5,DistanciaDeObservacao = 30,DistanciaDeSeguir = 20,DistanciaDeAtaque = 2; // VARIAVEIS A SEREM CONFIGURADAS
private float distanciaDoJogador,cronometroTempoNoLocal;
private int AIpoitAtual; // AIPoint ATUAL PARA ONDE O INIMIGO ESTA SE MOVENDDO
private GameObject Player;
private bool VendoOPlayer,EsperandoNoLocal,SeguindoOPlayer;
public float TempoNoLocal = 0.001f; // TEMPO QUE O INIMIGO AGUARDA NO AIPoint ATE COMEÇAR A IR PARA O PROXIMO
void Start (){
Player = GameObject.FindWithTag ("Player"); // PLAYER = OBJETO QUE CONTEM A TAG PLAYER
for (int x=0; x<AIPoints.Length; x++) { // AQUI EU FAÇO UM FOR EM TODOS OS OBJETOS DA VARIAVEL AIPoints
Vector3 de = transform.position; // A VARIAVEL " de " RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 para = AIPoints [x].transform.position; // A VARIAVEL " para " RECEBE A POSIÇAO DO AIpointAtual
if (!Physics.Linecast (de, para)) { // AQUI EU CHEGO SE O CAMINHO ENTRE O INIMIGO E O AIPOINT ESTA LIVRE, SE ESTIVER:
if(!ListaDeAiPoints.Contains( AIPoints [x] )){ // AQUI EU CHECO SE O ELEMENTO JA ESTA NA LISTA, SE NAO ESTA, FAZ ISSO ABAIXO:
ListaDeAiPoints.Add(AIPoints [x]); //ADICIONA O AIPoint[X] NA LISTA
}
}
else if (Physics.Linecast (de, para)) { // SEM TEM ALGUMA COISA ENTRE O AIPoint ATUAL E O INIMIGO
ListaDeAiPoints.Remove(AIPoints [x]) ; // REMOVE O ITEM AIPoint[X] ATUAL DA LISTA, PARA TORNA-LO INDISPONIVEL
}
}
}
void Update () {
//================================================RAYCAST ( INIMIGO ESTA VENDO O PLAYER? )=========================================================//
RaycastHit hit; // DECLARO UM RAYCAST
Vector3 deOnde = transform.position; //A VARIAVEL deOnde RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 paraOnde = Player.transform.position;//A VARIAVEL paraOnde RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 direction = paraOnde - deOnde; // O VETOR direction RECEBE A POSIÇAO CORRESPONDENTE A B-A, OU SEJA, O VETOR paraOnde - o vetor deOnde
if (Physics.Raycast (transform.position, direction, out hit, 1000) && distanciaDoJogador < DistanciaDeObservacao) { // SE RAYCAST, E SE A DISTANCIA DO PLAYER FOR MENOR DO QUE A MAXDISTANCIA
if (hit.collider.gameObject.CompareTag ("Player")) { // SE A TAG DO OBJETO QUE O RAYCAST COLIDIU FOR "PLAYER"
VendoOPlayer = true; // VARIAVEL VendoOPlayer FICA VERDADEIRA
} else { // SE NAO
VendoOPlayer = false;// VARIAVEL VendoOPlayer FICA FALSA
}
}
//===========================================LINECAST ( DEIXAR ACESSIVEL APENAS OS AIPOINTS VISIVEIS)=========================================//
if (EsperandoNoLocal == true) { // SE A VARIAVEL EsperandoNoLocal ESTIVER VERDADEIRA
for (int x=0; x<AIPoints.Length; x++) { // AQUI EU FAÇO UM FOR EM TODOS OS OBJETOS DA VARIAVEL AIPoints
Vector3 de = transform.position; // A VARIAVEL " de " RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 para = AIPoints [x].transform.position; // A VARIAVEL " para " RECEBE A POSIÇAO DO AIpointAtual
if (!Physics.Linecast (de, para)) { // AQUI EU CHEGO SE O CAMINHO ENTRE O INIMIGO E O AIPOINT ESTA LIVRE, SE ESTIVER:
Debug.DrawLine(de,para); // APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
if(!ListaDeAiPoints.Contains( AIPoints [x] )){ // AQUI EU CHECO SE O ELEMENTO JA ESTA NA LISTA, SE NAO ESTA, FAZ ISSO ABAIXO:
ListaDeAiPoints.Add(AIPoints [x]); //ADICIONA O AIPoint[X] NA LISTA
}
}
else if (Physics.Linecast (de, para)) { // SEM TEM ALGUMA COISA ENTRE O AIPoint ATUAL E O INIMIGO
Debug.DrawLine(de,para);// APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
ListaDeAiPoints.Remove(AIPoints [x]) ; // REMOVE O ITEM AIPoint[X] ATUAL DA LISTA, PARA TORNA-LO INDISPONIVEL
}
}
EsperandoNoLocal = false; // A VARIAVEL EsperandoNoLocal FICA FALSA
}
//==================================================== COMANDO PARA FAZER O INIMIGO ANDAR PELOS AIPOINTS======================================//
distanciaDoJogador = Vector3.Distance (Player.transform.position, transform.position); // MEDE A DISTANCIA ENTRE O INIMIGO E O PLAYER
if (distanciaDoJogador >= DistanciaDeObservacao || VendoOPlayer == false && EsperandoNoLocal == false) { // SE A DISTANCIA ENTRE INIMIGO E PLAYER FOR MENOR DO QUE A DISTANCIA DE OBSERVAÇAO E VAR'S....
if (AIpoitAtual < ListaDeAiPoints.Count) { // CHECAGEM PRA NAO DAR ERRO DE ARRAY
Vector3 target = ListaDeAiPoints [AIpoitAtual].transform.position;//A VARIAVEL target RECEBE A POSIÇAO DO AIpointAtual
transform.LookAt (target);//O INIMIGO OLHA NA DIREÇAO DO AIPOINT SELECIONADO ( O AIpointAtual )
transform.position = Vector3.MoveTowards (transform.position, target, velocidadeDeMovimento * Time.deltaTime); // MOVE O PALYER EM DIREÇAO AO AIpointAtual
if (transform.position == ListaDeAiPoints [AIpoitAtual].transform.position) { // SE A POSIÇAO DO PLAYER FOR IGUAL A POSIÇAO DO AIpointAtual, OU SEJA, CHEGOU NO DESTINO
cronometroTempoNoLocal+=Time.deltaTime; // COMEÇA A CONTAR O CRONOMETRO DE ESPERA NO LOCAL
EsperandoNoLocal = true; // A VARIAVEL EsperandoNoLocal FICA VERDADEIRA PARA INDICAR QUE ESTA ESPERANDO
}
if(cronometroTempoNoLocal >= TempoNoLocal){ // SE JA ESPEROU O TEMPO QUE DEVERIA ESPERAR NO LOCAL
cronometroTempoNoLocal = 0; // ZERA O CRONOMETRO PARA PODER REUTILIZAR ELE
int NumeroDeElementosDaLista2 = ListaDeAiPoints.Count; // UMA INT COM NOME NumeroDeElementosDaLista2 RECEBE O NUMERO DE ITENS QUE TEM NA LISTA
AIpoitAtual = Random.Range (0, NumeroDeElementosDaLista2); // A VARIAVEL AIpoitAtual RECEBE UM VALOR ALEATORIO ENTRE 0 E O O NUMERO DE ITENS QUE TEM NA LISTA
}
}
}
//================================================= COMANDOS PARA CHECAR DISTANCIA, OLHAR E SEGUIR================================================//
else if (distanciaDoJogador >= DistanciaDeSeguir && distanciaDoJogador < DistanciaDeObservacao && VendoOPlayer == true) { // SE ESTA PERTO PARA OLHAR MAS AINDA E LONGE PARA SEGUIR:
Olhar (); // VOID PARA O INIMIGO FICAR OLHANDO PARA O PLAYER
}else if (distanciaDoJogador <= DistanciaDeSeguir && VendoOPlayer == true) { //SE JA ESTA PERTO O SUFICIENTE PARA SEGUIR E ESTA VENDO O PLAYER
Seguir (); // VOID PARA O INIMIGO SEGUIR O PLAYER
}
//=======================================================CORRIGIR BUGS DE INDEX RANGE=============================================================//
if (AIpoitAtual >= ListaDeAiPoints.Count) { // SE O AIpoitAtual TIVER UM VALOR MAIOR DO QUE O MAXIMO DE ELEMENTOS QUE EXISTEM NA LISTA
AIpoitAtual = ListaDeAiPoints.Count -1; // A VARIAVEL AIpoitAtual RECEBE O NUMERO DE ELEMENTOS DA LISTA -1, ISSO EVITARA BUGS
}else if (AIpoitAtual <= 0) { //SE O AIpoitAtual TIVER UM VALOR MENOR DO QUE ZERO:
AIpoitAtual = 0;//AIpoitAtual RECEBERA O VALOR ZERO, ISSO EVITARA BUGS
}
//==========================================FAZER O PLAYER RECEBER DANO AO CHEGAR PERTO DO INIMIGO================================================//
if (distanciaDoJogador <= DistanciaDeAtaque) { // SE A DISTANCIA ENTRE O INIMIGO E O PLAYER FOR MENOR DO QUE A DISTANCIA DE ATAQUE
VidaPlayer.RecebendoDano = true; // A VARIAVEL RecebendoDano DO SCRIPT VidaPlayer FICA VERDADEIRA
} else if (distanciaDoJogador > DistanciaDeAtaque) { // SE A DISTANCIA ENTRE O INIMIGO E O PLAYER FOR MAIOR DO QUE A DISTANCIA DE ATAQUE
VidaPlayer.RecebendoDano = false; // A VARIAVEL RecebendoDano DO SCRIPT VidaPlayer FICA FALSA
}
//===============================================ESTAVA SEGUINDO MAS PAROU DE VER O PLAYER========================================================//
if (SeguindoOPlayer == true && VendoOPlayer == false) { // SE ESTA SEGUINDO O PLAYER MAS NAO ESTA VENDO ELE
for (int x=0; x<AIPoints.Length; x++) { // AQUI EU FAÇO UM FOR EM TODOS OS OBJETOS DA VARIAVEL AIPoints
Vector3 de = transform.position; // A VARIAVEL " de " RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 para = AIPoints [x].transform.position; // A VARIAVEL " para " RECEBE A POSIÇAO DO AIpointAtual
if (!Physics.Linecast (de, para)) { // AQUI EU CHEGO SE O CAMINHO ENTRE O INIMIGO E O AIPOINT ESTA LIVRE, SE ESTIVER:
Debug.DrawLine(de,para); // APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
if(!ListaDeAiPoints.Contains( AIPoints [x] )){ // AQUI EU CHECO SE O ELEMENTO JA ESTA NA LISTA, SE NAO ESTA, FAZ ISSO ABAIXO:
ListaDeAiPoints.Add(AIPoints [x]); //ADICIONA O AIPoint[X] NA LISTA
}
}
else if (Physics.Linecast (de, para)) { // SEM TEM ALGUMA COISA ENTRE O AIPoint ATUAL E O INIMIGO
Debug.DrawLine(de,para);// APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
ListaDeAiPoints.Remove(AIPoints [x]) ; // REMOVE O ITEM AIPoint[X] ATUAL DA LISTA, PARA TORNA-LO INDISPONIVEL
}
}
int NumeroDeElementosDaLista2 = ListaDeAiPoints.Count; // A VARIAVEL NumeroDeElementosDaLista2 RECEBE O NUMERO DE ELEMENTOS CONTIDOS NA LISTA
AIpoitAtual = Random.Range (0, NumeroDeElementosDaLista2); // A VARIAVEL AIpoitAtual RECEBE UM VALOR ALEATORIO ENTRE 0 E O O NUMERO DE ITENS QUE TEM NA LISTA
SeguindoOPlayer = false; // A VARIAVEL SeguindoOPlayer RECEBE FALSE
}
}
//================================================================= OUTRAS VOIDS=======================================================================//
void Olhar (){ // VOID QUE FAZ O INIMIGO OLHAR PARA O PLAYER
Vector3 OlharPlayer = Player.transform.position; // O VETOR OlharPlayer RECEBE A POSIÇAO DO PLAYER
transform.LookAt (OlharPlayer); // O INIMIGO PLHA EM DIREÇAO AO PLAYER
}
void Seguir (){
SeguindoOPlayer = true; // A VARIAVEL SeguindoOPlayer FICA VERDADEIRA
Vector3 SeguirPlayer = Player.transform.position; // O VETOR SeguirPlayer RECEBE A POSIÇAO DO PLAYER
transform.position = Vector3.MoveTowards (transform.position, SeguirPlayer, velocidadeDeMovimento * Time.deltaTime); // O INIMIGO SE MOVE EM DIREÇAO AO PLAYER
}
}
Depois disso, jogue este script no seu player( o nome do script deve ser " VidaPlayer " ) :
- Código:
using UnityEngine;
using System.Collections;
public class VidaPlayer : MonoBehaviour {
public static bool RecebendoDano; //VARIAVEL ESTATICA QUE INDICA SE ESTA RECEBENDO DANO OU NAO
public float tempoPorAtaque = 1.5f; // TEMPO MINIMO ENTRE CADA ATAQUE QUE O INIMIGO PODE DAR
private float cronometroDeAtaque; // CRONOMETRO QUE CONTROLA O TEMPO DOS ATAQUES
public int VidaDoPlayer = 100; // VIDA DO PERSONAGEM
public int DanoPorAtaque = 40;
void Start (){
RecebendoDano = false; // A VARIAVEL RecebendoDano RECEBE FALSO
}
void Update (){
if (RecebendoDano == true) { // SE RecebendoDano ESTA VERDADEIRO
cronometroDeAtaque += Time.deltaTime; // O CRONOMETRO COMEÇA A CONTAR
} else { // SE NAO, OU SEJA, SE RecebendoDano ESTA FALSO
cronometroDeAtaque = 0; // O CRONOMETRO RECEBE 0
}
if (cronometroDeAtaque >= tempoPorAtaque) { // SE O CRONOMETRO ULTRAPASSOU O TEMPO POR ATAQUE
cronometroDeAtaque = 0; // CRONOMETRO RECEBE 0
VidaDoPlayer = VidaDoPlayer - DanoPorAtaque; // A VIDA DO PLAYER RECEBE O VALOR DELA MESMA MENOS O DANO DO ATAQUE
}
if (VidaDoPlayer <= 0) { // SE A VIDA FOR MENOR OU IGUAL A 0
Application.Quit (); // SAI DO JOGO
}
}
}
Os dois scripts extão COMPLETAMENTE comentados para um melhor entendimento.
Agora basta configurar as variáveis dos dois scripts e jogar AIpoints( pontos por onde o inimigo irá se mover ) na variavel " AIPoints " do script do seu inimigo
Dúvidas postem ae
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:15 pm, editado 1 vez(es)
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Quando ele persegue o player ele ignora os aipoints e fica travado em objetos do cenário. Como fazer o inimigo evitar esses objetos, e perseguir o player através de um caminho específico pelos aipoints assim n travando em objetos ou "paredes"?
Dionilson- Iniciante
- PONTOS : 3632
REPUTAÇÃO : 2
Idade : 32
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Isto é possivel apenas com A*pathfinding, más é algo extremamente complexo... eu precisaria de 4 vídeoAulas para explicar como funciona...
Uma solução boa para isto é usar o NaveMesh da propria Unity
Uma solução boa para isto é usar o NaveMesh da propria Unity
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Você pode explicar ou mostrar como usar o NaveMesh da unity para essa situação?
Dionilson- Iniciante
- PONTOS : 3632
REPUTAÇÃO : 2
Idade : 32
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Mano Brigado cara, me ajudo pakas mano vlws mesmo.
Dionilson- Iniciante
- PONTOS : 3632
REPUTAÇÃO : 2
Idade : 32
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Marcos eu coloquei o script no inimigo mas não funcionou.
Era pra colocar objetos vazio no transform?Ou era pra fazer de outro jeito.
Era pra colocar objetos vazio no transform?Ou era pra fazer de outro jeito.
Alan Porfirio- Iniciante
- PONTOS : 3543
REPUTAÇÃO : 0
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
tem que seguir passo a passo como eu citei...
nenhuma variavel pode ficar vazia, você deve linkar os AIPoints e tudo mais, senão vai dar erro
nenhuma variavel pode ficar vazia, você deve linkar os AIPoints e tudo mais, senão vai dar erro
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Da dando erro de index!
Rafael Pirani- Iniciante
- PONTOS : 3498
REPUTAÇÃO : 0
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Ta dando erro de Index como pode ver, mas linkei tudo nas variaveis certas, o que esta errado?
Lucas Garcia Frade- Avançado
- PONTOS : 3779
REPUTAÇÃO : 9
Idade : 23
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Por favor, copie o código inteiro que você está utilizando e cole aqui para eu analiza-lo ?
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(CharacterController))]
public class AIPOINTS : MonoBehaviour {
public static bool Inimigo;
public Transform[] AIPoints; // PONTOS POR ONDE O INIMIGO PODE TRANSITAR
private List<Transform> ListaDeAiPoints = new List<Transform>(); // LISTA QUE IRA GUARDAR OS AIPoints DISPONIVEIS PARA O INIMIGO ANDAR NO MOMENTO
public float velocidadeDeMovimento = 5,DistanciaDeObservacao = 30,DistanciaDeSeguir = 20,DistanciaDeAtaque = 2; // VARIAVEIS A SEREM CONFIGURADAS
private float distanciaDoJogador,cronometroTempoNoLocal;
private int AIpoitAtual; // AIPoint ATUAL PARA ONDE O INIMIGO ESTA SE MOVENDDO
private GameObject Player;
private bool VendoOPlayer,EsperandoNoLocal,SeguindoOPlayer;
public float TempoNoLocal = 0.001f; // TEMPO QUE O INIMIGO AGUARDA NO AIPoint ATE COMEÇAR A IR PARA O PROXIMO
void Start (){
Inimigo = true;
Screen.lockCursor = true;
Player = GameObject.FindWithTag ("Player"); // PLAYER = OBJETO QUE CONTEM A TAG PLAYER
for (int x=0; x<AIPoints.Length; x++) { // AQUI EU FAÇO UM FOR EM TODOS OS OBJETOS DA VARIAVEL AIPoints
Vector3 de = transform.position; // A VARIAVEL " de " RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 para = AIPoints [x].transform.position; // A VARIAVEL " para " RECEBE A POSIÇAO DO AIpointAtual
if (!Physics.Linecast (de, para)) { // AQUI EU CHEGO SE O CAMINHO ENTRE O INIMIGO E O AIPOINT ESTA LIVRE, SE ESTIVER:
if(!ListaDeAiPoints.Contains( AIPoints [x] )){ // AQUI EU CHECO SE O ELEMENTO JA ESTA NA LISTA, SE NAO ESTA, FAZ ISSO ABAIXO:
ListaDeAiPoints.Add(AIPoints [x]); //ADICIONA O AIPoint[X] NA LISTA
}
}
else if (Physics.Linecast (de, para)) { // SEM TEM ALGUMA COISA ENTRE O AIPoint ATUAL E O INIMIGO
ListaDeAiPoints.Remove(AIPoints [x]) ; // REMOVE O ITEM AIPoint[X] ATUAL DA LISTA, PARA TORNA-LO INDISPONIVEL
}
}
}
void Update () {
if (Inimigo){
//================================================RAYCAST ( INIMIGO ESTA VENDO O PLAYER? )=========================================================//
RaycastHit hit; // DECLARO UM RAYCAST
Vector3 deOnde = transform.position; //A VARIAVEL deOnde RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 paraOnde = Player.transform.position;//A VARIAVEL paraOnde RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 direction = paraOnde - deOnde; // O VETOR direction RECEBE A POSIÇAO CORRESPONDENTE A B-A, OU SEJA, O VETOR paraOnde - o vetor deOnde
if (Physics.Raycast (transform.position, direction, out hit, 1000) && distanciaDoJogador < DistanciaDeObservacao) { // SE RAYCAST, E SE A DISTANCIA DO PLAYER FOR MENOR DO QUE A MAXDISTANCIA
if (hit.collider.gameObject.CompareTag ("Player")) { // SE A TAG DO OBJETO QUE O RAYCAST COLIDIU FOR "PLAYER"
VendoOPlayer = true; // VARIAVEL VendoOPlayer FICA VERDADEIRA
} else { // SE NAO
VendoOPlayer = false;// VARIAVEL VendoOPlayer FICA FALSA
}
}
//===========================================LINECAST ( DEIXAR ACESSIVEL APENAS OS AIPOINTS VISIVEIS)=========================================//
if (EsperandoNoLocal == true) { // SE A VARIAVEL EsperandoNoLocal ESTIVER VERDADEIRA
for (int x=0; x<AIPoints.Length; x++) { // AQUI EU FAÇO UM FOR EM TODOS OS OBJETOS DA VARIAVEL AIPoints
Vector3 de = transform.position; // A VARIAVEL " de " RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 para = AIPoints [x].transform.position; // A VARIAVEL " para " RECEBE A POSIÇAO DO AIpointAtual
if (!Physics.Linecast (de, para)) { // AQUI EU CHEGO SE O CAMINHO ENTRE O INIMIGO E O AIPOINT ESTA LIVRE, SE ESTIVER:
Debug.DrawLine(de,para); // APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
if(!ListaDeAiPoints.Contains( AIPoints [x] )){ // AQUI EU CHECO SE O ELEMENTO JA ESTA NA LISTA, SE NAO ESTA, FAZ ISSO ABAIXO:
ListaDeAiPoints.Add(AIPoints [x]); //ADICIONA O AIPoint[X] NA LISTA
}
}
else if (Physics.Linecast (de, para)) { // SEM TEM ALGUMA COISA ENTRE O AIPoint ATUAL E O INIMIGO
Debug.DrawLine(de,para);// APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
ListaDeAiPoints.Remove(AIPoints [x]) ; // REMOVE O ITEM AIPoint[X] ATUAL DA LISTA, PARA TORNA-LO INDISPONIVEL
}
}
EsperandoNoLocal = false; // A VARIAVEL EsperandoNoLocal FICA FALSA
}
//==================================================== COMANDO PARA FAZER O INIMIGO ANDAR PELOS AIPOINTS======================================//
distanciaDoJogador = Vector3.Distance (Player.transform.position, transform.position); // MEDE A DISTANCIA ENTRE O INIMIGO E O PLAYER
if (distanciaDoJogador >= DistanciaDeObservacao || VendoOPlayer == false && EsperandoNoLocal == false) { // SE A DISTANCIA ENTRE INIMIGO E PLAYER FOR MENOR DO QUE A DISTANCIA DE OBSERVAÇAO E VAR'S....
if (AIpoitAtual < ListaDeAiPoints.Count) { // CHECAGEM PRA NAO DAR ERRO DE ARRAY
Vector3 target = ListaDeAiPoints [AIpoitAtual].transform.position;//A VARIAVEL target RECEBE A POSIÇAO DO AIpointAtual
transform.LookAt (target);//O INIMIGO OLHA NA DIREÇAO DO AIPOINT SELECIONADO ( O AIpointAtual )
transform.position = Vector3.MoveTowards (transform.position, target, velocidadeDeMovimento * Time.deltaTime); // MOVE O PALYER EM DIREÇAO AO AIpointAtual
if (transform.position == ListaDeAiPoints [AIpoitAtual].transform.position) { // SE A POSIÇAO DO PLAYER FOR IGUAL A POSIÇAO DO AIpointAtual, OU SEJA, CHEGOU NO DESTINO
cronometroTempoNoLocal+=Time.deltaTime; // COMEÇA A CONTAR O CRONOMETRO DE ESPERA NO LOCAL
EsperandoNoLocal = true; // A VARIAVEL EsperandoNoLocal FICA VERDADEIRA PARA INDICAR QUE ESTA ESPERANDO
}
if(cronometroTempoNoLocal >= TempoNoLocal){ // SE JA ESPEROU O TEMPO QUE DEVERIA ESPERAR NO LOCAL
cronometroTempoNoLocal = 0; // ZERA O CRONOMETRO PARA PODER REUTILIZAR ELE
int NumeroDeElementosDaLista2 = ListaDeAiPoints.Count; // UMA INT COM NOME NumeroDeElementosDaLista2 RECEBE O NUMERO DE ITENS QUE TEM NA LISTA
AIpoitAtual = Random.Range (0, NumeroDeElementosDaLista2); // A VARIAVEL AIpoitAtual RECEBE UM VALOR ALEATORIO ENTRE 0 E O O NUMERO DE ITENS QUE TEM NA LISTA
}
}
}
//================================================= COMANDOS PARA CHECAR DISTANCIA, OLHAR E SEGUIR================================================//
else if (distanciaDoJogador >= DistanciaDeSeguir && distanciaDoJogador < DistanciaDeObservacao && VendoOPlayer == true) { // SE ESTA PERTO PARA OLHAR MAS AINDA E LONGE PARA SEGUIR:
Olhar (); // VOID PARA O INIMIGO FICAR OLHANDO PARA O PLAYER
}else if (distanciaDoJogador <= DistanciaDeSeguir && VendoOPlayer == true) { //SE JA ESTA PERTO O SUFICIENTE PARA SEGUIR E ESTA VENDO O PLAYER
Seguir (); // VOID PARA O INIMIGO SEGUIR O PLAYER
}
//=======================================================CORRIGIR BUGS DE INDEX RANGE=============================================================//
if (AIpoitAtual >= ListaDeAiPoints.Count) { // SE O AIpoitAtual TIVER UM VALOR MAIOR DO QUE O MAXIMO DE ELEMENTOS QUE EXISTEM NA LISTA
AIpoitAtual = ListaDeAiPoints.Count -1; // A VARIAVEL AIpoitAtual RECEBE O NUMERO DE ELEMENTOS DA LISTA -1, ISSO EVITARA BUGS
}else if (AIpoitAtual <= 0) { //SE O AIpoitAtual TIVER UM VALOR MENOR DO QUE ZERO:
AIpoitAtual = 0;//AIpoitAtual RECEBERA O VALOR ZERO, ISSO EVITARA BUGS
}
//==========================================FAZER O PLAYER RECEBER DANO AO CHEGAR PERTO DO INIMIGO================================================//
if (distanciaDoJogador <= DistanciaDeAtaque) { // SE A DISTANCIA ENTRE O INIMIGO E O PLAYER FOR MENOR DO QUE A DISTANCIA DE ATAQUE
PlayerVida.RecebendoDano = true; // A VARIAVEL RecebendoDano DO SCRIPT VidaPlayer FICA VERDADEIRA
} else if (distanciaDoJogador > DistanciaDeAtaque) { // SE A DISTANCIA ENTRE O INIMIGO E O PLAYER FOR MAIOR DO QUE A DISTANCIA DE ATAQUE
PlayerVida.RecebendoDano = false; // A VARIAVEL RecebendoDano DO SCRIPT VidaPlayer FICA FALSA
}
//===============================================ESTAVA SEGUINDO MAS PAROU DE VER O PLAYER========================================================//
if (SeguindoOPlayer == true && VendoOPlayer == false) { // SE ESTA SEGUINDO O PLAYER MAS NAO ESTA VENDO ELE
for (int x=0; x<AIPoints.Length; x++) { // AQUI EU FAÇO UM FOR EM TODOS OS OBJETOS DA VARIAVEL AIPoints
Vector3 de = transform.position; // A VARIAVEL " de " RECEBE A POSIÇAO ATUAL DO INIMIGO
Vector3 para = AIPoints [x].transform.position; // A VARIAVEL " para " RECEBE A POSIÇAO DO AIpointAtual
if (!Physics.Linecast (de, para)) { // AQUI EU CHEGO SE O CAMINHO ENTRE O INIMIGO E O AIPOINT ESTA LIVRE, SE ESTIVER:
Debug.DrawLine(de,para); // APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
if(!ListaDeAiPoints.Contains( AIPoints [x] )){ // AQUI EU CHECO SE O ELEMENTO JA ESTA NA LISTA, SE NAO ESTA, FAZ ISSO ABAIXO:
ListaDeAiPoints.Add(AIPoints [x]); //ADICIONA O AIPoint[X] NA LISTA
}
}
else if (Physics.Linecast (de, para)) { // SEM TEM ALGUMA COISA ENTRE O AIPoint ATUAL E O INIMIGO
Debug.DrawLine(de,para);// APENAS FAÇO UM DEBUG ( OPCIONAL ) PARA VER A TRAJETORIA DAS LINHAS
ListaDeAiPoints.Remove(AIPoints [x]) ; // REMOVE O ITEM AIPoint[X] ATUAL DA LISTA, PARA TORNA-LO INDISPONIVEL
}
}
int NumeroDeElementosDaLista2 = ListaDeAiPoints.Count; // A VARIAVEL NumeroDeElementosDaLista2 RECEBE O NUMERO DE ELEMENTOS CONTIDOS NA LISTA
AIpoitAtual = Random.Range (0, NumeroDeElementosDaLista2); // A VARIAVEL AIpoitAtual RECEBE UM VALOR ALEATORIO ENTRE 0 E O O NUMERO DE ITENS QUE TEM NA LISTA
SeguindoOPlayer = false; // A VARIAVEL SeguindoOPlayer RECEBE FALSE
}
}
}
//================================================================= OUTRAS VOIDS=======================================================================//
void Olhar (){ // VOID QUE FAZ O INIMIGO OLHAR PARA O PLAYER
Vector3 OlharPlayer = Player.transform.position; // O VETOR OlharPlayer RECEBE A POSIÇAO DO PLAYER
transform.LookAt (OlharPlayer); // O INIMIGO PLHA EM DIREÇAO AO PLAYER
}
void Seguir (){
SeguindoOPlayer = true; // A VARIAVEL SeguindoOPlayer FICA VERDADEIRA
Vector3 SeguirPlayer = Player.transform.position; // O VETOR SeguirPlayer RECEBE A POSIÇAO DO PLAYER
transform.position = Vector3.MoveTowards (transform.position, SeguirPlayer, velocidadeDeMovimento * Time.deltaTime); // O INIMIGO SE MOVE EM DIREÇAO AO PLAYER
}
}
Lucas Garcia Frade- Avançado
- PONTOS : 3779
REPUTAÇÃO : 9
Idade : 23
Respeito as regras :
Lucas Garcia Frade- Avançado
- PONTOS : 3779
REPUTAÇÃO : 9
Idade : 23
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Testei novamente com os 2 scripts originais do tutorial e funcionou perfeitamente. basta seguir passo a passo tudo que escrevi
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
eu tipo to fazendo um jogo onde o player é uma "nave" q atira e tudo mais.. queria fazer dos meus inimigos naves semelhantes q atirassem ao me ver e tudo mais.. esta AI vai funcionar para eles ? outra coisa como o cenário se passa no espaço, os obstáculos podem ser asteroides, e pontos de transição por onde ele viaja podem ser gameobjects vazios msm certo ?
Jhonny_Ayllet- Iniciante
- PONTOS : 3470
REPUTAÇÃO : 0
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Um jogo assim requer uma AI mais especifica, vai ser meio dificil adaptar essa no seu jogo
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Marcos se eu pegar waypoints e colocar varios na tela para carros ele andaram normalmente como trafego de rua
Chilinger- MembroAvançado
- PONTOS : 4091
REPUTAÇÃO : 42
Idade : 30
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Sim, más funcionará somente se as quadras tiverem predios ou coisas que barrem a visão da diagonal oposta e se so tiver 1 carro, pois se o linecast for em direção a um AIPoint e tiver um veiculo na frente ele vai eliminar o AIPoint...
esta AI é especificamente desenvolvida para inimigos... para carros precisaria de algo mais elaborado
esta AI é especificamente desenvolvida para inimigos... para carros precisaria de algo mais elaborado
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Poderia me ajudar com ela entao por que assim se eu colocar colisao em td vai dar certo por que eu queria fazer uma linha com wayponts indo e outra vindo com varios carros
Chilinger- MembroAvançado
- PONTOS : 4091
REPUTAÇÃO : 42
Idade : 30
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Como eu configuro , onde o inimigo vai andar , no caso quais pontos ele vai transitar , pois analisei o comando que você postou , mas não encontrei um lugar especifico que eu possa alterar valores, no caso os pontos de transição, no caso eu quero fazer com que o inimigo transite pelo meu mapa todo ,e caso eu esteja perto dele , ele saia de sua transição , para me seguir.
==EDITADO==
DESCULPE !
Estava procurando no script e achei onde colocar os waypoints , achava que onde era colocado os waypoints , era diretamente no código, mas na verdade é no script do inimigo (interface), sou iniciante e estou começando no unity a pouco tempo, vlw pessoal !.
==EDITADO==
DESCULPE !
Estava procurando no script e achei onde colocar os waypoints , achava que onde era colocado os waypoints , era diretamente no código, mas na verdade é no script do inimigo (interface), sou iniciante e estou começando no unity a pouco tempo, vlw pessoal !.
Orixinals- Iniciante
- PONTOS : 3377
REPUTAÇÃO : 2
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Marcos tenho um problema que so fui perceber agora,
tentei fazer do meu jeito mais tive um problema.
o inimigo so me persegue se eu olho para ele com um angulo um pouco aberto, quase que olhando para a cara dele,
se eu olho apenas para suas pernas ou para o chão ele não me persegue, ai voltei a usar o seu e o problema continua, os scripts estão idênticos ao seu. acho que pode ser outra coisa sem ser o script mais não tenho minima ideia
se puder me ajudar ...
tentei fazer do meu jeito mais tive um problema.
o inimigo so me persegue se eu olho para ele com um angulo um pouco aberto, quase que olhando para a cara dele,
se eu olho apenas para suas pernas ou para o chão ele não me persegue, ai voltei a usar o seu e o problema continua, os scripts estão idênticos ao seu. acho que pode ser outra coisa sem ser o script mais não tenho minima ideia
se puder me ajudar ...
cosmoplay- Avançado
- PONTOS : 3794
REPUTAÇÃO : 45
Idade : 26
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
cosmoplay escreveu:Marcos tenho um problema que so fui perceber agora,
tentei fazer do meu jeito mais tive um problema.
o inimigo so me persegue se eu olho para ele com um angulo um pouco aberto, quase que olhando para a cara dele,
se eu olho apenas para suas pernas ou para o chão ele não me persegue, ai voltei a usar o seu e o problema continua, os scripts estão idênticos ao seu. acho que pode ser outra coisa sem ser o script mais não tenho minima ideia
se puder me ajudar ...
Cara, não tem muito sentido estar acontecendo isto, pois nem tem função de OnBecameVisible ou Invisible...
O script está no seu player ou na sua camera?
cosmoplay- Avançado
- PONTOS : 3794
REPUTAÇÃO : 45
Idade : 26
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Crie um tópico específico para este problema, relatando especificamente o que ocorre, postando prints e os scripts que você utiliza...cosmoplay escreveu:no player
Não tem muito sentido estar acontecendo isto ai...
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
http://prntscr.com/9b1p6w <----- Link do erro, coloquei tudo certo, e espalhei 30 aipoints e os coloquei no script do nimigo e AIPOINTS e da esse erro
gagasilva- Iniciante
- PONTOS : 3279
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
gagasilva escreveu:http://prntscr.com/9b1p6w <----- Link do erro, coloquei tudo certo, e espalhei 30 aipoints e os coloquei no script do nimigo e AIPOINTS e da esse erro
Preciso de prints do seu Player, do inimigo, das configs do script no inimigo
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Oi, funcionou quase tudo aqui, mas meu inimigo ele não fica andando para os UiPoints, ele fica parado no lugar que eu coloquei... Em vermelhos são os pontos e amarelo o inimigo, que é um esfera. Não fiz nenhuma alterações nos scripts em coloquei todos os transforms dos pontos no script, sabe o que pode ser?
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
iagokennedyy escreveu:Oi, funcionou quase tudo aqui, mas meu inimigo ele não fica andando para os UiPoints, ele fica parado no lugar que eu coloquei... Em vermelhos são os pontos e amarelo o inimigo, que é um esfera. Não fiz nenhuma alterações nos scripts em coloquei todos os transforms dos pontos no script, sabe o que pode ser?
O player tem tag "Player" ???
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Sim, tem... eu paguei tudo e refiz, funcionou, alguma coisa devo ter esquecido :p
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Vejo esse script, "simples", então realmente tenho a certeza que eu gosto é de trabalhar com gráficos kkkkkk Marcos, a quanto tempo você trabalha com programação? Você manja de muita coisa kkk
JohnnyKills- Membro
- PONTOS : 3381
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
JohnnyKills escreveu:Vejo esse script, "simples", então realmente tenho a certeza que eu gosto é de trabalhar com gráficos kkkkkk Marcos, a quanto tempo você trabalha com programação? Você manja de muita coisa kkk
Acho que vai completar uns 3 anos logo logo
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Muito obrigado cara.
Guisao666- Iniciante
- PONTOS : 3240
REPUTAÇÃO : 0
Áreas de atuação : Iniciante em programação da linguagem C#.
Iniciante em Level Designer.
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Olá Galera adaptei um Script ( java para C#) de uma IA para meu jogo de luta, que é dentro de um ringue , e não seria necessário AIPonints , mas esta dando "Erro" gostaria de ajuda para esse meu problema ou uma idéia melhor para melhorar a jogabilidade. Talvez o Script do Marcos sem Aipoints, não sei como adaptar.
Esse é o meu Script:
Assets/Scripts/InimigoSegue.cs(46,37): error CS1612: Cannot modify a value type return value of `UnityEngine.Quaternion.eulerAngles'. Consider storing the value in a temporary variable
e esse:
Assets/Scripts/InimigoSegue.cs(46,28): error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.rotation'. Consider storing the value in a temporary variable
Não estou conseguindo solucionar.
Esse é o meu Script:
- Código:
using UnityEngine;
using System.Collections;
public class InimigoSegue : MonoBehaviour {
private int animI;//numeros de comportamentos
public GameObject Player ; // Player
private Vector3 DistV; //Distancia em x,y e z
public Quaternion rotQ;
public float rmaxF;
public float rmedF;
public float rminF;
public bool atacB;
private Animator Animator_Oponente;
// Use this for initialization
void Start () {
animI = 1;
rmaxF =10;
rmedF =5;
rminF =3;
atacB = false;
Animator_Oponente = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
if(animI==1){Animator_Oponente.Play("Idlle");}
if(animI==2){Animator_Oponente.GetBool("Running");transform.Translate(0,0,3*Time.deltaTime);}
if(animI==3){Animator_Oponente.SetTrigger("TriggerKick");}
if(animI==4){Animator_Oponente.SetTrigger("TriggerCross");}
//Variaveis
DistV = transform.position - Player.transform.position; //distancia
rotQ = Quaternion.LookRotation (DistV); // local de rotação
//Função
if (atacB==true)
{transform.rotation.eulerAngles.y = rotQ.eulerAngles.y +180 ;}
if(DistV.x<= rminF && DistV.x >= rminF && DistV.z >= -rminF && DistV.z <= rminF)
{animI=2;} else
if(DistV.x<= rmedF && DistV.x >= -rmedF && DistV.z <= rmedF && DistV.z >= -rmedF)
{animI=3; atacB = true;}else
if (atacB == true) {
if(DistV.x<= rmaxF && DistV.x >= -rmaxF && DistV.z <= rmaxF && DistV.z >= -rmaxF)
{animI = 2 ;}
else
{ animI=1 ; atacB = false;}
}
}
}
Assets/Scripts/InimigoSegue.cs(46,37): error CS1612: Cannot modify a value type return value of `UnityEngine.Quaternion.eulerAngles'. Consider storing the value in a temporary variable
e esse:
Assets/Scripts/InimigoSegue.cs(46,28): error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.rotation'. Consider storing the value in a temporary variable
Não estou conseguindo solucionar.
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Você vai ter que criar um novo vector3 pra passar o valor.
Tipo ...
Tipo ...
- Código:
transform.rotation.eulerAngles = new Vector3 (ValorX, ValorY, ValorZ);
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Cara não deu certo... Será q tem algum erro nesse Script que eu não estou enxergando.
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Cria um tópico e posta o seu script, que podemos ver.
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
MarcosSchultz escreveu:Tem que anexar os AIPoints na array deles
como posso fazer isso? sou iniciante e não sei como fazer isso. alguém poderia me ajudar?
alemaopessoa- Iniciante
- PONTOS : 3029
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
alemaopessoa escreveu:MarcosSchultz escreveu:Tem que anexar os AIPoints na array deles
como posso fazer isso? sou iniciante e não sei como fazer isso. alguém poderia me ajudar?
Assistiu o Video Tutorial ?
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
kara, eu ja coloquei a nav mesh agent no meu inimigo. primeiro eu copiei e colei o script "AIPOINTS" no inimigo, depois copiei e colei o script "VIDA PLAYER" no player, e agora por ultimo eu coloquei a nav mesh agent no inimigo e ainda ta dando erro de index. oque há de eraado? sou iniciante. ainda to apredendo. alguem poderia me explicar oque fazer detalhadamente?
alemaopessoa- Iniciante
- PONTOS : 3029
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Faz o "Bake" do Terreno ou Plano no Windows/Navigation ?
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
eu fiz o "bake" e ainda ta com o erro de index.
alemaopessoa- Iniciante
- PONTOS : 3029
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
eu preciso criar os "waypoints"? se sim, como faço pra criar?
alemaopessoa- Iniciante
- PONTOS : 3029
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Sim, vc Cria GameObjects Vazios ou Esferas,Cubos (Sem Colisao) etc... oque vc quiser e quantos quiser,Coloca no Lugar que vc quiser que o AI vá,e Linka no Script na Variável AIPoints
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
AndyShow escreveu:Sim, vc Cria GameObjects Vazios ou Esferas,Cubos (Sem Colisao) etc... oque vc quiser e quantos quiser,Coloca no Lugar que vc quiser que o AI vá,e Linka no Script na Variável AIPoints
então mano, ja criei varios gameobjects vazios. o meu problema agora é saber como linkar. nao sei onde eu posso fazer isso no script.
alemaopessoa- Iniciante
- PONTOS : 3029
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
alemaopessoa escreveu:AndyShow escreveu:Sim, vc Cria GameObjects Vazios ou Esferas,Cubos (Sem Colisao) etc... oque vc quiser e quantos quiser,Coloca no Lugar que vc quiser que o AI vá,e Linka no Script na Variável AIPoints
então mano, ja criei varios gameobjects vazios. o meu problema agora é saber como linkar. nao sei onde eu posso fazer isso no script.
Quando você joga o script no objeto, uma array é criada na aba Inspector. basta digitar o número de componentes da array e dar um enter... vários slots vão se abrir, para você linkar os objetos.
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Olá, sou novo aqui no fórum, mas adorei os tópicos e estou aprendendo muito com eles, mas estou encontrando dificuldade para fazer este script funcionar. O erro que esta apresentando é este:
NullReferenceException: Object reference not set to an instance of an object
AIPOINTS.Update () (at Assets/AIPOINTS.cs:40)
Se puderem me ajudar serei muito grato.
PS: É um jogo de labirinto onde o guardião deve perambular pelo labirinto e só perseguir o player quando o vir. Configurei o navmesh com os aipoints como statics e tudo que acontece é que o guardião apenas persegue o player, graças a meu outro script.
NullReferenceException: Object reference not set to an instance of an object
AIPOINTS.Update () (at Assets/AIPOINTS.cs:40)
Se puderem me ajudar serei muito grato.
PS: É um jogo de labirinto onde o guardião deve perambular pelo labirinto e só perseguir o player quando o vir. Configurei o navmesh com os aipoints como statics e tudo que acontece é que o guardião apenas persegue o player, graças a meu outro script.
arnaldojunior- Membro
- PONTOS : 3051
REPUTAÇÃO : 2
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
A Linha do Erro é essa: if (hit.collider.gameObject.CompareTag ("Player")) { // SE A TAG DO OBJETO QUE O RAYCAST COLIDIU FOR "PLAYER"
Veja se seu player esta coma TAG "Player"
Veja se seu player esta coma TAG "Player"
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Obrigado pela ajuda, agora descobri como funciona esse sistema de tag, mas estou com um novo problema: Meu guardião fica se movendo do primeiro aipoint para o segundo, o terceiro esta visível para ele, mas por algum motivo ele o ignora.
Não sei se ele não esta incrementando no "for" ou se ele não visualiza o aipoint(3).
Não sei se ele não esta incrementando no "for" ou se ele não visualiza o aipoint(3).
arnaldojunior- Membro
- PONTOS : 3051
REPUTAÇÃO : 2
Respeito as regras :
Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints
Percebi que o guardião só se encaminha pro "gameobject" para o qual "esta virado", ou seja preciso de um comando que o direcione para o próximo "aipoint". Se puderem me ajudar com isto sei muito grato.
arnaldojunior- Membro
- PONTOS : 3051
REPUTAÇÃO : 2
Respeito as regras :
Página 1 de 2 • 1, 2
Tópicos semelhantes
» [TUTORIAL] Inteligência Artificial
» Tutorial Inteligencia Artificial 2D[GODOT]
» [TUTORIAL] Dano baseado na distância do inimigo
» [TUTORIAL] IA inimigo (patrulha)
» [TUTORIAL] Inimigo seguir e atacar Player ao encostar
» Tutorial Inteligencia Artificial 2D[GODOT]
» [TUTORIAL] Dano baseado na distância do inimigo
» [TUTORIAL] IA inimigo (patrulha)
» [TUTORIAL] Inimigo seguir e atacar Player ao encostar
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos