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:
[RESOLVIDO] Unity - Scrollbar não funciona
[TUTORIAL] AI que cria scripts para você, inclusive scripts para Unity !!!!
[RESOLVIDO] Animando Image na Unity não funciona
Aplicativo para IOS
Hospedar um jogo multiplay na itch.io
Unity -TextMeshProUGUI- 1 das coisas q estão deixando a scene lenta p abrir
Script para detetectar o movimento do player
Alguém ajuda com um erro por favor? PSDImporter.cs
[RESOLVIDO] - Unity - Rotação da Câmera - Mathf.Clamp não funciona
Alterar textura .unity3d
Comportamento do movimento do inimigo. Sair do caminho e Fugir
Procuro uma equipe
Ajuda Com Sala de Jogo Multiplayer
COMO FAZER A PORTA ABRIR SÓ EMPURRANDO ELA COM O PLAYER?
Visual Studio - Vend os Scripts na Aba "Modo de Exibição de Classe" soltos
app fica fechendo após mobile notification
[RESOLVIDO] Controlar dois player dentro de um jogo multiplay usando mirror
Unity - O Jogo fecha quando vai abrir a Scene
[TUTORIAL] Mudando material
Procuro programador Unity para jogo 2D
AJUDA REALISTIC CAR CONTROLLER
Chama para isqueiro
[RESOLVIDO] Ajuda para destruir objeto
Unity - Sistema de Giro da Tela - Ajuda pfv!
Unity - Touch na Tela do Celular
Dawn Of Hell - Horror Game BR (2022-2023)
Unity - Jogo online ou offline?
ANIMAÇÃO INIMIGO ESTÁ INDO PRA TUDO QUANTO É LADO
[RESOLVIDO] Erro de Script no Android
Bundle Assets, Resources, e Addressables
Jogo online (qual a melhor opção?)
Dúvida sobre como criar o inimigo IA!
Unity dando pause no jogo a cada 4 segundos
bom dia amigos eu sou meio lego nos scripts será que alguem pode me ajudar
JOGO "CHALLENGE" FINALIZADO E DISPONÍVEL PARA BAIXAR.
error CS0246
[TUTORIAL]Como Chamar Um Método Usando Uma String como Parametro
[TUTORIAL] Sistema de FPS com Corpo
NullReferenceException: Object reference not set to an instance
dúvida ao criar subscription no play console
Unity - Scene Demorando pra abrir
Erro Slider de Cor
Alguem sabe que tipo de antena é essa ?
Encontrando um ponto de colisão.
Preciso de vocess! Coisinha simples mais me embananei. Meu primeiro game.
[TUTORIAL] Como carregar uma cena em segundo plano?
push notification com firebase falha
PROCURO UMA EQUIPE - Pagamento VIA PIX
Testem Meu Novo Jogo WEBGL ANDROIDD
ajuste de tela automático de celular
como fazer um chat interativo offline?
Música grátis para Jogos Indies [Calma, Relaxante, Flauta e outras coisas]
PROCURO PROGRAMADOR EXPERIENTE PHOTON
problema com canvas ui button
Banco de dados em Unity v2021.3.4f1
Sistema de Yu-Gi-Oh! - LINK PARA DOWNLOAD 2023
Int de dinheiro fica com numeros negativos em vez de travar no "0"
UNITY - FORMAÇÃO DE EQUIPE
[TUTORIAL] Open World Project - Para Unity-
Tutorial + Kit Para Criar seu Game Multiplayer em 5 Minutos
Como fazer movimentação no estilo tunnel Rush
[RESOLVIDO] Ajuste de tela
Debugar erro ao fechar build do projeto
[RESOLVIDO] Como Suavizar transição de uma Animação pra outra
[RESOLVIDO] Fixar tamanho/resolução proporcional da janela da aplicação
Como faço pra chamar a funçao de um script em outro ?
[RESOLVIDO] Alterar variaveis de classes instanciadas no inspector
como fazer o objeto spawnar com uma cor aleatória dentre as que eu quero?
Blender-Cell Fracture - Juntar as Animações de Todos os Fragmentos em 1 só
Oque acham dessa pequena música?
Unity - Faz mal ou tem algum problema se usar mts Layers?
Drag and drop em um rect específico da UI
Inimigo mudar de animação
[RESOLVIDO] Texto aparecer tipo donkey kong
De 0 a 10, qual a chance de isso causar problemas legais ao vender o jogo?
Teaser do meu novo projeto, War land
SCRIPT QUE SALVA A CENA INTEIRA.
datebest.net - visit link to find love or quick sex !
[RESOLVIDO] Dropdown Salvar a Resolução da tela
[RESOLVIDO] Visual Studio - Como saber onde um método está sendo usado
Teste Chat Openai
Como alterar um GameObject dentro de uma array
Baixos Brasil - Jogo de Carro Brasileiro!
Erro il2cpp unity 2022
[RESOLVIDO] "Is Trigger" não funcionando
FORMAÇÃO DE EQUIPE UNITY 3D
Equipamento para usar no Cinemachine
[RESOLVIDO] Destruir objetos com o mesmo id
Salvar seleção do Toggle
Fiz uma música orquestral para uma batalha final contra um Boss
Como você foi Hackeado DENOVO!!!???
PROCURO UMA EQUIPE - Pagamento VIA Pix
PROCURO PROGRAMADOR EXPERIENTE EM MIRROR
Visual Studio - Como abrir um Script com determinada configuração?
Mover objeto no eixo y
EXPORTAR CENA EM FORMATO DE VIDEO?
LANÇAMENTO JOGO DE CARRO E MOTO PARA ANDROID
Como fazer um sistema para trocar musica da cena com DROPDOWN?
SOU MODELADOR
Qui Mar 23, 2023 4:52 pm
Ter Mar 21, 2023 11:20 pm
Ter Mar 21, 2023 8:52 pm
Ter Mar 21, 2023 4:00 pm
Sáb Mar 18, 2023 8:41 pm
Sáb Mar 18, 2023 4:35 pm
Sex Mar 17, 2023 3:12 pm
Sex Mar 17, 2023 1:24 pm
Seg Mar 13, 2023 10:45 pm
Seg Mar 13, 2023 9:48 pm
Seg Mar 13, 2023 8:24 pm
Seg Mar 13, 2023 7:17 pm
Dom Mar 12, 2023 10:27 pm
Dom Mar 12, 2023 7:22 pm
Sex Mar 10, 2023 8:26 pm
Sex Mar 10, 2023 8:00 pm
Qui Mar 09, 2023 9:05 am
Ter Mar 07, 2023 2:27 pm
Sex Mar 03, 2023 6:47 pm
Sex Mar 03, 2023 12:01 am
Qui Mar 02, 2023 4:00 pm
Qui Mar 02, 2023 1:35 pm
Qua Mar 01, 2023 5:47 pm
Qua Mar 01, 2023 2:11 am
Seg Fev 27, 2023 11:08 pm
Seg Fev 27, 2023 7:19 pm
Dom Fev 26, 2023 11:49 pm
Dom Fev 26, 2023 8:29 pm
Dom Fev 26, 2023 7:47 pm
Dom Fev 26, 2023 7:46 pm
Dom Fev 26, 2023 6:08 pm
Sáb Fev 25, 2023 8:16 pm
Seg Fev 13, 2023 7:02 pm
Seg Fev 13, 2023 2:44 am
Dom Fev 12, 2023 9:57 pm
Dom Fev 12, 2023 2:19 pm
Sáb Fev 11, 2023 1:01 pm
Sex Fev 10, 2023 11:14 pm
Sex Fev 10, 2023 8:18 pm
Sex Fev 10, 2023 7:46 pm
Qui Fev 09, 2023 11:29 pm
Qui Fev 09, 2023 11:01 pm
Qui Fev 09, 2023 5:42 pm
Qua Fev 08, 2023 2:20 pm
Ter Fev 07, 2023 11:47 pm
Seg Fev 06, 2023 8:24 pm
Seg Fev 06, 2023 5:40 pm
Dom Fev 05, 2023 12:53 am
Sáb Fev 04, 2023 3:42 pm
Sáb Fev 04, 2023 2:29 pm
Sáb Fev 04, 2023 12:07 am
Sex Fev 03, 2023 10:53 pm
Sex Fev 03, 2023 10:28 pm
Qui Fev 02, 2023 7:52 pm
Qui Fev 02, 2023 8:49 am
Qua Fev 01, 2023 5:56 pm
Ter Jan 31, 2023 1:00 am
Dom Jan 29, 2023 11:12 pm
Sáb Jan 28, 2023 6:50 pm
Sex Jan 27, 2023 8:52 pm
Sex Jan 27, 2023 4:53 am
Qui Jan 26, 2023 10:56 pm
Dom Jan 22, 2023 11:53 am
Dom Jan 22, 2023 3:33 am
Sáb Jan 21, 2023 3:27 pm
Sáb Jan 21, 2023 2:15 pm
Sex Jan 20, 2023 4:30 pm
Sex Jan 20, 2023 2:15 pm
Qua Jan 18, 2023 10:19 pm
Qua Jan 18, 2023 9:47 am
Ter Jan 17, 2023 10:52 pm
Ter Jan 17, 2023 4:08 pm
Ter Jan 17, 2023 2:45 pm
Seg Jan 16, 2023 7:20 pm
Seg Jan 16, 2023 12:18 pm
Dom Jan 15, 2023 3:02 pm
Sáb Jan 14, 2023 7:02 pm
Sex Jan 13, 2023 8:29 am
Qui Jan 12, 2023 5:15 am
Qui Jan 12, 2023 2:31 am
Qua Jan 11, 2023 1:33 pm
Ter Jan 10, 2023 11:55 am
Ter Jan 10, 2023 10:58 am
Ter Jan 10, 2023 3:04 am
Seg Jan 09, 2023 10:43 pm
Seg Jan 09, 2023 6:30 am
Seg Jan 09, 2023 3:18 am
Seg Jan 09, 2023 2:32 am
Sáb Jan 07, 2023 5:55 pm
Sáb Jan 07, 2023 4:01 pm
Sáb Jan 07, 2023 1:38 pm
Sex Jan 06, 2023 9:15 am
Sex Jan 06, 2023 6:33 am
Qui Jan 05, 2023 5:27 pm
Qui Jan 05, 2023 2:50 pm
Qua Jan 04, 2023 3:07 pm
Qua Jan 04, 2023 9:19 am
Sáb Dez 31, 2022 4:38 pm
Sáb Dez 31, 2022 3:18 am



































































































NullReferenceException: Object reference not set to an instance

4 participantes

Ir para baixo

DÚVIDA NullReferenceException: Object reference not set to an instance

Mensagem por gamedevretro Qui Fev 09, 2023 10:26 am

preciso de ajuda. Estava criando a AI no unity, e simplesmente não funciona nenhuma das animações, e o AI fica dentro do chão (andando)
e diz, que tem um objecto de referencia não setado, mas eu não sei qual, me ajudem.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy1 : MonoBehaviour
{
    public int rutina;
    public float cronometro;
    public Animator ani;
    public Quaternion angulo;
    public float grado;


    // Start is called before the first frame update
    void Start()
    {
        ani = GetComponent<Animator>();    
    }

    // Update is called once per frame
    public void Comportamiento_Enemy()
    {
        cronometro += 1 * Time.deltaTime;
        if (cronometro >= 4)
        {
            rutina = Random.Range(0, 2);
            cronometro = 0;
        }
        switch (rutina)
        {
            case 0:
                ani.SetBool("walk", false);
                break;
            case 1:
                grado = Random.Range(0, 360);
                angulo = Quaternion.Euler(0, grado, 0);
                rutina++;
                break;

            case 2:
                transform.rotation = Quaternion.RotateTowards(transform.rotation, angulo, 0.5f);
                transform.Translate(Vector3.forward * 1 * Time.deltaTime);
                ani.SetBool("walk", true);
                break;
        }
    }

    void Update()
    {
        Comportamiento_Enemy();
    }
}

gamedevretro
Iniciante
Iniciante

PONTOS : 52
REPUTAÇÃO : 0
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por MadCow Qui Fev 09, 2023 12:37 pm

Olá amigo eu tenho uma AI simples para inimigos que funciona bem, é boa para inimigos tipo corpo a corpo, mais vc pode adicionar projetos sem problemas.

Fiz um pequeno vídeo de como utilizar o script ok, sempre verifica se vc esta usando Humanoides e se os parâmetros do Animator estão corretos e a conexão com as animações.

Este Script possui alguns Eventos para vc complementar com outros scripts ou dar mais vida ao Inimigo como Sons, Efeitos, etc.

Código:
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Events;

public class InimigoAI : MonoBehaviour
{

    public NavMeshAgent agent;

    [SerializeField] string PlayerTag = "Player";
    Transform player;

    public LayerMask whatIsGround, whatIsPlayer;

    [SerializeField] float vidaInimigo;

    //Patrulhamento
    public Vector3 walkPoint;
    bool walkPointSet;
    [SerializeField] float pontoCaminhada;

    //Atacante
    [SerializeField] float tempoEntreAtaques;
    bool PlayerAtacado;

    //Estados
    public float gamaVisao, raioAtaque;
    public bool playerNaVisao, playerNoAlcanceAtaque;

    public Animator anim;

    public UnityEvent EventoInicio;
    public UnityEvent EventoAtaque;
    public UnityEvent EventoPatrulhamento;
    public UnityEvent EventoBuscaPlayer;
    public UnityEvent EventoMorte;

    private void Start()
    {
        if (EventoInicio == null)
            EventoInicio = new UnityEvent();

        if (EventoAtaque == null)
            EventoAtaque = new UnityEvent();

        if (EventoPatrulhamento == null)
            EventoPatrulhamento = new UnityEvent();

        if (EventoBuscaPlayer == null)
            EventoBuscaPlayer = new UnityEvent();

        if (EventoMorte == null)
            EventoMorte = new UnityEvent();

        player = GameObject.FindWithTag(PlayerTag).transform;
        anim.SetBool("Idle", true);
    }

    private void Awake()
    {
        player = GameObject.FindWithTag(PlayerTag).transform;
        agent = GetComponent<NavMeshAgent>();
        EventoInicio.Invoke();
    }

    private void Update()
    {

        playerNaVisao = Physics.CheckSphere(transform.position, gamaVisao, whatIsPlayer);
        playerNoAlcanceAtaque = Physics.CheckSphere(transform.position, raioAtaque, whatIsPlayer);

        if (!playerNaVisao && !playerNoAlcanceAtaque) Patrulhamento();
        if (playerNaVisao && !playerNoAlcanceAtaque) BuscandoPlayer();
        if (playerNoAlcanceAtaque && playerNaVisao) AttackPlayer();
    }

    private void Patrulhamento()
    {
        if (!walkPointSet) GerarPontoCaminho();

        if (walkPointSet)
            agent.SetDestination(walkPoint);

        Vector3 distanceToWalkPoint = transform.position - walkPoint;
        EventoPatrulhamento.Invoke();

        if (distanceToWalkPoint.magnitude < 1f)
            walkPointSet = false;
    }

    private void GerarPontoCaminho()
    {

        float randomZ = Random.Range(-pontoCaminhada, pontoCaminhada);
        float randomX = Random.Range(-pontoCaminhada, pontoCaminhada);

        walkPoint = new Vector3(transform.position.x + randomX, transform.position.y, transform.position.z + randomZ);
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", true);

        if (Physics.Raycast(walkPoint, -transform.up, 2f, whatIsGround))
            walkPointSet = true;
    }

    private void BuscandoPlayer()
    {
        agent.SetDestination(player.position);
        EventoBuscaPlayer.Invoke();
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", true);
    }

    private void AttackPlayer()
    {

        agent.SetDestination(transform.position);
        anim.SetBool("Idle", false);
        transform.LookAt(player);

        if (!PlayerAtacado)
        {
            ///CODIGO DO ATAQUE
            anim.SetBool("Walk", false);
            anim.SetBool("Attack", true);
            EventoAtaque.Invoke();

            PlayerAtacado = true;
            Invoke(nameof(ResetAtque), tempoEntreAtaques);
        } else
        {
            anim.SetBool("Walk", true);
        }
    }

    private void ResetAtque()
    {
        PlayerAtacado = false;
    }

