[RESOLVIDO] passar de uma animação para a outra rapidamente pelo animator
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] passar de uma animação para a outra rapidamente pelo animator
mesmo com a bool verdadeira, por exemplo:
para passar de IDLE (ocioso) para DOWN(abaixado)
Ele percorre toda a animaçao do IDLE antes de ir para o DOWN
Alguém sabe como que interrompe a animaçao do IDLE, simplesmente quando a BOOL é verdadeira?
Ou seja, pressionou a tecla correspondente a animaçao tem que ir para DOWN, não percorrer todos os quadros da IDLE pra depois ir para DOWN
- Código:
using System.Collections;
using System.Collections.Generic;
using Unity.Android.Types;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public Animator animador, animador_Haddouken_Icon;
public float velocidadeX, forcadoPulo;
public Rigidbody2D rb;
public int direção;
public bool jump, tempoRecarga_Bool;
public float Life,tempoparaRecargadeEnergia, tempo_2, temponecessario;
public AudioSource kick_Audio, jump_Audio, Hadouken_Audio, TatsumakiSenpukyaku_Audio, die, defense_Audio;
public GameObject Attack_GameObject, Defense_GameObject, HaddoukenSpawn, HaddoukenSpawn_L, HaloGameObject;
public SpriteRenderer sprite;
public Text vida_texto;
// Start is called before the first frame update
void Start()
{
Life = 1;
}
// Update is called once per frame
void Update()
{
vida_texto.text = Life.ToString();
if (tempoRecarga_Bool)
{
animador_Haddouken_Icon.Play("haddouken_Icon_Idle");
}
if (tempoRecarga_Bool == false)
{
animador_Haddouken_Icon.Play("Haddouken_Icon_Less_Energy");
}
if (tempoRecarga_Bool)
{
tempoparaRecargadeEnergia += Time.deltaTime;
if (tempoparaRecargadeEnergia >= temponecessario)
{
tempoRecarga_Bool = false;
}
if (tempoparaRecargadeEnergia >= tempo_2)
{
tempoparaRecargadeEnergia = 0;
}
}
Rigidbody2D rb = GetComponent<Rigidbody2D>();
if (Life <= 0)
{
die.GetComponent<AudioSource>().Play();
animador.SetBool("Die", true);
animador.Play("Player_Die");
Destroy(gameObject, 1);
}
if (Life >= 1)
{
//ANDAR PARA A ESQUERDA - BOTAO PRA CIMA, É PRA VOLTAR PARA O IDLE
if (Input.GetKeyUp("a"))
{
tempoparaRecargadeEnergia = 0;
animador.SetBool("Walking_Bool", false);
tempoRecarga_Bool = true;
//a tecla A e a D, ativam o tempoRecarga_Bool para que o Haddouken seja feito, vinculado aos códigos iniciais no update
}
if (Input.GetKeyUp("d"))
{
tempoparaRecargadeEnergia = 0;
animador.SetBool("Walking_Bool", false);
tempoRecarga_Bool = true;
}
if (Input.GetKeyDown("l"))
{
Defense_GameObject.SetActive(true);
// animador.SetBool("Defense", true);
animador.Play("Hero_Defense");
defense_Audio.GetComponent<AudioSource>().Play();
}
//Quando a tecla é solta, perceba isso em outras linhas
if (Input.GetKeyUp("l"))
{
animador.SetBool("Defense", false);
Defense_GameObject.SetActive(false);
}
/* if (!Input.GetKeyDown(KeyCode.A) || !Input.GetKeyDown(KeyCode.D))
{
tempoRecarga_Bool = true;
}*/
// HADDOUKEN TECLA J
if (tempoRecarga_Bool) {
if (sprite.GetComponent<SpriteRenderer>().flipX == false)
{
if (Input.GetKeyUp("j"))
{
HaloGameObject.SetActive(true);
tempoRecarga_Bool = true;
HaloGameObject.SetActive(true);
Attack_GameObject.SetActive(true);
//animador.SetBool("Hadouken_Hero", true);
animador.Play("Hadouken_HeroAanim");
HaddoukenSpawn.gameObject.SetActive(true);
Hadouken_Audio.GetComponent<AudioSource>().Play();
}
}
/*else
{
// HaddoukenSpawn.gameObject.SetActive(false);
animador.SetBool("Hadouken_Hero", false);
// animador.Play("Hero_idle");
}*/
}
//FIM TECLA DO HADDOUKEN
if (Input.GetKeyDown("s"))
{
//animador.Play("Hero_Down");
animador.SetBool("Hero_Down",true);
}
if (Input.GetKeyUp("s"))
{
//animador.Play("Hero_Down");
animador.SetBool("Hero_Down", false);
}
if (Input.GetKeyDown("i"))
{
Attack_GameObject.SetActive(true);
animador.Play("Hero_Kick");
//animador.SetBool("Hero_Kick", true);
kick_Audio.GetComponent<AudioSource>().Play();
}
else
{
//animador.SetBool("Hero_Kick", false);
//animador.Play("Hero_idle");
}
if (Input.GetKeyDown("k"))
{
Attack_GameObject.SetActive(true);
animador.Play("Tatsumaki Senpukyaku_anim");
animador.SetBool("Tatsumaki Senpukyaku", true);
TatsumakiSenpukyaku_Audio.GetComponent<AudioSource>().Play();
}
else
{
animador.SetBool("Tatsumaki Senpukyaku", false);
//animador.Play("Hero_idle");
}
// BOTÃO DO PULO
if (Input.GetKeyDown("w")) {
if (jump)
{
//animador.SetBool("Jump_Bool", true);
jump_Audio.GetComponent<AudioSource>().Play();
animador.Play("Hero_Jump");
jump = false;
rb.AddForce(new Vector2(0, forcadoPulo), ForceMode2D.Impulse);
}
if (jump == false)
{
//animador.Play("Hero_Jump");
animador.SetBool("Jump_Bool", true);
}
}
// ANDAR PARA A DIREITA
if (Input.GetKeyDown
("d"))
{
// animador.Play("Hero_Walking");
rb.AddForce(new Vector2(velocidadeX, 0), ForceMode2D.Impulse);
GetComponent<SpriteRenderer>().flipX = false;
animador.SetBool("Walking_Bool", true);
//animador.Play("Hero_Walking");
// animador.SetInteger("Walking", 1);
}
//FORMULA DO IMPULSO EIXO X - LEFT
// andar para a esquerda
if (Input.GetKeyDown
("a"))
{
// animador.Play("Hero_Walking");
animador.SetBool("Walking_Bool", true);
//animador.Play("Hero_Walking");
GetComponent<SpriteRenderer>().flipX = true;
rb.AddForce(new Vector2(-velocidadeX, 0), ForceMode2D.Impulse);
// animador.SetInteger("Walking", 1);
}
}
else
{
animador.SetBool("Walking_Bool", false);
}
// HADDOUKEN LEFT - Fórmula com a letra J
if (tempoRecarga_Bool)
{
if (sprite.GetComponent<SpriteRenderer>().flipX == true)
{
if (Input.GetKeyDown("j"))
{
HaloGameObject.SetActive(true);
tempoRecarga_Bool = true;
Attack_GameObject.SetActive(true);
animador.SetBool("Hadouken_Hero", true);
animador.Play("Hadouken_HeroAanim");
HaddoukenSpawn_L.gameObject.SetActive(true);
Hadouken_Audio.GetComponent<AudioSource>().Play();
}
}
else
{
// HaddoukenSpawn.gameObject.SetActive(false);
animador.SetBool("Hadouken_Hero", false);
// animador.Play("Hero_idle");
}
}
}
public void OnCollisionEnter2D(Collision2D collisor)
{
if (collisor.gameObject.CompareTag("Terreno"))
{
jump = true;
animador.SetBool("Jump_Bool", false);
}
}
}
para passar de IDLE (ocioso) para DOWN(abaixado)
Ele percorre toda a animaçao do IDLE antes de ir para o DOWN
Alguém sabe como que interrompe a animaçao do IDLE, simplesmente quando a BOOL é verdadeira?
Ou seja, pressionou a tecla correspondente a animaçao tem que ir para DOWN, não percorrer todos os quadros da IDLE pra depois ir para DOWN
RodrigoPrivilegium- Avançado
- PONTOS : 1818
REPUTAÇÃO : 12
Respeito as regras :
Re: [RESOLVIDO] passar de uma animação para a outra rapidamente pelo animator
Na flecha de transição da animação, deixa tudo zerado nessas opções e desmarca o Has Exit Time:
RodrigoPrivilegium- Avançado
- PONTOS : 1818
REPUTAÇÃO : 12
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Detectar quando a animação do animator acaba para dar dano no player
» (Animator) Animação bugada no animator!
» Animação do animator default
» Animação de personagem com o animator
» Passar de estado no meio da animação
» (Animator) Animação bugada no animator!
» Animação do animator default
» Animação de personagem com o animator
» Passar de estado no meio da animação
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos