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 Very Happy
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Dúvida NavMesh com UI
(Ajuda) PlayerPrefs
Textura - Envelopamento de Cubos e outras Formas
Salvar estado de bool com PlayerPrefsX.
[____ADMINISTRAÇÃO____] PRECISO DE AJUDA [DICA PARA SER AJUDADO]
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
[Projeto] Line Battle
[Duvida]3dwarehouse posso usar seus modelos e vender meu jogo ?
[TUTORIAL] Como criar um HUD MULTIPLAYER personalizavel
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Novo tema fórum - Votação
Bug Animation
avaliem esse trabalho no scupt mode
[TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
Como usar o Getfloat no audio mixer?
Wheel joint 2d e problema com limite de velocidade
[RESOLVIDO]Text não recebe texto do inpult Field
Unity editor lento, mas game final não
Como criar uma conexão externa usando IP do host
[RESOLVIDO] Componente Button em um sprite.
Seleção de botão
GRAFICOS UNITY
[DUVIDA] Textura dentro do objeto com editor gráfico da unity
colisão na particle
Adaptação a Área de Desenvolvimento de Jogos
PRECISO DE UM ANIMADOR
[RESOLVIDO] Qual o Aspect Ratio do celular.
Formação de equipe
pack de animações
Como faço para o personagem entrar e sair do carro?
[DÚVIDA]Como sincronizar os kills e mortes com Unet
[RESOLVIDO]Licença 3d Warehouse
como criar um slime? como fazer para uma mesh ficar mole e colidir com o chao(tipo slime)?
[DÚVIDA]É possível instalar o Unity no Ubuntu e ser ativado sem internet?
[DÚVIDA]Materiais da Unity para objetos do Blender
[AJUDA]Quero Ajuda poque esse script so da erro!
[DÚVIDA]Tempo de espera fora do app
[RESOLVIDO]Script com um pequeno defeito
[RESOLVIDO]Erro com monodevelop
[RESOLVIDO]Como fazer o audio se sobrepor?
aVork - Física realista para veículos
Wheel Collider
Dúvida com void OnTriggerEnter
Blender p/ Unity - Objetos c/ 90º
[AJUDA]Como ativar/desativar todos os GameObjects de uma array
[DÚVIDA]Atributos Network UNET
Asset MS Vehicle System
[ERRO UNITY] Unity 2017
[RESOLVIDO] erro no unity 2017 ao colocar scripts
[DÚVIDA]Problema com Multiplayer UNET
NOVO ANDROID STUDIO COM PROBLEMA NO SDK
[TUTORIAL] UNITY 5 - Efeito submerso (underwater effect), distorção da água e gotas na tela
Suzuki Srad 750
[RESOLVIDO]Tem Como eu Fazer uma Float com 2 Numeros após a virgula ?
[RESOLVIDO] Cálculo simples dando errado
Build Para IOS
[DEVLOG] Projeto - Pocket Girl Blade - Atualização
Movimentação no Espaço como Jet Pack
Como selecionar um único filho de um Gameobject?
Numero de itens iguais em uma lista
[RESOLVIDO]Alguém tem alguma dica sobre NavMeshAgent
Problemas com o Unity
[RESOLVIDO]Receber o nome do próprio objeto em uma string
Weslley GameDev
[DÚVIDA]Ajuda para como fazer esse script voltar a funcionar
[Duvida] Collab Excedeu o Seu Limite : Como posso transferir o projeto entre a equipe?
[DUVIDA] Sistema de diario/Livro de notas
[DÚVIDA](Multiplayer) Comando para non-Player object
é Possivel visualizar uma Variavel Estatica no Inspector ?
Physics2D para Physics?
Erro com lista
Como melhorar o desempenho mobile?
[DÚVIDA]Receber e setar texto em um objeto
[DÙVIDA]Problema ao criar build Android
[DÚVIDA]Como fazer um lerp de um determinado valor de maneira gradativa
[DÚVIDA]MULTIPLAYER Unet: Como sincronizar Variaveis(bool)
Novo jogo em desenvolvimento para android
Banco de Dados Cotação
[RESOLVIDO] O fórum é só para Unity?
[RESOLVIDO] Button perdendo a instancia
[RESOLVIDO]UNITY NAO REPRODUZ AUDIO, problema do pc ou da unity?
Atualização do meu jogo estilo Resident Evil 4 + link do APK
Reproduzir vídeos do youtube
Necessito de sua ajuda para uma ideia...
(ARQUIVO) Leia aqui como obter sucesso com seu jogo independente?
Duvida com script !
Criar LAN via bluetooth
[RESOLVIDO]Estou Usando FindGameObjectWithTag Porem....
[TUTORIAL] Mover/Empurrar Objetos, Caixote,etc
Script de Movimentação não funciona
[RESOLVIDO] SDK NÃO FUNCIONA NO WINDOWS 10
Novo jogo - Stackx
Simular tecla com um botao ou touch
Botoes da unity no android e destruir um objeto em qualquer lugar da cena com touch
Dúvida Netwoking
[____ADERIR A UMA CATEGORIA NO FÓRUM____]
Ajuda Com Admob
é Possivel Fazer uma FindTag usando um Text ao inves do GameObject ?
[RESOLVIDO] Animação com "Objetos"
Hoje à(s) 2:20 pm
Hoje à(s) 1:58 pm
Hoje à(s) 1:17 pm
Hoje à(s) 12:19 pm
Hoje à(s) 11:46 am
Hoje à(s) 11:45 am
Hoje à(s) 10:10 am
Hoje à(s) 10:00 am
Hoje à(s) 9:04 am
Hoje à(s) 8:52 am
Hoje à(s) 8:46 am
Hoje à(s) 7:59 am
Hoje à(s) 7:50 am
Hoje à(s) 12:23 am
Hoje à(s) 12:09 am
Ontem à(s) 10:35 pm
Ontem à(s) 9:22 pm
Ontem à(s) 8:07 pm
Ontem à(s) 7:55 pm
Ontem à(s) 7:51 pm
Ontem à(s) 7:31 pm
Ontem à(s) 6:22 pm
Ontem à(s) 5:44 pm
Ontem à(s) 4:07 pm
Ontem à(s) 2:03 pm
Ontem à(s) 1:13 pm
Ontem à(s) 12:31 pm
Ontem à(s) 10:06 am
Ontem à(s) 9:12 am
Sab Jan 20, 2018 11:57 pm
Sab Jan 20, 2018 10:12 pm
Sab Jan 20, 2018 9:54 pm
Sab Jan 20, 2018 9:36 pm
Sab Jan 20, 2018 9:23 pm
Sab Jan 20, 2018 9:02 pm
Sab Jan 20, 2018 8:46 pm
Sab Jan 20, 2018 8:30 pm
Sab Jan 20, 2018 8:26 pm
Sab Jan 20, 2018 8:23 pm
Sab Jan 20, 2018 8:20 pm
Sab Jan 20, 2018 8:11 pm
Sab Jan 20, 2018 8:10 pm
Sab Jan 20, 2018 8:05 pm
Sab Jan 20, 2018 7:29 pm
Sab Jan 20, 2018 7:08 pm
Sab Jan 20, 2018 4:21 pm
Sab Jan 20, 2018 11:38 am
Sab Jan 20, 2018 11:25 am
Sab Jan 20, 2018 2:05 am
Sab Jan 20, 2018 1:34 am
Sex Jan 19, 2018 9:06 pm
Sex Jan 19, 2018 8:00 pm
Sex Jan 19, 2018 3:10 pm
Sex Jan 19, 2018 1:05 pm
Sex Jan 19, 2018 11:52 am
Sex Jan 19, 2018 10:17 am
Sex Jan 19, 2018 10:13 am
Sex Jan 19, 2018 1:11 am
Qui Jan 18, 2018 9:46 pm
Qui Jan 18, 2018 8:10 pm
Qui Jan 18, 2018 8:00 pm
Qui Jan 18, 2018 7:42 pm
Qui Jan 18, 2018 7:13 pm
Qui Jan 18, 2018 7:09 pm
Qui Jan 18, 2018 5:09 pm
Qui Jan 18, 2018 4:53 pm
Qui Jan 18, 2018 4:10 pm
Qui Jan 18, 2018 4:10 pm
Qui Jan 18, 2018 4:05 pm
Qui Jan 18, 2018 4:03 pm
Qui Jan 18, 2018 3:46 pm
Qui Jan 18, 2018 3:04 pm
Qui Jan 18, 2018 1:28 pm
Qui Jan 18, 2018 1:09 pm
Qui Jan 18, 2018 12:36 pm
Qui Jan 18, 2018 12:23 pm
Qui Jan 18, 2018 11:25 am
Qui Jan 18, 2018 8:23 am
Qui Jan 18, 2018 8:11 am
Qui Jan 18, 2018 2:17 am
Qui Jan 18, 2018 2:14 am
Qua Jan 17, 2018 8:35 pm
Qua Jan 17, 2018 6:41 pm
Qua Jan 17, 2018 4:25 pm
Qua Jan 17, 2018 4:08 pm
Qua Jan 17, 2018 3:30 pm
Qua Jan 17, 2018 3:03 pm
Qua Jan 17, 2018 1:00 pm
Qua Jan 17, 2018 1:00 pm
Qua Jan 17, 2018 12:22 pm
Qua Jan 17, 2018 11:31 am
Qua Jan 17, 2018 10:40 am
Qua Jan 17, 2018 8:46 am
Ter Jan 16, 2018 11:17 pm
Ter Jan 16, 2018 11:04 pm
Ter Jan 16, 2018 10:45 pm
Ter Jan 16, 2018 9:31 pm
Ter Jan 16, 2018 8:50 pm
Ter Jan 16, 2018 8:16 pm
BRGC
felipehobs1
azool
Ghosthy
dstaroski
dstaroski
BRGC
BRGC
Phph09
M4theuz
M4theuz
TioUV
TioUV
mayke1040
916anderson
Álefe Kauvyhtz
recagonlei
recagonlei
recagonlei
recagonlei
Mosqueiro
Before Dawn
BRGC
Daniel Pires da Silva
Raphaels
Junim
recagonlei
victorgx22
dstaroski
mafersa
recagonlei
recagonlei
recagonlei
recagonlei
recagonlei
recagonlei
recagonlei
recagonlei
recagonlei
recagonlei
MarcosSchultz
MarcosSchultz
Água Sem Hidrogênio
luiz12345
felipehobs1
recagonlei
dazentt55
PatifeCraft
recagonlei
recagonlei
marco.flautista
Pixelizad
MRX
recagonlei
recagonlei
natanael.olimpio
dstaroski
MarcosSchultz
felipehobs1
recagonlei
recagonlei
dstaroski
recagonlei
DuViDoSo
MarcosSchultz
MarcosSchultz
Gwiisk
recagonlei
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MRX
YmKx
recagonlei
recagonlei
ÁguaMineral
Phph09
John Rambo
recagonlei
recagonlei
thiagotmi
natanael.olimpio
cody0033
cody0033
jasondavin
Água Sem Hidrogênio
recagonlei
dstaroski
Água Sem Hidrogênio
recagonlei
googolepton
Phph09
fabriciorsz34
recagonlei
recagonlei
Água Sem Hidrogênio
rafaelllsd
recagonlei

Ajuda com a IA do meu inimigo

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

PEDIDO Ajuda com a IA do meu inimigo

Mensagem por Gwiisk em Sab Jan 13, 2018 10:10 pm

Olá pessoas! Estou desenvolvendo um jogo de terror com visão Top-Down bem simples, porém acabei ficando preso na IA do meu inimigo, a parte de Patrulhar e Perseguir meu jogador está quase completa, estou com um problema em fazer meu inimigo perseguir meu personagem se estiver somente no campo de visão dele, por enquanto ele persegue independente da direção do meu personagem, e também estou com um problema com ele e portas, quero que se caso, ele estiver perseguindo meu jogador, e durante a perseguição ele atravessar e fechar uma porta antes que inimigo passe, que o inimigo seja capaz de, parar seu movimento, destruir e porta(caso não esteja trancada), e se o personagem ainda estiver no campo de visão continuar a perseguição, caso contrario voltar a patrulhar, estou usando NavMesh e FSM no meu inimigo.

NPCBase:
Código:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class NPCBaseFSM : StateMachineBehaviour {



    public GameObject NPC;

    public UnityEngine.AI.NavMeshAgent agent;

    public GameObject opponent;

    public float speed = 2.0f;

    public float rotSpeed = 1.0f;

    public float accuracy = 3.0f;



    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {

        NPC = animator.gameObject;

        opponent = NPC.GetComponent<KillerIA> ().GetPlayer ();

        agent = NPC.GetComponent<UnityEngine.AI.NavMeshAgent> ();

    }

}

Killer IA:


Código:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class KillerIA : MonoBehaviour {



    Animator anim;

    public GameObject player;

    public float hideDistance = 5;



    public GameObject GetPlayer() {

        return player;

    }

        

    // Use this for initialization

    void Start () {

        anim = GetComponent<Animator> ();

    }

    

    // Update is called once per frame

    void Update () {

        anim.SetFloat ("distance", Vector3.Distance (transform.position, player.transform.position));

        if(anim.GetFloat("distance") > hideDistance)

            anim.SetBool ("hide", GameObject.Find("Player").GetComponent<Controller>().hide);

    }

}


Patrulha:



Código:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class Patrol : NPCBaseFSM {



    GameObject[] waypoints;

    int currentWP;



    void Awake() {

        waypoints = GameObject.FindGameObjectsWithTag ("waypoint");

    }



     // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state

    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {

        base.OnStateEnter (animator, stateInfo, layerIndex);

        currentWP = 0;

    }



    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks

    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {

        if (waypoints.Length == 0)

            return;

        if (Vector3.Distance (waypoints [currentWP].transform.position,

               NPC.transform.position) < accuracy) {

            currentWP++;

            if (currentWP >= waypoints.Length) {

                currentWP = 0;

            }

        }

        agent.SetDestination (waypoints [currentWP].transform.position);

    }



    // OnStateExit is called when a transition ends and the state machine finishes evaluating this state

    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {



    }

}

Perseguição:

Código:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class Chase : NPCBaseFSM {



     // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state

    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {

        base.OnStateEnter (animator, stateInfo, layerIndex);

    }



    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks

    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {

        agent.SetDestination (opponent.transform.position);

        agent.speed = 5;

    }



    // OnStateExit is called when a transition ends and the state machine finishes evaluating this state

    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {

        agent.speed = 2.5f;

    }



}

Gostaria que alguém me ajudasse com esse problema, ou pelo menos pudesse me explicar como posso fazer para conseguir, obrigado pela atenção! <3

Feliz *2018*

Gwiisk
Iniciante
Iniciante

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajuda com a IA do meu inimigo

Mensagem por exodiamk em Dom Jan 14, 2018 12:00 am

MAN TENTA USA UM RAYCAST PRA CONFIRMA SE ELE ESTA VENDO OU NAO O PLAYER AQUI TA UM EXEMPLO QUE PEGUEI AQUI NO FORUMM ELE MANDA UM RAYCAST PRO PLAYER SE LOCALIZA ELE ATACA SE COLIDIR COM ALGO ELE VOLTA A PATRULHA
ABRACOS 
Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(CharacterController))]
public class ZOMBIE : 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
    }
}

exodiamk
Iniciante
Iniciante

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajuda com a IA do meu inimigo

Mensagem por Gwiisk em Dom Jan 14, 2018 12:26 pm

Bem, eu alterei o script do meu inimigo, coloquei o raycast para a visão, parece estar funcionando, mas não consigo ter certeza, mas ele ainda pega meu personagem atraves da parede, tentei fazer com tags e tudo mais e fica dando erro "Object reference not set an instance of an object", então queria saber como posso resolver ou outro metodo;


Killer IA:

Código:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class KillerIA : MonoBehaviour {



    Animator anim;

    public GameObject player;

    public float hideDistance = 5;



    Ray thuRay;

    public Color rayColor;

    RaycastHit hit;



    public GameObject GetPlayer() {

        return player;

    }



    // Use this for initialization

    void Start () {

        anim = GetComponent<Animator> ();

    }

    

    // Update is called once per frame

    void Update () {

        Vector3 targetDir = player.transform.position - transform.position;

        float angle = Vector3.Angle (targetDir, transform.forward);



        thuRay = new Ray (transform.position, -transform.forward * 10);



        anim.SetFloat ("distance", Vector3.Distance (transform.position, player.transform.position));

        if (anim.GetFloat ("distance") > hideDistance)

            anim.SetBool ("hide", GameObject.Find ("Player").GetComponent<Controller> ().hide);



        if (angle <= 90 && Physics.Raycast (transform.position, -transform.forward, 10)) {

            Debug.Log ("Can see you");

            anim.SetBool ("canSee", true);

        } else {

            anim.SetBool ("canSee", false);

        }

    }

}

Gwiisk
Iniciante
Iniciante

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

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