    public void DanoNoInimigo(int damage)
    {
        vidaInimigo -= damage;
        anim.SetBool("Hit", true);
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", false);
        if (vidaInimigo <= 0) Invoke(nameof(InimigoMorreu), 0.5f);
    }
    private void InimigoMorreu()
    {
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Death", true);
        EventoMorte.Invoke();
    }


    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, raioAtaque);
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, gamaVisao);
    }

}

MadCow
MadCow
Iniciante
Iniciante

Masculino PONTOS : 1609
REPUTAÇÃO : 7
Idade : 36
Áreas de atuação : Sou programador a 20 Anos e a 8 anos trabalho com desenvolvimento de Jogos utilizando Unity
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

https://gbxgamers.com

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por gamedevretro Qui Fev 09, 2023 4:33 pm

MadCow escreveu:Olá amigo eu tenho uma AI simples para inimigos que funciona bem, é boa para inimigos tipo corpo a corpo, mais vc pode adicionar projetos sem problemas.

Fiz um pequeno vídeo de como utilizar o script ok, sempre verifica se vc esta usando Humanoides e se os parâmetros do Animator estão corretos e a conexão com as animações.

Este Script possui alguns Eventos para vc complementar com outros scripts ou dar mais vida ao Inimigo como Sons, Efeitos, etc.

Código:
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Events;

public class InimigoAI : MonoBehaviour
{

    public NavMeshAgent agent;

    [SerializeField] string PlayerTag = "Player";
    Transform player;

    public LayerMask whatIsGround, whatIsPlayer;

    [SerializeField] float vidaInimigo;

    //Patrulhamento
    public Vector3 walkPoint;
    bool walkPointSet;
    [SerializeField] float pontoCaminhada;

    //Atacante
    [SerializeField] float tempoEntreAtaques;
    bool PlayerAtacado;

    //Estados
    public float gamaVisao, raioAtaque;
    public bool playerNaVisao, playerNoAlcanceAtaque;

    public Animator anim;

    public UnityEvent EventoInicio;
    public UnityEvent EventoAtaque;
    public UnityEvent EventoPatrulhamento;
    public UnityEvent EventoBuscaPlayer;
    public UnityEvent EventoMorte;

    private void Start()
    {
        if (EventoInicio == null)
            EventoInicio = new UnityEvent();

        if (EventoAtaque == null)
            EventoAtaque = new UnityEvent();

        if (EventoPatrulhamento == null)
            EventoPatrulhamento = new UnityEvent();

        if (EventoBuscaPlayer == null)
            EventoBuscaPlayer = new UnityEvent();

        if (EventoMorte == null)
            EventoMorte = new UnityEvent();

        player = GameObject.FindWithTag(PlayerTag).transform;
        anim.SetBool("Idle", true);
    }

    private void Awake()
    {
        player = GameObject.FindWithTag(PlayerTag).transform;
        agent = GetComponent<NavMeshAgent>();
        EventoInicio.Invoke();
    }

    private void Update()
    {

        playerNaVisao = Physics.CheckSphere(transform.position, gamaVisao, whatIsPlayer);
        playerNoAlcanceAtaque = Physics.CheckSphere(transform.position, raioAtaque, whatIsPlayer);

        if (!playerNaVisao && !playerNoAlcanceAtaque) Patrulhamento();
        if (playerNaVisao && !playerNoAlcanceAtaque) BuscandoPlayer();
        if (playerNoAlcanceAtaque && playerNaVisao) AttackPlayer();
    }

    private void Patrulhamento()
    {
        if (!walkPointSet) GerarPontoCaminho();

        if (walkPointSet)
            agent.SetDestination(walkPoint);

        Vector3 distanceToWalkPoint = transform.position - walkPoint;
        EventoPatrulhamento.Invoke();

        if (distanceToWalkPoint.magnitude < 1f)
            walkPointSet = false;
    }

    private void GerarPontoCaminho()
    {

        float randomZ = Random.Range(-pontoCaminhada, pontoCaminhada);
        float randomX = Random.Range(-pontoCaminhada, pontoCaminhada);

        walkPoint = new Vector3(transform.position.x + randomX, transform.position.y, transform.position.z + randomZ);
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", true);

        if (Physics.Raycast(walkPoint, -transform.up, 2f, whatIsGround))
            walkPointSet = true;
    }

    private void BuscandoPlayer()
    {
        agent.SetDestination(player.position);
        EventoBuscaPlayer.Invoke();
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", true);
    }

    private void AttackPlayer()
    {

        agent.SetDestination(transform.position);
        anim.SetBool("Idle", false);
        transform.LookAt(player);

        if (!PlayerAtacado)
        {
            ///CODIGO DO ATAQUE
            anim.SetBool("Walk", false);
            anim.SetBool("Attack", true);
            EventoAtaque.Invoke();

            PlayerAtacado = true;
            Invoke(nameof(ResetAtque), tempoEntreAtaques);
        } else
        {
            anim.SetBool("Walk", true);
        }
    }

    private void ResetAtque()
    {
        PlayerAtacado = false;
    }

    public void DanoNoInimigo(int damage)
    {
        vidaInimigo -= damage;
        anim.SetBool("Hit", true);
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", false);
        if (vidaInimigo <= 0) Invoke(nameof(InimigoMorreu), 0.5f);
    }
    private void InimigoMorreu()
    {
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Death", true);
        EventoMorte.Invoke();
    }


    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, raioAtaque);
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, gamaVisao);
    }

}

obrigado amigo, eu vou testar aqui, qualquer coisa eu lhe informo. Vou seguir o video de exemplo.

gamedevretro
Iniciante
Iniciante

PONTOS : 52
REPUTAÇÃO : 0
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por gamedevretro Qui Fev 09, 2023 5:31 pm

Funcionou!!! As animações funcionaram.
Mas... a animação "Idle" não funciona, ela não inicia, e nem volta após um ataque, e a animação "walk" também. Ah, e AI entra no chão quando o player emburra ele...

Erro: Parameter 'Idle' does not exist.
UnityEngine.Animator:SetBool (string,bool)
InimigoAI:AttackPlayer () (at Assets/Scripts/InimigoAI.cs:121)
InimigoAI:Update () (at Assets/Scripts/InimigoAI.cs:76)

gamedevretro
Iniciante
Iniciante

PONTOS : 52
REPUTAÇÃO : 0
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por BlesseD Qui Fev 09, 2023 7:30 pm

gamedevretro escreveu:Funcionou!!! As animações funcionaram.
Mas... a animação "Idle" não funciona, ela não inicia, e nem volta após um ataque, e a animação "walk" também. Ah, e AI entra no chão quando o player emburra ele...

Erro: Parameter 'Idle' does not exist.
UnityEngine.Animator:SetBool (string,bool)
InimigoAI:AttackPlayer () (at Assets/Scripts/InimigoAI.cs:121)
InimigoAI:Update () (at Assets/Scripts/InimigoAI.cs:76)
É preciso adicionar um parâmetro do tipo Bool com o nome "Idle" no seu animator para a animação funcionar.
BlesseD
BlesseD
Desenvolvedor

Masculino PONTOS : 1465
REPUTAÇÃO : 28
Idade : 23
Áreas de atuação : 》Unity3D
》Criador de Games Independentes
》C# [Intermediário] / Designer Gráfico
》Jogos de Terror
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

https://store.steampowered.com/search/?developer=Samuka%20Gomes

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por gamedevretro Qui Fev 09, 2023 8:31 pm

BlesseD escreveu:
gamedevretro escreveu:Funcionou!!! As animações funcionaram.
Mas... a animação "Idle" não funciona, ela não inicia, e nem volta após um ataque, e a animação "walk" também. Ah, e AI entra no chão quando o player emburra ele...

Erro: Parameter 'Idle' does not exist.
UnityEngine.Animator:SetBool (string,bool)
InimigoAI:AttackPlayer () (at Assets/Scripts/InimigoAI.cs:121)
InimigoAI:Update () (at Assets/Scripts/InimigoAI.cs:76)
É preciso adicionar um parâmetro do tipo Bool com o nome "Idle" no seu animator para a animação funcionar.
eu coloquei, mas não funcionou, foi a primeira coisa que fiz.

