NavMesh não consegue reproduzir sprits de um jogador
3 participantes
Página 1 de 1
NavMesh não consegue reproduzir sprits de um jogador
Criei uma IA com o NavMesh 2D que faz a IA controlar um personagem secundário, o problema é: o NavMesh não reproduz os sprits direito, embora o jogador esteja indo para a direita, a animação do personagem secundário fica olhando para cima enquanto me segue, tem alguma forma de arrumar isso?
esse é o script da IA pra seguir o personagem:
esse é o script da IA pra seguir o personagem:
- Código:
using UnityEngine;
using UnityEngine.AI;
public class ControleIA : MonoBehaviour
{
private NavMeshAgent controleIA;
public float distanciaMinima = 1.5f;
public Transform target;
public Animator animator;
bool estaAndando;
float input_x;
float input_y;
private void Start()
{
controleIA = GetComponent<NavMeshAgent>();
}
private void Update()
{
Vector3 direcao = (transform.position - target.position).normalized * 1.5f;
animator.SetBool("isWalking", estaAndando);
input_x = target.position.x;
input_y = target.position.y;
animator.SetFloat("input_x", input_x);
animator.SetFloat("input_y", input_y);
if (Vector3.Distance(transform.position, target.position) > distanciaMinima)
{
controleIA.SetDestination(target.position + direcao);
estaAndando = true;
}
else
{
estaAndando = false;
}
}
}
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
Bem, é apenas uma sugestão de revisão dos títulos
Notei que vc anda culpando bastante o NavMesh, por coisas relacionadas a Animação.
O NavMesh é um recurso do unity relacionado a movimentação de um GameObject no Cenário (ele tambem ajuda a definir as zonas em que os NavMesh Agents podem e não andar), ele não tem nenhuma relação com animação.
Existem 3 Componentes, que podem ser atribuitos a um GameObject relacionado ao NavMesh: Agent, Obstacle e +1 que não lembro o nome.
O Animator é um Componente a parte, que não possui nenhuma Relação com o NavMesh.
E Quanto ao seu problema
Eu começaria verificando as condições de transição das Animações no seu Animator Controller...
Notei que vc anda culpando bastante o NavMesh, por coisas relacionadas a Animação.
O NavMesh é um recurso do unity relacionado a movimentação de um GameObject no Cenário (ele tambem ajuda a definir as zonas em que os NavMesh Agents podem e não andar), ele não tem nenhuma relação com animação.
Existem 3 Componentes, que podem ser atribuitos a um GameObject relacionado ao NavMesh: Agent, Obstacle e +1 que não lembro o nome.
O Animator é um Componente a parte, que não possui nenhuma Relação com o NavMesh.
E Quanto ao seu problema
Eu começaria verificando as condições de transição das Animações no seu Animator Controller...
Re: NavMesh não consegue reproduzir sprits de um jogador
Sobre o NavMesh estar relacionado com a animação, é exatamente por isso que eu estou tendo uma dor de cabeça grande. O NavMesh movimenta o personagem, mas ignora a animação, essa é justamente a raiz do meu problema, eu não consigo fazer as 2 coisas trabalharem juntas, e eu não sei criar outra IA que não seja na base do NavMeshdutrabr100 escreveu:Bem, é apenas uma sugestão de revisão dos títulos
Notei que vc anda culpando bastante o NavMesh, por coisas relacionadas a Animação.
O NavMesh é um recurso do unity relacionado a movimentação de um GameObject no Cenário (ele tambem ajuda a definir as zonas em que os NavMesh Agents podem e não andar), ele não tem nenhuma relação com animação.
Existem 3 Componentes, que podem ser atribuitos a um GameObject relacionado ao NavMesh: Agent, Obstacle e +1 que não lembro o nome.
O Animator é um Componente a parte, que não possui nenhuma Relação com o NavMesh.
E Quanto ao seu problema
Eu começaria verificando as condições de transição das Animações no seu Animator Controller...
E, sobre a dica das condições do animator controller, saberia me dar algum exemplo de condição de transição? Tipo, criar uma nova variável no Animator ou coisa parecida? Eu realmente sou iniciante no Unity, então tem muita coisa que eu não sei mexer, mas agradeço pela dica das condições do animator controller, ter uma ideia de onde possa estar o problema já é uma grande ajuda, obrigado mesmo.
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
Se(essas duas variáveis, são passadas para o animator para cuidar das animações Andar para Esquerda/Direita):
Então:
O problema provavelmente está ai, ela não indica uma direção, é basicamente a posição do alvo, por ser um jogo 2D, acho que daria para usar a variação da posição do Alvo e do Mob
tipo a imagem acima é o mundo e suas posições, horizontal é X e vertical Y.
Senão(Só se meu "Se()" estiver Errado...):
To com umas duvidas aqui, por que você ta passando essas duas vars para o animator ?
quantas animações tem ai, e quais as condições de transição de cada uma delas ?
- Código:
input_x = target.position.x;
input_y = target.position.y;
//linha 25 e 26
Então:
O problema provavelmente está ai, ela não indica uma direção, é basicamente a posição do alvo, por ser um jogo 2D, acho que daria para usar a variação da posição do Alvo e do Mob
tipo a imagem acima é o mundo e suas posições, horizontal é X e vertical Y.
- Explicação detalhada :
se o alvo tiver 0, 0(x, y) e o mob (1,0) então a variação vai ser posMob - posAlvo = 1, 0.
se o alvo tiver 3, 0(x, y) e o mob (1,0) então a variação vai ser posMob - posAlvo = -2, 0.
se o alvo tiver -3, 0(x, y) e o mob (1,0) então a variação vai ser posMob - posAlvo = 4, 0.
notou tu pode pegar qualquer ponto, a variação ser negativa ou positiva iria indicar a direção do alvo em relação ao mob
no caso, se variacao.x > 0 entao a direção é <=
se for variacao.x < 0 entao é =>
(e tu vai ter que mudar as condições de transição das animações esquerda e direita)
(mas dependendo do seu cenário, pode dar erros em algum lugar, tipo a mob indo para um lado e a animação para o outro então é melhor tu ver a outra possibilidade)
- outra possibilidade - melhor que a primeira:
tu poderia usar uma variação de posição
basicamente tu guarda a posição anterior calcula a variação com a nova posição- Código:
variação = posAntiga - posNova;
(e tu vai ter que mudar as condições de transição das animações esquerda e direita)
(também dá pra tu deixar esse bool de lado já que se variação = (0,0) = parado)
no caso, se variacao.x > 0 entao a direção é <=
se for variacao.x < 0 entao é =>
(que nem a outra...)
(agora o problema, uma hora vai dar variação = (0,0) quando não devia.)
(mas talvez tenha outro jeito que não tem isso, mas não tenho 100% de certeza se funciona
OU
tu pode usar esse jeito com uns poréns:
-não atualize a posAntiga a cada frame, usa in invokeRepeating para isso.
-quando dar (0,0) não passe o valor, só passe no próximo update
)
- Se Funcionar - Melhor possibilidade:
tu ta usando Rigidbody no seu Mob ? se sim, o Rigibody tem um atributo de aceleração embutido, creio que daria para usa-lo da mesma forma que o "Variação" dos exemplos anteriores
(mas não tenho 100% de ctz disso)
Senão(Só se meu "Se()" estiver Errado...):
To com umas duvidas aqui, por que você ta passando essas duas vars para o animator ?
- Código:
input_x = target.position.x;
input_y = target.position.y;
//linha 25 e 26
quantas animações tem ai, e quais as condições de transição de cada uma delas ?
Re: NavMesh não consegue reproduzir sprits de um jogador
Então, sobre o input_x = target.position.x;dutrabr100 escreveu:Se(essas duas variáveis, são passadas para o animator para cuidar das animações Andar para Esquerda/Direita):
- Código:
input_x = target.position.x;
input_y = target.position.y;
//linha 25 e 26
Então:
O problema provavelmente está ai, ela não indica uma direção, é basicamente a posição do alvo, por ser um jogo 2D, acho que daria para usar a variação da posição do Alvo e do Mob
tipo a imagem acima é o mundo e suas posições, horizontal é X e vertical Y.
- Explicação detalhada :
se o alvo tiver 0, 0(x, y) e o mob (1,0) então a variação vai ser posMob - posAlvo = 1, 0.
se o alvo tiver 3, 0(x, y) e o mob (1,0) então a variação vai ser posMob - posAlvo = -2, 0.
se o alvo tiver -3, 0(x, y) e o mob (1,0) então a variação vai ser posMob - posAlvo = 4, 0.
notou tu pode pegar qualquer ponto, a variação ser negativa ou positiva iria indicar a direção do alvo em relação ao mob
no caso, se variacao.x > 0 entao a direção é <=
se for variacao.x < 0 entao é =>
(e tu vai ter que mudar as condições de transição das animações esquerda e direita)
(mas dependendo do seu cenário, pode dar erros em algum lugar, tipo a mob indo para um lado e a animação para o outro então é melhor tu ver a outra possibilidade)
- outra possibilidade - melhor que a primeira:
tu poderia usar uma variação de posição
basicamente tu guarda a posição anterior calcula a variação com a nova posição(bem não esquece de comparar antes de atualizar a posição anterior, pq se fizer ao contrario a variacao vai dar (0,0) = parado)
- Código:
variação = posAntiga - posNova;
(e tu vai ter que mudar as condições de transição das animações esquerda e direita)
(também dá pra tu deixar esse bool de lado já que se variação = (0,0) = parado)
no caso, se variacao.x > 0 entao a direção é <=
se for variacao.x < 0 entao é =>
(que nem a outra...)
(agora o problema, uma hora vai dar variação = (0,0) quando não devia.)
(mas talvez tenha outro jeito que não tem isso, mas não tenho 100% de certeza se funciona
OU
tu pode usar esse jeito com uns poréns:
-não atualize a posAntiga a cada frame, usa in invokeRepeating para isso.
-quando dar (0,0) não passe o valor, só passe no próximo update
)
- Se Funcionar - Melhor possibilidade:
tu ta usando Rigidbody no seu Mob ? se sim, o Rigibody tem um atributo de aceleração embutido, creio que daria para usa-lo da mesma forma que o "Variação" dos exemplos anteriores
(mas não tenho 100% de ctz disso)
Senão(Só se meu "Se()" estiver Errado...):
To com umas duvidas aqui, por que você ta passando essas duas vars para o animator ?
- Código:
input_x = target.position.x;
input_y = target.position.y;
//linha 25 e 26
quantas animações tem ai, e quais as condições de transição de cada uma delas ?
meio que essa alteração não foi eu que fiz, no meu tópico anterior, um cara me aconselhou a fazer isso, se eu não tiver enganado essas 2 vars servem para ir para a direita e para a esquerda, então eu acho que é exatamente o que você disse, então acho que o seu "Se" está certo, o projeto que eu estou fazendo agora é o meu primeiro, então coisas como meu script de player controller, eu vi na internet como fazer um, eu tinha perguntado para o criador do script se ele sabia alguma forma de resolver esse problema também, e ele disse a mesma coisa, que achava que era as condições do animator
e bom, esse personagem que a IA está controlando na verdade é como se fosse um segundo player, durante o jogo eu tenho a liberdade de trocar de controle entre esse personagem secundário e o personagem que você começa controlando, então sim, tem Rigidbody
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
Mecânica interessante essa, me lembra uns jogos de Puzzle
Sendo assim, mande as seguintes prints:
Do animator controller(assim como na imagem, mostrando os Parametros/Vars do lado):
e as condições de cada animação(com o titulo da transição por favor):
(imagens exemplo retiradas do google...)
talvez vc precise de um site para upar as imagens, pq é complicado mandar direto as img aqui no fórum, recomendo o Imgur
Sendo assim, mande as seguintes prints:
Do animator controller(assim como na imagem, mostrando os Parametros/Vars do lado):
e as condições de cada animação(com o titulo da transição por favor):
(imagens exemplo retiradas do google...)
talvez vc precise de um site para upar as imagens, pq é complicado mandar direto as img aqui no fórum, recomendo o Imgur
Re: NavMesh não consegue reproduzir sprits de um jogador
Alias quanto ao rigidbody, no inspector do seu personagem.
antes de entrar no modo de PLAY, seleciona ele em cena no inspector, tem a parte do RigidBody 2D, tem uma parte chamada info, tu vai expandir essa parte.
ai inicia o jogo, observa se ao personagem ir pra Esquerda e Direita existe um padrão. no Velocity, tipo o Eixo X positivo, quando tu se move pra um lado e negativo ao se mover para o outro.
antes de entrar no modo de PLAY, seleciona ele em cena no inspector, tem a parte do RigidBody 2D, tem uma parte chamada info, tu vai expandir essa parte.
ai inicia o jogo, observa se ao personagem ir pra Esquerda e Direita existe um padrão. no Velocity, tipo o Eixo X positivo, quando tu se move pra um lado e negativo ao se mover para o outro.
Re: NavMesh não consegue reproduzir sprits de um jogador
dutrabr100 escreveu:Mecânica interessante essa, me lembra uns jogos de Puzzle
Sendo assim, mande as seguintes prints:
Do animator controller(assim como na imagem, mostrando os Parametros/Vars do lado):
e as condições de cada animação(com o titulo da transição por favor):
(imagens exemplo retiradas do google...)
talvez vc precise de um site para upar as imagens, pq é complicado mandar direto as img aqui no fórum, recomendo o Imgur
Bom, é que na verdade meu jogo é de puzzle mesmo kkkkk, só que puzzle com RPG, achoe essa mistura de gênero de jogo muito interessante e divertida
Essas são as fotos do meu Animator controller, não sei se ficaram boas, mas tentei tirar com a maior qualidade possivel:
https://imgur.com/NKYc01b
https://imgur.com/KwofzXp
https://imgur.com/M36CAhP
https://imgur.com/kooGWTW
https://imgur.com/f6GYXUJ
https://imgur.com/Pl4xkHF
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
e sem duvida o meu SE() estava errado, aquelas duas variáveis, estão sendo passadas sem motivo para o animator, já que elas não são usadas em nenhuma transição.
faz um teste, bota a animação RUN na transição default do Entry e vê se ela é reproduzida.
E quando tu disse que teu personagem fica olhando pra cima isso significa que ele ta reproduzindo a animação Idle, correto ?
faz um teste, bota a animação RUN na transição default do Entry e vê se ela é reproduzida.
E quando tu disse que teu personagem fica olhando pra cima isso significa que ele ta reproduzindo a animação Idle, correto ?
Re: NavMesh não consegue reproduzir sprits de um jogador
Sobre a animação, sim e nãodutrabr100 escreveu:e sem duvida o meu SE() estava errado, aquelas duas variáveis, estão sendo passadas sem motivo para o animator, já que elas não são usadas em nenhuma transição.
faz um teste, bota a animação RUN na transição default do Entry e vê se ela é reproduzida.
E quando tu disse que teu personagem fica olhando pra cima isso significa que ele ta reproduzindo a animação Idle, correto ?
quando eu me movimento, o personagem me segue, e a animação que tem é de "Walk_Up" como se o personagem estivesse indo para cima, porém ele está me seguindo para a esquerda
e esse é só um exemplo, acontece também de, por exemplo, eu ir para baixo e ele ficar com a animação de "Walk_Left"
Sobre o teste, eu vou tentar aqui e ver no que dá, se você quiser, eu posso passar o link para você baixar o projeto e ver você mesmo os bugs, porque é um pouco difícil explicar escrevendo, já que a animação que ele reproduz é praticamente aleatória
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
Quando eu coloquei o RUN como default, melhorou um pouco, mas ainda tem uns bugs, por exemplo, ele demora para virar para o lado que o jogador está indo, isso quando vira, algumas vezes ele nem vira e segue fazendo moonwalk
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
Qual o tempo de transição que você colocou entre as animações?Ren Allen escreveu:Quando eu coloquei o RUN como default, melhorou um pouco, mas ainda tem uns bugs, por exemplo, ele demora para virar para o lado que o jogador está indo, isso quando vira, algumas vezes ele nem vira e segue fazendo moonwalk
Re: NavMesh não consegue reproduzir sprits de um jogador
Ren Allen escreveu:Quando eu coloquei o RUN como default, melhorou um pouco, mas ainda tem uns bugs, por exemplo, ele demora para virar para o lado que o jogador está indo, isso quando vira, algumas vezes ele nem vira e segue fazendo moonwalk
hm, se a animação funciona o problema não esta nela.
essa demora pode ser na transição.
Re: NavMesh não consegue reproduzir sprits de um jogador
O tempo que eu coloquei foi 0.1SauloeArthur escreveu:Qual o tempo de transição que você colocou entre as animações?Ren Allen escreveu:Quando eu coloquei o RUN como default, melhorou um pouco, mas ainda tem uns bugs, por exemplo, ele demora para virar para o lado que o jogador está indo, isso quando vira, algumas vezes ele nem vira e segue fazendo moonwalk
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Re: NavMesh não consegue reproduzir sprits de um jogador
então eu acho que o único problema deve estar no seu scriptRen Allen escreveu:O tempo que eu coloquei foi 0.1SauloeArthur escreveu:Qual o tempo de transição que você colocou entre as animações?Ren Allen escreveu:Quando eu coloquei o RUN como default, melhorou um pouco, mas ainda tem uns bugs, por exemplo, ele demora para virar para o lado que o jogador está indo, isso quando vira, algumas vezes ele nem vira e segue fazendo moonwalk
Re: NavMesh não consegue reproduzir sprits de um jogador
SauloeArthur escreveu:então eu acho que o único problema deve estar no seu scriptRen Allen escreveu:O tempo que eu coloquei foi 0.1SauloeArthur escreveu:Qual o tempo de transição que você colocou entre as animações?Ren Allen escreveu:Quando eu coloquei o RUN como default, melhorou um pouco, mas ainda tem uns bugs, por exemplo, ele demora para virar para o lado que o jogador está indo, isso quando vira, algumas vezes ele nem vira e segue fazendo moonwalk
Será que se eu colocar no animator uma variável look direction e colocar assim: x = 1 (direita), x = 0 (esquerda), y = 1 (cima), y = -1 (baixo), e depois conectar isso no script da IA, funcionária??
Ren Allen- Membro
- PONTOS : 1469
REPUTAÇÃO : 7
Respeito as regras :
Tópicos semelhantes
» NavMesh não faz animação do jogador
» Inimigo seguir o jogador sem usar o NavMesh
» U2019 - Animações e efeitos após jogador levar hit? por outro jogador?
» Inimigp Olha o Jogador e Surgi um Objeto na Direção do Jogador
» Meu personagem consegue pular infinitamente
» Inimigo seguir o jogador sem usar o NavMesh
» U2019 - Animações e efeitos após jogador levar hit? por outro jogador?
» Inimigp Olha o Jogador e Surgi um Objeto na Direção do Jogador
» Meu personagem consegue pular infinitamente
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos