No meu projeto TimeHunt quando compilo o jogo os inimigos andam na animação de parado quando estão no estado de patrulha e quando estão no estado de perseguição a animação funciona corretamente mas na unity o projeto não compilado funciona normalmente, e a compilação não apresentou nenhum erro.
Aqui está funcionado tudo certo. Posta mais detalhes pra gente ver. Tá usando qual versão da Unity?
No jogo compilado, a animação de andar no estado de patrulha não funciona(continua na animação de parado) e quando ele passa para o estado de perseguição a animação de andar funciona.
Mas no projeto da unity a animação de andar funciona normalmente em todos os estados.
E quando ele está perseguindo o jogador, é tocada a animação de andar? Ou fica apenas na animação de parado e o inimigo se movendo?
Sim, a animação de andar é tocada quando o inimigo está no estado de perseguição, porém no estado de patrulha ela não é tocada. Mas esse problema acontece apenas no jogo já compilado.
Vou gravar um vídeo, postar no youtube e trazer o link aqui:
Preste atenção que quando iniciei no projeto da unity o esqueleto estava se movendo com a animação tocando normalmente, mas quando abri o jogo compilado o esqueleto estava se movendo na animação de parado, só trocou para a animação de andar quando foi para o estado de perseguição
Durante a execução, dentro do Editor, está aparecendo algum erro no Console?
O inimigo Minotauro também está com esse problema?
O editor não está apresentando nenhum erro. Todos os inimigos que andam estão com esse problema incluindo o minotauro.
Relembrando aqui esse problema só acontece no jogo compilado, na unity funciona normalmente.
Se puder, compacta sua pasta do projeto em ZIP e envia aqui (via google drive). Dessa forma, consigo testar e ver o que pode ser.
Certo, assim que eu fizer o upload no drive colocarei o link aqui:
Esses últimos dias estou focado no lançamento do novo módulo do curso e acabou não dando tempo de olhar para você. Mas até quinta feira dou uma olhada e te retorno.
Oi, eu agradeceria se pudesse dar uma olhada no meu projeto
Desculpa mesmo a demora para te responder. Consegui analisar seu projeto agora e identifiquei o erro. Vou te mostrar uma forma de como analisar seu jogo compilado.
1) Compile o game em Development Build e defina para conectar ao Profiler da Unity
2) Realize uma nova compilação
3) Abra seu jogo e reproduza o problema. Assim que o erro ocorrer, você pode fechá-lo.
Ao usar o autoconnect, o jogo vai se conectar com a Unity e gerar os relatórios de profile e console. Agora na Unity, vá em Console, clique nos 3 pontinhos na vertical e clique em Open Player Log conforma abaixo:
4) Analise o log
Nesse log vai mostrar detalhadamente quais os erros que aconteceram durante a execução do jogo.
No print acima podemos que está acontecendo um erro no script InimigoGenericoMovimento, linha 34. É um erro de referencia nula.
Conteúdo da linha 34:
public override void OnEnter()
{
animator.SetBool("Andar", true);
}
Se o erro é de referencia nula, só pode ser algo relacionado ao animator, ou seja, quando essa linha é chamada, a variável animator ainda não foi definida. Dessa forma, fui ver onde ela está definida, e é bem aqui:
void Start()
{
animator = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
posicaoInicial = transform.position;
player = GameObject.FindGameObjectWithTag("Player");
}
Ela está definida dentro do método de Start. Isso está causando o problema! O método de OnEnter está sendo chamado antes do método de Start acima, ocasionando o erro.
Uma forma simples de resolver isso é colocar o conteúdo acima dentro do método Awake (Que executa antes de Start), só trocar Start por Awake:
void Awake()
{
animator = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
posicaoInicial = transform.position;
player = GameObject.FindGameObjectWithTag("Player");
}