gamedevretro
Iniciante
Iniciante

PONTOS : 52
REPUTAÇÃO : 0
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por MadCow Qui Fev 09, 2023 9:37 pm

Olá verifica os parâmetros das animações são 5 Bool, Idle, Attack, Walk, Hit, Death

Para modificar o erro do Inimigo entrar no chão basta remover o transform.LookAt(player); em AttackPlayer() e por um Quaternion.

Código Atualizado;

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

[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(NavMeshAgent))]
public class InimigoAI : MonoBehaviour
{

    public NavMeshAgent agent;
    public Animator anim;

    [SerializeField] string PlayerTag = "Player";
    Transform player;

    [Header("Layers do Piso")]
    public LayerMask whatIsGround;
    [Header("Layers do Player")]
    public LayerMask whatIsPlayer;

    [Space]
    [SerializeField] float vidaInimigo;
    [SerializeField] float velocidadeRotar;
    [SerializeField] float pontoCaminhada;
    [SerializeField] float tempoEntreAtaques;

    [Range(0.2f, 1f)]
    [SerializeField] float VolumeAudio = 0.7f;

    bool PlayerAtacado;
    //Patrulhamento
    [Space]
    public Vector3 walkPoint;
    bool walkPointSet;
    

    //Estados
    public float gamaVisao, raioAtaque;
    public bool playerNaVisao, playerNoAlcanceAtaque;

    [Space]
    [Header("Eventos")]
    public UnityEvent EventoInicio;
    public UnityEvent EventoAtaque;
    public UnityEvent EventoPatrulhamento;
    public UnityEvent EventoBuscaPlayer;
    public UnityEvent EventoMorte;

    //ADICIONAR
    private Quaternion _lookVisaoRotate;
    private Vector3 _direcao;
    private AudioSource audioSource;

    AnimatorClipInfo[] m_CurrentClipInfo;

    private void Start()
    {
        if (EventoInicio == null)
            EventoInicio = new UnityEvent();

        if (EventoAtaque == null)
            EventoAtaque = new UnityEvent();

        if (EventoPatrulhamento == null)
            EventoPatrulhamento = new UnityEvent();

        if (EventoBuscaPlayer == null)
            EventoBuscaPlayer = new UnityEvent();

        if (EventoMorte == null)
            EventoMorte = new UnityEvent();

        player = GameObject.FindWithTag(PlayerTag).transform;
        anim.SetBool("Idle", true);

    }

    private void Awake()
    {
        player = GameObject.FindWithTag(PlayerTag).transform;
        agent = GetComponent<NavMeshAgent>();
        EventoInicio.Invoke();
    }

    private void Update()
    {

        playerNaVisao = Physics.CheckSphere(transform.position, gamaVisao, whatIsPlayer);
        playerNoAlcanceAtaque = Physics.CheckSphere(transform.position, raioAtaque, whatIsPlayer);

        if (!playerNaVisao && !playerNoAlcanceAtaque) Patrulhamento();
        if (playerNaVisao && !playerNoAlcanceAtaque) BuscandoPlayer();
        if (playerNoAlcanceAtaque && playerNaVisao) AttackPlayer();
    }

    
    private void Patrulhamento()
    {
        if (!walkPointSet) GerarPontoCaminho();

        if (walkPointSet)
            agent.SetDestination(walkPoint);

        Vector3 distanceToWalkPoint = transform.position - walkPoint;
        EventoPatrulhamento.Invoke();

        if (distanceToWalkPoint.magnitude < 1f)
            walkPointSet = false;
    }

    private void GerarPontoCaminho()
    {

        float randomZ = Random.Range(-pontoCaminhada, pontoCaminhada);
        float randomX = Random.Range(-pontoCaminhada, pontoCaminhada);

        walkPoint = new Vector3(transform.position.x + randomX, transform.position.y, transform.position.z + randomZ);
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", true);

        if (Physics.Raycast(walkPoint, -transform.up, 2f, whatIsGround))
            walkPointSet = true;
    }

