SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Não consigo o Android SDK!!
[RESOLVIDO] Como faço para depois de determinado tempo acontecer algo?
Calcular hora ?
CRASH AO ENTRAR NA CENA UNITY
estou procurando um bom tutorial de IA Basica
Erro ao colocar script no botão
Novo jogo em desenvolvimento, 13º andar
Text Dinâmico no botão
Sistema Pdv, Mercado, Padaria, Conveniência, Lojas Em Geral - C# VISUAL STUDIO
[TUTORIAL] - Script de lanterna pra seu jogo de terror e outros...
[RESOLVIDO] Unity - Reproduzir Videos Do Blender No Unity
Ordem de fases
[RESOLVIDO] Tenho algum erro de simbolo no script do carro o que poderia ser?
Como mudar o CONTROLLER do ANIMATOR
[TUTORIAL] Banco de dados || MySQL
[RESOLVIDO] Dúvida. Detectar colisões nas instâncias
erro na minha IA
[TUTORIAL] While, como funciona?
Como criar um poligono dinamicamente?
Discord para desenvolvimento de jogos
Mostrar a contagem em 10K e 100M
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
Cores nos materiais sem criar material
Poderia modelar um personagem cartoon para meu projeto
Como coloco modo de criação de personagem?
[Ajuda] Assets
RayCasting + Disparo Um Bom Tipo De Video Aula.
Ajuda de Blender para Unity
Procuro Equipe Para Criação de Jogo [PAGO]
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
[RESOLVIDO] erro WaterBaseEditor.cs não encontra o caminho do WaterBase
[TUTORIAL] Criar Analógico Virtual UI Para Mobile.
[TUTORIAL] Acessar nomes de arquivos diretamente da pasta
Objeto dentro do player nao ta rotacioando
[TUTORIAL] MENU PRINCIPAL - UNITY 5 (5.3 ou superior) (Com UI)
Array de prefabs
screenshot
instancia item aleatorio em varias posicoes
[TUTORIAL] Mira que fica se movendo (ocilando,tremendo,etc)
Getcomponent de C# para java
Curso barato de C#
Unity - Modelo 3D em Menu 2D
Unity + MySQL
[RESOLVIDO] Camera Estilo Showroom
A um mês com unity bugado sem resposta
[GameJam] Competição organizada pela BitCodeStudios
Drop Shadows
Pegar strings de "duas em duas"
criar um piano no unity
Movimentação
Instanciar objeto onde cricar com mouse ou touch
Dúvida Sistema de Energia para jogo android
[RESOLVIDO] Inimigo patrulhando constantemente estilo mario
BUG UNITY 3D ROSA A SCENE E GAME
Dúvida. Colliders no Unity3D
Pq a grama do Unity é tao pesada?
Alguem cria uma conta na playstore pra mim? :(
Capture Panorama?
Artistas 3D e Programadores Unity3D (Remunerado)
Input Get Key
SCHULTZ Jogo de terror
(Erro) IndexOutOfRangeException:Array index is out of range
EU QUERIA COLOCAR ANUNCIOS NO MEU JOGO NA MUDANÇA DE CENAS MAS NÃO ACHO UM JEITO
Unity - Duvida Sobre a JDK Que Vocês Usam
[RESOLVIDO] Adicionar Botoes em controle mobile
admob recompensa
Unity - Duvida Sobre Atualizar
Unity Admob GDPR (como implementar ?)
Timer para mudar de câmera
The Pyramid Demo Atualizado
[____ENQUETE____] Eleições para presidente 2018 (2º turno)
Mudando cor do texto...
como dminuir o lag no meu unity 5
[JOGO MOBILE] Defeat the Illuminatis
Como chamar animação sem passar por outro parâmetros?
[TUTORIAL] Unity 5 - Botão contínuo usando UI (Manter pressionado)
unity - erro ao buildar
Meus ints não aparecem no Inspector, serializable não funciona
Modelagem
[RESOLVIDO] Tutoriais
[RESOLVIDO] Não está instanciando
[RESOLVIDO] muta som em todas as cenas
Palavra chave New no C#
[PROJETO CONCLUÍDO] Defeat the Illuminatis
[RESOLVIDO] Dificuldade no adição do Android SDK a Unity e erro no Android Studio
world machine + unity
[Em Desenvolvimento] Battles of Worlds
Unity + Photon 2
[RESOLVIDO] Como usar o touchpad da unity para orbital o personagem em terceira pessoas ?
(Dúvida) Encontrar o objeto mais próximo partindo do ponto inicial ao final.
Duvida com gráficos
[TUTORIAL] Objeto flutuar como se estivesse no espaço ou na água
[TUTORIAL] Third Person Shooter
[TUTORIAL] Como spawnar inimigos [Tutorial simples]
Raycast - Spawnar objeto na colisão do raycast
iniciar jogo com uma cena desativada e ativá-la ao colidir com bloco desativando as outras
{Possível Projeto para Unity} Buscando membros para formar uma Equipe...
[RESOLVIDO] Sistema de Grau Realista - Jogo de Moto
[RESOLVIDO] Como acessar e mudar o volume via script
Hoje à(s) 3:57 pm
Hoje à(s) 3:24 pm
Hoje à(s) 12:54 pm
Hoje à(s) 8:13 am
Hoje à(s) 8:11 am
Ontem à(s) 6:56 pm
Ontem à(s) 2:41 pm
Ontem à(s) 8:12 am
Ontem à(s) 7:57 am
Sab Nov 10, 2018 8:54 pm
Sab Nov 10, 2018 5:11 pm
Sab Nov 10, 2018 2:52 pm
Sab Nov 10, 2018 2:13 pm
Sab Nov 10, 2018 8:45 am
Sab Nov 10, 2018 2:10 am
Sab Nov 10, 2018 12:39 am
Sab Nov 10, 2018 12:28 am
Sex Nov 09, 2018 3:56 pm
Sex Nov 09, 2018 1:34 pm
Qui Nov 08, 2018 11:49 pm
Qui Nov 08, 2018 11:28 pm
Qui Nov 08, 2018 11:25 pm
Qui Nov 08, 2018 10:01 pm
Qui Nov 08, 2018 7:47 pm
Qui Nov 08, 2018 12:36 pm
Qui Nov 08, 2018 12:31 pm
Qui Nov 08, 2018 12:28 pm
Qui Nov 08, 2018 12:53 am
Qua Nov 07, 2018 5:52 pm
Qua Nov 07, 2018 4:04 pm
Qua Nov 07, 2018 12:49 pm
Ter Nov 06, 2018 2:05 pm
Ter Nov 06, 2018 12:30 pm
Ter Nov 06, 2018 11:32 am
Ter Nov 06, 2018 1:10 am
Seg Nov 05, 2018 6:57 pm
Seg Nov 05, 2018 3:36 pm
Seg Nov 05, 2018 12:44 am
Dom Nov 04, 2018 5:32 pm
Dom Nov 04, 2018 5:31 pm
Dom Nov 04, 2018 5:30 pm
Dom Nov 04, 2018 1:05 am
Sab Nov 03, 2018 5:19 pm
Sab Nov 03, 2018 1:36 pm
Sex Nov 02, 2018 11:38 pm
Sex Nov 02, 2018 10:55 pm
Sex Nov 02, 2018 9:10 pm
Sex Nov 02, 2018 8:16 pm
Sex Nov 02, 2018 7:50 pm
Sex Nov 02, 2018 7:41 pm
Sex Nov 02, 2018 7:27 pm
Sex Nov 02, 2018 6:36 pm
Sex Nov 02, 2018 3:27 pm
Sex Nov 02, 2018 3:35 am
Sex Nov 02, 2018 3:24 am
Qui Nov 01, 2018 3:56 pm
Qui Nov 01, 2018 3:52 pm
Qui Nov 01, 2018 1:18 pm
Qui Nov 01, 2018 7:57 am
Qui Nov 01, 2018 2:26 am
Qui Nov 01, 2018 2:05 am
Qua Out 31, 2018 9:20 pm
Qua Out 31, 2018 6:09 pm
Qua Out 31, 2018 7:17 am
Ter Out 30, 2018 11:34 pm
Ter Out 30, 2018 9:34 pm
Ter Out 30, 2018 5:29 pm
Ter Out 30, 2018 8:12 am
Ter Out 30, 2018 8:05 am
Seg Out 29, 2018 2:21 pm
Seg Out 29, 2018 12:03 am
Dom Out 28, 2018 5:33 pm
Dom Out 28, 2018 11:58 am
Dom Out 28, 2018 11:57 am
Sab Out 27, 2018 11:29 am
Sab Out 27, 2018 11:22 am
Sex Out 26, 2018 8:31 pm
Sex Out 26, 2018 6:21 pm
Sex Out 26, 2018 5:56 pm
Sex Out 26, 2018 5:13 pm
Sex Out 26, 2018 5:03 pm
Sex Out 26, 2018 2:45 pm
Sex Out 26, 2018 1:51 pm
Sex Out 26, 2018 8:36 am
Qui Out 25, 2018 10:29 pm
Qui Out 25, 2018 9:59 pm
Qui Out 25, 2018 6:27 pm
Qui Out 25, 2018 1:14 pm
Qua Out 24, 2018 10:53 pm
Qua Out 24, 2018 8:10 pm
Qua Out 24, 2018 6:10 pm
Qua Out 24, 2018 6:10 pm
Qua Out 24, 2018 5:43 pm
Qua Out 24, 2018 10:34 am
Qua Out 24, 2018 10:29 am
Qua Out 24, 2018 8:46 am
Ter Out 23, 2018 11:25 pm
Ter Out 23, 2018 11:20 pm
Ter Out 23, 2018 9:05 pm
francisco barroso
Vitor Paulino
Callyde Jr
dstaroski
dstaroski
SuperGamer
Patrick
dstaroski
dstaroski
SuperGamer
Magnatah
francisco barroso
Samuelostgamer
francisco barroso
dazentt55
GattiMene
MarceloYBP
SuperGamer
conceptfac
SuperGamer
Tegh
francisco barroso
NKKF
GameLACK
dstaroski
dstaroski
dstaroski
jack2117
Mathss
JohnRambo
Daniel Dória
JohnRambo
gurgelg752
francisco barroso
MarcosSchultz
Nalfam
dstaroski
MarcosSchultz
dstaroski
dstaroski
dstaroski
Magnatah
dazentt55
Teio
Callyde Jr
hetrodo
MarcosSchultz
NKKF
CarlosDT94
MarcosSchultz
MarcosSchultz
Magnatah
MrMattD
MarcosSchultz
MarcosSchultz
francisco barroso
francisco barroso
Callyde Jr
Dom3000
MarcosSchultz
MarcosSchultz
francisco barroso
MATHEUS1233
dstaroski
francisco barroso
theus.mors
Magnatah
dstaroski
dstaroski
dstaroski
MarcosSchultz
mafipt
dstaroski
dstaroski
Weslley
Weslley
Magnatah
MarcosSchultz
JohnRambo
dknoob537
samuelarao
theus.mors
MayLeone
dstaroski
Tegh
Encracker
Dom3000
Jmspp
CaioItz
rafaelllsd
dknoob537
Frsilva
Phph09
francisco barroso
dstaroski
dstaroski
Locodapraça
Duarte
Brgs886

[TUTORIAL] Inteligência artificial, inimigo e AIPoints

Página 2 de 2 Anterior  1, 2

Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por arnaldojunior em Ter Mar 14, 2017 11:22 am

Olhei todo o código e comecei a entender o problema, movi os aipoints de posição e o problema mudou para algo mais concreto.

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index
System.Collections.Generic.List`1[UnityEngine.Transform].get_Item (Int32 index) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:633)
AIPOINTS.Update () (at Assets/AIPOINTS.cs:82)

Como disse sou novo no Unity, mas acredito que estou estourando meu contador.
O que devo fazer para que isso não ocorra, até porque meu guardião só vai até o primeiro ponto.

arnaldojunior
Membro
Membro

PONTOS : 849
REPUTAÇÃO : 1
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por GetulioGamerbr em Ter Mar 14, 2017 1:58 pm

@MarcosSchultz escreveu:

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
OBRIGADO Marcos,muito obrigado msmo por esses scripts,meu projeto so está sendo concluido pelo seu trabalho
avatar
GetulioGamerbr
Iniciante
Iniciante

PONTOS : 747
REPUTAÇÃO : 1
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por arnaldojunior em Dom Mar 19, 2017 11:00 am

Olá, tentei usar o script do Marcos para que meu guardião vaga-se pelo labirinto, mas não deu certo. Resolvi criar vergonha na cara e criar meu próprio script, mas dessa vez para que ele perambula-se aleatoriamente, mas meu problema agora é que quando ele marca um ponto da "navmesh sphere" inacessível, ele para ao travar em uma parede. Tentei usar raycast para ele detectar objetos e refazer o calculo, mas quando ele esbarra em angulo fechado (e isto ocorre muito) o raycast não funciona. Se eu tirar meu teste de só fazer o calculo de localização do "se não" ele para de esbarrar, mas como esta no update, acredito que vã consumir muita memória.
Minha duvida portanto é:
Como testar se a algum obstaculo em um angulo de 180° ou um raycast em angulo, o que me ajudaria a melhorar o sistema de detecção do guardião, pois ele só persegue o player se este passar bem diante de seus olhos.
Agradeço pela atenção.
Código:

using UnityEngine;
using UnityEngine.AI;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(CharacterController))]


public class Inimigo : MonoBehaviour
{

    public Transform Player;
    public UnityEngine.AI.NavMeshAgent naveMesh;
    private NavMeshAgent navemesh;
    public Vector3 insideUnitSphere;

    // Use this for initialization
    void Start ()
    {

        navemesh = transform.GetComponent<UnityEngine.AI.NavMeshAgent>();
    }
   
   // Update is called once per frame
   void Update ()
    {
        RaycastHit hit;
        if (Physics.Raycast(transform.position,transform.forward,out hit,30))
            {
            if (hit.collider.gameObject.CompareTag("Player"))
                {
                naveMesh.destination = Player.position;
                }
         
           }
        else if (naveMesh.destination == transform.position)
        {
            naveMesh.destination = Random.insideUnitSphere * 50;
            Debug.Log(naveMesh.destination);

        }

    }
  }

arnaldojunior
Membro
Membro

PONTOS : 849
REPUTAÇÃO : 1
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por MarcosSchultz em Ter Mar 21, 2017 12:05 am

Poderia criar um tópico específico para esta dúvida?
avatar
MarcosSchultz
Administrador

Masculino PONTOS : 61107
REPUTAÇÃO : 2090
Idade : 22
Áreas de atuação : Administrador do fórum
Respeito as regras :

Ver perfil do usuário http://www.schultzgames.com

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por Diego Felix em Seg Jul 17, 2017 10:37 pm

Muito bom marcos esse tópico tah me ajudando bastante, mas queria saber como faço pra por as animações do inimigo ficar parado,caminhar,atacar, morrer e etc quem puder me ajudar ja agradeço Smile
avatar
Diego Felix
Avançado
Avançado

Masculino PONTOS : 905
REPUTAÇÃO : 65
Idade : 28
Respeito as regras :

Ver perfil do usuário https://www.blogger.com/blogger.g?blogID=2315682099830977662#ove

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por MarcosSchultz em Sex Jul 21, 2017 8:47 pm

avatar
MarcosSchultz
Administrador

Masculino PONTOS : 61107
REPUTAÇÃO : 2090
Idade : 22
Áreas de atuação : Administrador do fórum
Respeito as regras :

Ver perfil do usuário http://www.schultzgames.com

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por bsoll4 em Ter Nov 14, 2017 2:37 pm

estou tendo um problema:
quando o inimigo chega no AIpoint ele simplesmente gira no eixo y e entra no chao, aí fica travado la;

bsoll4
Iniciante
Iniciante

PONTOS : 373
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por Unidade3d5 em Ter Nov 14, 2017 4:37 pm


Unidade3d5
Avançado
Avançado

Masculino PONTOS : 772
REPUTAÇÃO : 21
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por Callyde Jr em Ter Nov 14, 2017 6:41 pm

Observe se os AIpoint estaodentrodo chao?
Coloque um BoxeCollider para ver melhor.
avatar
Callyde Jr
Programador

Masculino PONTOS : 2700
REPUTAÇÃO : 371
Idade : 39
Áreas de atuação : Iniciante em modelagem Blender,ScketSHUP
Progamador
Ideialista

Meu Canal
https://www.youtube.com/ch
Respeito as regras :

Ver perfil do usuário http://unnygames.000webhostapp.com/

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por ixgames em Sex Jan 26, 2018 2:09 pm

blz. eu sei que este post ja é um pouco antigo. mas eu testei aqui e descobri que tem alguns bugs. 

os scripts fucnionam sim, so que se tiver algum objecto entre o inimigo e AIpoint. o inimigo para e da erro. ou seja. se tiver uma parede ou um objecto que tape a visao do inimigo dos pontos. da erro.. 

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index

linha 82: 
Vector3 target = ListaDeAiPoints[AIpoitAtual].transform.position;//A VARIAVEL target RECEBE A POSIÇAO DO AIpointAtual

... 

eu acho que este script foi criando em um terreno aberto sem paredes nem nada do tipo. 

outro problema achado neste script. tem haver com o uso do navmesh.. a partir do momento que eu adiciono um nav mesh ao terreno e faco bake.. o inimigo quando esta a patrulhar entre os pontos. na chegada de cada ponto ele simplsmente se deita no terreno. por veses levanta se e vai ate outro ponto. outras veses so fica deitado no mesmo sitio..

nao entendo porque que o modelo 3D rotaciona.. !!

alem disso tem outro problema, os AIpoints nao podem estar a uma altura grande nem muito baixa.. se tiver uma altura grande. o player sobe em direcao ao gameobject..!!

apesar deste script ser muito bom.. gostava que voce podesse refurmalar este script para usar com navemesh... e corrigindo estes bugs. seria otimo usar num projecto!!!

ixgames
Iniciante
Iniciante

PONTOS : 292
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por BrazaTattoo em Ter Jun 19, 2018 9:01 pm

Boa noite, gostaria que o inimigo aguardasse um tempo no ai point, o script que estou utilizando nao tem a opçao. se puderem me ajudar eu agradeço muito!  Segue o Script

Código:
using UnityEngine.AI;
using System.Collections;
using UnityEngine;


public class INTELIGENCIA2 : MonoBehaviour {
 public Transform Player;
 private NavMeshAgent naveMesh;
 public float DistanciaDoPlayer, DistanciaDoAIPoint;
 public float DistanciaDePercepcao = 30,DistanciaDeSeguir = 20, DistanciaDeAtacar = 2, VelocidadeDePasseio = 3, VelocidadeDePerseguicao = 6,TempoPorAtaque = 1.5f, DanoDoInimigo = 40;
 private bool VendoOPlayer;
 public Transform[] DestinosAleatorios;
 private int AIPointAtual;
 private bool PerseguindoAlgo, contadorPerseguindoAlgo,atacandoAlgo,contadorOlhar ;
 private float cronometroDaPerseguicao,cronometroAtaque, cronometroOlhar;
 public bool BPassear, BOlhar, BPerseguir, BAtacar;
private Animator zumbi;


 void Start (){
 AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
 naveMesh = transform.GetComponent<NavMeshAgent> ();
  zumbi = GetComponent<Animator> ();
 }
 void Update (){
 DistanciaDoPlayer = Vector3.Distance(Player.transform.position,transform.position);
 DistanciaDoAIPoint =  Vector3.Distance(DestinosAleatorios[AIPointAtual].transform.position,transform.position);
 //============================== RAYCAST ===================================//
 RaycastHit hit;
 Vector3 deOnde = transform.position;
 Vector3 paraOnde = Player.transform.position;
 Vector3 direction = paraOnde - deOnde;
 if(Physics.Raycast (transform.position,direction,out hit,1000) && DistanciaDoPlayer < DistanciaDePercepcao ){
 if(hit.collider.gameObject.CompareTag("Player")){
 VendoOPlayer = true;
 }else{
 VendoOPlayer = false;
 }
 }
 //================ CHECHAGENS E DECISOES DO INIMIGO ================//
 if(DistanciaDoPlayer > DistanciaDePercepcao && cronometroOlhar < 5){
 PerseguindoAlgo = false;
 BPassear = true;
 Passear();
 }
 if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir && cronometroOlhar < 5) {
 if(VendoOPlayer == true){
 BOlhar = true;
 Olhar ();
 }else{
 BPassear = true;

 Passear();
 }
 }
 if (DistanciaDoPlayer <= DistanciaDeSeguir && DistanciaDoPlayer > DistanciaDeAtacar ) {
 if(VendoOPlayer == true){
 BPerseguir = true;
 Perseguir();
 PerseguindoAlgo = true;
 }else{
 BPassear = true;

 Passear();
 }
 }
 if (DistanciaDoPlayer <= DistanciaDeAtacar ) {
 BAtacar = true;
 Atacar();
 }
 //COMANDOS DE PASSEAR
 if (DistanciaDoAIPoint <= 2) {
 AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
 BPassear = true;

 Passear();
 }
 //CONTADORES DE OLHAR
 if (contadorOlhar == true) {
 cronometroOlhar += Time.deltaTime;
 }
 if (cronometroOlhar >= 5 ) {
 Perseguir();

 }
 if (cronometroOlhar >= 8 ) {
 contadorOlhar = false;
 cronometroOlhar = 0;
 Perseguir();

 }
 //CONTADORES DE PERSEGUICAO
 if (contadorPerseguindoAlgo == true) {
 cronometroDaPerseguicao += Time.deltaTime;
 }
 if (cronometroDaPerseguicao >= 5 && VendoOPlayer == false) {
 contadorPerseguindoAlgo = false;
 cronometroDaPerseguicao = 0;
 PerseguindoAlgo = false;
 }
 // Freio do ATAQUE

 if (DistanciaDoPlayer <= DistanciaDeAtacar - 1) {
 naveMesh.destination = gameObject.transform.position;
 }

 // CONTADOR DE ATAQUE
 if (atacandoAlgo == true) {
 transform.LookAt (new Vector3 (Player.transform.position.x, transform.position.y, Player.transform.position.z));

 cronometroAtaque += Time.deltaTime;
 }
 if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer <= DistanciaDeAtacar) {
 atacandoAlgo = true;
 cronometroAtaque = 0;



 //PLAYER.VIDA = PLAYER.VIDA - DanoDoInimigo;
 Debug.Log ("recebeuAtaque");
 } else if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer > DistanciaDeAtacar) {
 atacandoAlgo = false;
 cronometroAtaque = 0;
 Debug.Log ("errou");
 }
 }
 void Passear (){
 
 BOlhar = false;
 BPerseguir = false;
 BAtacar = false;
zumbi.SetInteger("condicao", 0);

 if (PerseguindoAlgo == false) {
 naveMesh.acceleration = 5;
 naveMesh.speed = VelocidadeDePasseio;
 naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
 } else if (PerseguindoAlgo == true) {
 contadorPerseguindoAlgo = true;
 }
 }
 void Olhar(){
 contadorOlhar = true;

 BPassear = false;
zumbi.SetInteger("condicao", 1);
 BPerseguir = false;
 BAtacar = false;

 naveMesh.speed = 0;
 transform.LookAt (Player);
 }
 void Perseguir(){
 BPassear = false;
 BOlhar = false;
zumbi.SetInteger("condicao", 2);
 BAtacar = false;

 naveMesh.acceleration = 8;
 naveMesh.speed = VelocidadeDePerseguicao;
 naveMesh.destination = Player.position;
 }
 void Atacar (){
 BPassear = false;
 BOlhar = false;
 BPerseguir = false;
 zumbi.SetInteger("condicao", 3);


 atacandoAlgo = true;
 }
}

BrazaTattoo
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por NKKF em Ter Jun 19, 2018 9:45 pm

Na void "Passear" mude-a para IEnumerator e coloque um:

Código:
//Pode mudar esse "3f"
yield return new WaitForSeconds(3f);

Antes de dizer que ele irá mudar seu destino
avatar
NKKF
ProgramadorMaster

Masculino PONTOS : 2025
REPUTAÇÃO : 408
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras :

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por BrazaTattoo em Qua Jun 20, 2018 12:29 am

Obrigado pela dica, sou novato ainda em programaçao, vou tentar aprender sobre IEnumerator pois nunca usei nem sei como usar. eu mantenho a void Passear ?

BrazaTattoo
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por NKKF em Qua Jun 20, 2018 6:36 am

Sim, pode manter, só mudar ela para IEnumerator e adicionar para ela esperar.
avatar
NKKF
ProgramadorMaster

Masculino PONTOS : 2025
REPUTAÇÃO : 408
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras :

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por DGDark em Seg Jul 23, 2018 7:36 pm

Marcos eu coloquei esse script, porem ele só segue quando olha pra ele e quando ele chega no AIPoint ele meio que cai e fica como se tivesse escurregado

DGDark
Iniciante
Iniciante

Masculino PONTOS : 832
REPUTAÇÃO : 3
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por Unidade3d5 em Ter Jul 24, 2018 2:41 am

@DGDark escreveu:Marcos eu coloquei esse script, porem ele só segue quando olha pra ele e quando ele chega no AIPoint ele meio que cai e fica como se tivesse escurregado
Ola DGDark  voce esta precisando de uma AI para seu jogo?

Unidade3d5
Avançado
Avançado

Masculino PONTOS : 772
REPUTAÇÃO : 21
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por DGDark em Ter Jul 24, 2018 2:43 am

@Unidade3d5 escreveu:
@DGDark escreveu:Marcos eu coloquei esse script, porem ele só segue quando olha pra ele e quando ele chega no AIPoint ele meio que cai e fica como se tivesse escurregado
Ola DGDark  voce esta precisando de uma AI para seu jogo?
Sim, estou fazendo um game de terror, e esta tentando fazer uma AI e peguei a do forúm porem aconteceu isso

DGDark
Iniciante
Iniciante

Masculino PONTOS : 832
REPUTAÇÃO : 3
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por DGDark em Ter Jul 24, 2018 2:44 am

Se poder me ajudar agradeço desde já.

DGDark
Iniciante
Iniciante

Masculino PONTOS : 832
REPUTAÇÃO : 3
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por Unidade3d5 em Ter Jul 24, 2018 3:13 am

@DGDark escreveu:Se poder me ajudar agradeço desde já.
me chama no facebook 

https://www.facebook.com/profile.php?id=100010490649346&ref=bookmarks

Unidade3d5
Avançado
Avançado

Masculino PONTOS : 772
REPUTAÇÃO : 21
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Inteligência artificial, inimigo e AIPoints

Mensagem por FuncaoFF em Seg Set 10, 2018 11:10 pm

Muito bom parabéns! O meu funcionou bem. Só o Sprite que desaparece quando chega no segundo ponto. Ficou muito bom.

FuncaoFF
Iniciante
Iniciante

PONTOS : 64
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Página 2 de 2 Anterior  1, 2

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum