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:
Script de Chute Futebol
Polygon Collider anexado a sprite com areas transparentes
Seleçao de personagens no Photon.
Botão para acionar velocidade e botão para retornar a posição inicial
Duvidas sobre jogos 2d
como fazer sistema de seleção de personagem para moba no photon?
Sombras na "tampa" de buracos no blender
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
[____ADMINISTRAÇÃO____] PRECISO DE AJUDA [DICA PARA SER AJUDADO]
Gradiente de cores
Personagem olhar para frente ao andar.
Efeito arma giratória
[TUTORIAL] Criando um simples Multiplayer [UNITY 5]
[Dúvida] Multiplayer Client Object Spawn
Tangram ou Quebra Cabeça
[RESOLVIDO] Problema Com o transform.LookAt!
Jogo com Battle Royale já em desenvolvimento
[TUTORIAL] Unity 5 - Skid Marks (marcas de derrapagem)
Inimigo jogar o jogador de volta.
Como fazer um gráfico em forma de pizza na unity?
Texturização no Blender
Tudo fica bugado ao mudar o projeto de PC para Android
erro de dll's
Como alterar todos os materiais de um mesh renderer?
Destruir Polygon Collider 2D e Readiciona-lo, porém não há uma precisão no colisor gerado!
[TUTORIAL] Mudando material
[RESOLVIDO] Remover child
[RESOLVIDO] Como compilar pra android ?
Inimigo seguir o jogador sem usar o NavMesh
Resolução
(DUVIDA) Pq os Graficos Não Diminuem Corretamente?
[RESOLVIDO] Script não ativa bool do animator
[FORMAÇÃO DE EQUIPE]Equipe para jogo De Carros
Como evitar que o QualitySettings afete a qualidade da textura de um texto do canvas?
[TUTORIAL] Deixar o Texto (UI) mais bonito - HD
Código não compila
Há alguma forma de Fazer o apk Funcionar somente se for baixado pela Play Store ?
[Alpha Android] - Winthia Chronicles (Alpha Devlog, 21 de março de 2018). V 1.6
Configurar MS vehicle system free para UFPS
CRIAR MENSAGEM NA TELA PARA PERSOAGEM
[RESOLVIDO] Dúvida sobre animação do personagem
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Duvida sobre Cenas
[RESOLVIDO] Duvida sobre versao da unity e sobre o lerp
[RESOLVIDO] problemas ao animar o game object
[DÚVIDA] Sair som e acender luz de um BOTÃO UI ao pressionar uma tecla
Dificuldade em criação de mapa simples no Unity
Procuro Modelador 3D, To criando uma equipe.vamos?
[TUTORIAL] Inteligência Artificial
[Devlog] ZByte Defender 10/04 (Alpha Aberta) + Download
[____ADMINISTRAÇÃO____] Alterações IMPORTANTES no fórum.
[TUTORIAL] Decrescer o valor do Emission Particlesystem
Limitar quantidades de vezes chamadas na void Update
[TUTORIAL] Sistema de inventário Sobrevivência
Sistema de Particulas não inicia com o jogo
[TUTORIAL] Serialização - JSON
Como posso resolver um bug reporter que não me deixa abrir o projeto?
[TUTORIAL]Sistema de Pet Virtual [Tamagotchi] Completo (ANDROID/PC)
Como arrumar efeitos do UFPS?
Servidor de discord para desenvolvedores.
Setar objeto filho de outro objeto via scrit
[RESOLVIDO] NavMesh nao funciona direito com terrain ?
[PEDIDO]Criar uma vestimenta para esse modelo que fiz no blender (Com-rig)
Duvida sobre blender para unity
Script para Sistema de Entregas e no final ganhar dinheiro
Problema com contator
Formação de equipe
Criar jogo estilo clash of clans
Form API POST WebService unity
Por que a engine Unity 3D ficou pesado(FPS pior) depois da versão 5?
[TUTORIAL] Screenshoot do jogo no editor (em resoluções mais altas)
[DÚVIDA] Fazer pontuação quando objeto passar por um collider
Como marcar um limite do direcional light em cada parte da cidade?
[Duvida] Multiplayer Moviment Client [Bug?!]
desenvolvimento do meu projeto, fase final
Movimentação 2D em personagem 3D
Ajuda com Substance Designer
Duvida usar posicao do mouse para mudar direcao de Ray
Ajuda Brush de Árvore Terreno
Command 888
Preciso de programador
Sistema de probabilidade de Spawn para Waves
Ajuda com o recuo da arma Jogo de Fps no unity
FPS Asset package completo
Duvida sobre como instanciar 3 objetos de uma vez mas com um tempo entre cada instancia
Shadow of the colossus materiais e models
Duvida Nav Mesh
Dificuldade na Criação de fase bônus
Bomb Battle Jogo Online Em Desenvolvimento
Arquivos NUGET
Controle de Som Quiz
CANVAS BUGADO
Script de Gol ou Escanteio / Pong / Campo de Volei..Alguém??
[TUTORIAL] Sistema de tiro com RAYCAST (várias armas, mira laser, munição, dano, etc, etc)
[TUTORIAL] Sistema de vida,morte,dano
Video no Unity
Problema para fazer Rank de jogadores
Problemas em ativar a seta do mouse
Problema com OnMouseEnter!
Hoje à(s) 6:12 pm
Hoje à(s) 6:07 pm
Hoje à(s) 3:58 pm
Hoje à(s) 9:39 am
Hoje à(s) 9:28 am
Hoje à(s) 9:24 am
Hoje à(s) 4:05 am
Ontem à(s) 1:35 pm
Ontem à(s) 1:34 pm
Ontem à(s) 1:33 pm
Ontem à(s) 12:33 pm
Ontem à(s) 9:54 am
Ontem à(s) 9:45 am
Ontem à(s) 9:02 am
Ontem à(s) 1:30 am
Ontem à(s) 12:13 am
Qua Abr 18, 2018 11:57 pm
Qua Abr 18, 2018 9:33 pm
Qua Abr 18, 2018 9:18 pm
Qua Abr 18, 2018 8:48 pm
Qua Abr 18, 2018 6:28 pm
Qua Abr 18, 2018 5:59 pm
Qua Abr 18, 2018 4:41 pm
Qua Abr 18, 2018 12:55 am
Ter Abr 17, 2018 11:05 pm
Ter Abr 17, 2018 11:01 pm
Ter Abr 17, 2018 11:00 pm
Ter Abr 17, 2018 10:53 pm
Ter Abr 17, 2018 6:35 pm
Ter Abr 17, 2018 5:22 pm
Ter Abr 17, 2018 4:07 pm
Ter Abr 17, 2018 1:28 am
Ter Abr 17, 2018 12:03 am
Seg Abr 16, 2018 9:36 pm
Seg Abr 16, 2018 9:33 pm
Seg Abr 16, 2018 9:31 pm
Seg Abr 16, 2018 4:19 pm
Seg Abr 16, 2018 3:40 pm
Seg Abr 16, 2018 3:09 pm
Seg Abr 16, 2018 1:01 pm
Seg Abr 16, 2018 4:07 am
Seg Abr 16, 2018 3:16 am
Dom Abr 15, 2018 11:28 am
Dom Abr 15, 2018 3:06 am
Sab Abr 14, 2018 7:29 pm
Sab Abr 14, 2018 5:52 pm
Sab Abr 14, 2018 4:23 pm
Sab Abr 14, 2018 2:23 pm
Sab Abr 14, 2018 2:10 pm
Sab Abr 14, 2018 12:56 pm
Sab Abr 14, 2018 1:20 am
Sab Abr 14, 2018 1:01 am
Sex Abr 13, 2018 11:12 pm
Sex Abr 13, 2018 10:22 pm
Sex Abr 13, 2018 7:50 pm
Sex Abr 13, 2018 6:12 pm
Sex Abr 13, 2018 4:30 pm
Sex Abr 13, 2018 3:59 pm
Sex Abr 13, 2018 3:20 pm
Sex Abr 13, 2018 3:16 pm
Sex Abr 13, 2018 3:02 pm
Sex Abr 13, 2018 1:14 am
Qui Abr 12, 2018 10:01 pm
Qui Abr 12, 2018 3:09 pm
Qui Abr 12, 2018 12:02 am
Qua Abr 11, 2018 7:26 pm
Qua Abr 11, 2018 5:00 pm
Qua Abr 11, 2018 2:33 am
Ter Abr 10, 2018 11:26 pm
Ter Abr 10, 2018 8:57 pm
Ter Abr 10, 2018 5:30 pm
Ter Abr 10, 2018 12:12 am
Seg Abr 09, 2018 11:37 pm
Seg Abr 09, 2018 8:36 pm
Dom Abr 08, 2018 8:38 pm
Dom Abr 08, 2018 7:53 pm
Dom Abr 08, 2018 6:51 am
Dom Abr 08, 2018 2:00 am
Sab Abr 07, 2018 11:39 pm
Sab Abr 07, 2018 10:28 pm
Sab Abr 07, 2018 8:27 pm
Sab Abr 07, 2018 3:05 am
Sex Abr 06, 2018 11:07 pm
Sex Abr 06, 2018 9:27 pm
Sex Abr 06, 2018 7:42 pm
Sex Abr 06, 2018 7:30 pm
Sex Abr 06, 2018 5:43 pm
Sex Abr 06, 2018 3:45 pm
Qui Abr 05, 2018 8:22 pm
Qui Abr 05, 2018 7:49 pm
Qui Abr 05, 2018 7:30 pm
Qui Abr 05, 2018 4:51 pm
Qui Abr 05, 2018 4:05 pm
Qui Abr 05, 2018 3:53 am
Qui Abr 05, 2018 3:23 am
Qui Abr 05, 2018 1:32 am
Qui Abr 05, 2018 12:01 am
Qua Abr 04, 2018 8:33 pm
Qua Abr 04, 2018 2:37 pm
dstaroski
dstaroski
Callyde Jr
Phph09
Phph09
Phph09
felipehobs1
dstaroski
dstaroski
dstaroski
Daniel Pires da Silva
Phph09
Phph09
Callyde Jr
luizmauro123
MarcosUAC
MarcosUAC
guimaraf
rafaelllsd
oilson
Yagogomes
Fluttershy28
hetrodo_gamer
Dom3000
MarcosSchultz
Dom3000
AmaralGabriel2
TioUV
dstaroski
Zack2
glauco
Daniel Pires da Silva
fabriciorsz34
Daniel Pires da Silva
Souris
Souris
fabriciorsz34
Cássio Ambelouer
Phph09
felipehobs1
Callyde Jr
MarcosSchultz
Phph09
Ronmaster
nando07
Souris
Callyde Jr
Dom3000
Dom3000
Mateus2583
MarcosSchultz
ffabim
Daniel Pires da Silva
Fluttershy28
YmKx
natanael.olimpio
Souris
dstaroski
Phph09
BRGC
Phph09
Callyde Jr
BRGC
Zack2
heliab125
ruanzikaad
Souris
gcs13
natanael.olimpio
Daniel Pires da Silva
dstaroski
srhuculak
MarcosSchultz
Callyde Jr
Patrick
Souris
PedroSilva
Souris
YmKx
Callyde Jr
Phph09
Callyde Jr
rafaelllsd
gcs13
360flip
brunopereira06
YmKx
360flip
Phph09
natanael.olimpio
antoniodeveloper
rZwr
ffabim
nuno micaelo
Callyde Jr
natanael.olimpio
Phph09
Phph09
endersoneneilsa

Ajustes na IA inimigo

Ir em baixo

PEDIDO Ajustes na IA inimigo

Mensagem por Gwiisk em Dom Jan 14, 2018 12:10 am

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*


Última edição por dstaroski em Qui Fev 08, 2018 10:03 am, editado 1 vez(es) (Razão : Alterado título conforme os padrões do fórum.)

Gwiisk
Membro
Membro

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajustes na IA inimigo

Mensagem por exodiamk em Dom Jan 14, 2018 2: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 : 111
REPUTAÇÃO : 0
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajustes na IA inimigo

Mensagem por Gwiisk em Dom Jan 14, 2018 2: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
Membro
Membro

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajustes na IA inimigo

Mensagem por exodiamk em Qua Fev 07, 2018 9:38 pm

mano se esse for seu script voce so colocou para velo coloque depois do Debug.Log ("Can see you");  a parte do codigo que ele ira perseguir o player
e no else coloque se ele vai anda radon ou patrulhar

exodiamk
Iniciante
Iniciante

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajustes na IA inimigo

Mensagem por dstaroski em Qui Fev 08, 2018 10:03 am

@Gwiisk escreveu:
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*
Bom dia! por gentileza não ponha ajuda e tal sem seus títulos. Seja objetivo no título do tópico, descrevendo em parte seu problema. O mesmo será alterado.

Abraço!
avatar
dstaroski
Instrutor

Masculino PONTOS : 3002
REPUTAÇÃO : 721
Idade : 28
Áreas de atuação : Téc. Hardware e Redes, Programação C#, Daz3D and Gimp

Respeito as regras :

Ver perfil do usuário https://www.daz3d.com/gallery/users/1575361

Voltar ao Topo Ir em baixo

PEDIDO Re: Ajustes na IA inimigo

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo


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