    private void BuscandoPlayer()
    {
        agent.SetDestination(player.position);
        EventoBuscaPlayer.Invoke();
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", true);
    }

    
    private void AttackPlayer()
    {

        agent.SetDestination(transform.position);
        anim.SetBool("Idle", false);
        //transform.LookAt(player); // COMENTAR

        //ADICIONAR
        _direcao = (player.position - transform.position).normalized;
        _lookVisaoRotate = Quaternion.LookRotation(_direcao);
        transform.rotation = Quaternion.Slerp(transform.rotation, _lookVisaoRotate, Time.deltaTime * velocidadeRotar);
        //FIM ADICIONAR

        if (!PlayerAtacado)
        {
            ///CODIGO DO ATAQUE
            anim.SetBool("Walk", false);
            anim.SetBool("Attack", true);
            EventoAtaque.Invoke();
            PlayerAtacado = true;
            Invoke(nameof(ResetAtque), tempoEntreAtaques);
        } else
        {
            anim.SetBool("Walk", true);
        }
    }



    private void ResetAtque()
    {
        PlayerAtacado = false;
    }

    public void DanoNoInimigo(int damage)
    {
        vidaInimigo -= damage;
        anim.SetBool("Hit", true);
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Walk", false);
        if (vidaInimigo <= 0) Invoke(nameof(InimigoMorreu), 0.5f);
    }
    private void InimigoMorreu()
    {
        anim.SetBool("Attack", false);
        anim.SetBool("Idle", false);
        anim.SetBool("Death", true);
        EventoMorte.Invoke();
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, raioAtaque);
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, gamaVisao);
    }

}
MadCow
MadCow
Iniciante
Iniciante

Masculino PONTOS : 1609
REPUTAÇÃO : 7
Idade : 36
Áreas de atuação : Sou programador a 20 Anos e a 8 anos trabalho com desenvolvimento de Jogos utilizando Unity
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

https://gbxgamers.com

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por gamedevretro Sex Fev 10, 2023 11:22 am

funcionou! muito obrigado, nem sei como agradecer.

gamedevretro
Iniciante
Iniciante

PONTOS : 52
REPUTAÇÃO : 0
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por DarknessShark Sex Fev 10, 2023 11:28 am

eu testei, e funciona, mas, no meu ele não anda, tipo. Ele simplesmente só se desloca, mas não efetua a animação de "Walk" e, também o "Idle" não efetua, ele não começa com o "idle" e não troca após atacar ou quando para.
Eu já verifiquei os bool, e os nomes das animação, e o ataque funciona certinho. É só esses dois que não funcionam bem...
DarknessShark
DarknessShark
Iniciante
Iniciante

Masculino PONTOS : 488
REPUTAÇÃO : 5
Idade : 16
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por MadCow Sex Fev 10, 2023 8:17 pm

DarknessShark escreveu:eu testei, e funciona, mas, no meu ele não anda, tipo. Ele simplesmente só se desloca, mas não efetua a animação de "Walk" e, também o "Idle" não efetua, ele não começa com o "idle" e não troca após atacar ou quando para.
Eu já verifiquei os bool, e os nomes das animação, e o ataque funciona certinho. É só esses dois que não funcionam bem...

Olá suas animações Walk e Idle estão marcadas como Loop ?
MadCow
MadCow
Iniciante
Iniciante

Masculino PONTOS : 1609
REPUTAÇÃO : 7
Idade : 36
Áreas de atuação : Sou programador a 20 Anos e a 8 anos trabalho com desenvolvimento de Jogos utilizando Unity
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

https://gbxgamers.com

Ir para o topo Ir para baixo

DÚVIDA Re: NullReferenceException: Object reference not set to an instance

Mensagem por MadCow Sex Fev 10, 2023 8:18 pm

gamedevretro escreveu:funcionou! muito obrigado, nem sei como agradecer.

Por nada, se precisar de ajuda so chamar
MadCow
MadCow
Iniciante
Iniciante

Masculino PONTOS : 1609
REPUTAÇÃO : 7
Idade : 36
Áreas de atuação : Sou programador a 20 Anos e a 8 anos trabalho com desenvolvimento de Jogos utilizando Unity
Respeito as regras : NullReferenceException: Object reference not set to an instance WvDYdlf

https://gbxgamers.com

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos