[TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
+3
DarkPrideOdium
mwgamer
MarcosSchultz
7 participantes
Página 1 de 1
[TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
Fala galera, estou trazendo este tutorial para mostrar como ressetar alguma condição no Animator após ter executado a animação desejada. Exemplo:
Tenho uma condição do tipo float, com o nome "velocidade". A condição para executar a animação "walk" é que a velocidade seja maior do que 1,
Más a intenção é que a animação seja executada apenas 1 vez, e depois que terminar, volte ao seu estado de "IdleA" ou, parado.
O problema é que eu preciso fazer com que o valor da minha velocidade seja ressetado, por que se ele ficar em 1, a animação vai ficar sendo chamada direto.
Para isto é necessário Marcar a opção "Has Exit Time" na seta de volta, e deixar a volta sem nenhuma condição, ou com uma condição de "velocidade == 0" ( no meu caso ).
Depois disso, basta fazer uma simples condição via script. Basicamenve você vai pedir se o nome da animação atual é "walk" ( no meu caso ). E se for, ai basta ressetar a variavel "velocidade".
Para fazer isto, basta utilizar este comando:
isto é uma simples checagem onde eu pergunto a layer em que a animação está ( é dada em números ) e também pergunto o nome da animação.
Para mim, o comando ficou assim:
Visto que a layer que eu estava trabalhando éra a primeira da lista ( ou seja, a layer 0 ) e o nome da animação é "walk".
O script completo que eu utilizei neste teste é este aqui:
Este foi o sistema que eu utilizei para o meu sistema.
é bem simples de modo geral... :D
Tenho uma condição do tipo float, com o nome "velocidade". A condição para executar a animação "walk" é que a velocidade seja maior do que 1,
Más a intenção é que a animação seja executada apenas 1 vez, e depois que terminar, volte ao seu estado de "IdleA" ou, parado.
O problema é que eu preciso fazer com que o valor da minha velocidade seja ressetado, por que se ele ficar em 1, a animação vai ficar sendo chamada direto.
Para isto é necessário Marcar a opção "Has Exit Time" na seta de volta, e deixar a volta sem nenhuma condição, ou com uma condição de "velocidade == 0" ( no meu caso ).
Depois disso, basta fazer uma simples condição via script. Basicamenve você vai pedir se o nome da animação atual é "walk" ( no meu caso ). E se for, ai basta ressetar a variavel "velocidade".
Para fazer isto, basta utilizar este comando:
- Código:
if (Animator.GetCurrentAnimatorStateInfo (layer).IsName ("NomeDaAnimação")){
//comandos para ressetar as condições
}
isto é uma simples checagem onde eu pergunto a layer em que a animação está ( é dada em números ) e também pergunto o nome da animação.
Para mim, o comando ficou assim:
- Código:
if (controlGato.GetCurrentAnimatorStateInfo (0).IsName ("Walk")){
controlGato.SetFloat("velocidade", 0);
}
Visto que a layer que eu estava trabalhando éra a primeira da lista ( ou seja, a layer 0 ) e o nome da animação é "walk".
O script completo que eu utilizei neste teste é este aqui:
- Código:
using UnityEngine;
using System.Collections;
public class AnimCat : MonoBehaviour {
private Animator controlGato; // aqui eu declaro uma variavel do tipo Animator para guardar o animator
public float velocidade; // uma variavel do tipo float para controlar a velocidade
void Start () {
controlGato = GetComponent<Animator> (); // aqui eu seto o animator do gato
}
void Update () {
controlGato.SetFloat ("velocidade", velocidade); // aqui eu estou setando o valor da condição "velocidade" com o mesmo valor da variavel velocidade
if (Input.GetKeyDown ("e")) {
velocidade = velocidade + 0.1f; // se eu apertar "e" a minha velocidade aumenta em 0.1f
}
if (controlGato.GetCurrentAnimatorStateInfo (0).IsName ("Walk")){ // se eu estiver executando a animação "walk"
controlGato.SetFloat("velocidade", 0); // deixa a condição "velocidade" no animator, como 0
velocidade = 0; // resseta a variavel velocidade no script
}
}
}
Este foi o sistema que eu utilizei para o meu sistema.
é bem simples de modo geral... :D
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:15 pm, editado 2 vez(es)
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
VLW MANO ME AJUDO MUITO, E FUNCIONOU DIREITINHO :D
mwgamer- Membro
- PONTOS : 3200
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
e em javascript ?como ficaria?
DarkPrideOdium- Iniciante
- PONTOS : 2987
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
pega o conversor de códigos no google brother... Não estou dando mais suporte a Java, visto que a preferência de 99% do fórum é C#
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
Marcos, da pra fazer o mesmo script mais com Bool, Int?
rafaelllsd- ProgramadorMaster
- PONTOS : 4994
REPUTAÇÃO : 507
Idade : 23
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
rafaelllsd escreveu:Marcos, da pra fazer o mesmo script mais com Bool, Int?
Sim, o GetState pega qualquer estado que estiver lá, bool, int, float, string
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
Como faço algo parecido quando se trabalha dentro de um blend tree?
Já que nesse caso não há a opção de marcar o "Has Exit Time"?
Já que nesse caso não há a opção de marcar o "Has Exit Time"?
dviros- Iniciante
- PONTOS : 3073
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
Se não me engado, blend tree funciona como uma classe, aonde você acessa as subclasses e ai vai existire o HasExitTime
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
Uma solução também, seria usar o Input.GetAxis("Horizontal") e Input.GetAxis("Horizontal"), para as teclas w,s,a,d enquanto tiver pressionado baixo ou esquerda chega a -1 e alto ou direita, chega a 1, e se você soltar a tecla volta a 0, sendo que se pode configurar as teclas que pode apertar em settings.
osiasbezerra- Avançado
- PONTOS : 3349
REPUTAÇÃO : 8
Respeito as regras :
Re: [TUTORIAL] Ressetar parametros do Animator após executar animação ( Unity 5 )
Muito obrigado mano, tava quebrando a cabeça no meu projeto ontem e hoje achei sua solução.
Joc- Iniciante
- PONTOS : 1953
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Unity 5 - Como utilizar o Animator
» Consigo herdar/ copiar parâmetros do animator da unity?
» [RESOLVIDO] Executar animação após um X segundos
» (Animator)Voltar a um estado de animação mais nao executar a mesma
» Como faço para apos uma animação acabar, executar outra ação C#
» Consigo herdar/ copiar parâmetros do animator da unity?
» [RESOLVIDO] Executar animação após um X segundos
» (Animator)Voltar a um estado de animação mais nao executar a mesma
» Como faço para apos uma animação acabar, executar outra ação C#
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos