Treinamento do projeto--Desenvolvimento de jogo multijogador Unity--Parte cinco

Sistema de animação para controle de personagem

análise

Nos últimos dois artigos, falamos principalmente sobre várias formas de controle de personagem. Desta vez, explicaremos como controlar a animação do movimento do personagem após o controle do personagem e a animação necessária.

Cenário do projeto:

提示:主要是针对第一个游戏的动画来探讨动画系统:

controlador de animação
Parâmetros de controle de animação

Os dois diagramas acima envolvem principalmente o fluxo de execução e as condições de controle da animação. Para o personagem que acabou de entrar no estado estático de manutenção de um idel, precisamos fazer um julgamento e julgar se é necessário realizar uma animação em movimento pressionando o botão. Existem quatro variáveis ​​nele, que controlam diferentes transições, respectivamente ... O primeiro é a velocidade e o segundo é o julgamento.Se está no chão, o terceiro é se deve pular e o quarto é se deve morrer.


descrever

在该角色中,我们使用了移动加速和跳跃以及下坠的动画,这就需要保证他们的一致性,需要保证条件能够正常转换,以下是一些判断条件

Animator anim;  //动画
start中
rb = GetComponent<Rigidbody2D>();
update中
isOnGround = Physics2D.OverlapCircle(groundCheck.transform.position, checkRadius, platform);//判断是否在地上(在平台上)
 anim.SetBool("isOnGround", isOnGround);

Em relação à animação em movimento, use um valor float para gerenciar, controlar se deseja alternar a animação em movimento ou a animação em execução ou manter a animação estática.

 rb.velocity = new Vector2(xVelocity * speed, rb.velocity.y);

        anim.SetFloat("speed", Mathf.Abs(rb.velocity.x));//跑动动画

Execute a animação do salto. No método OnCollisionEnter2D, precisamos julgar as condições em que o jogador pode realizar o salto. A primeira é estar no chão e a segunda é pressionar a tecla w, ou pode ser executada automaticamente no chão de um salto de ventilador. Somente nesses dois casos ele saltará. Caso contrário, não saltará. Se colidir com algo rotulado como "Fan", o jogador mantém a velocidade horizontal original enquanto ganha uma velocidade ascendente de 10float.

  if (other.gameObject.CompareTag("Fan"))
        {
            rb.velocity = new Vector2(rb.velocity.x, 10f);
        }
up = Input.GetAxis("Vertical");
        if (up > 0.1 && isOnGround && !other.gameObject.CompareTag("Fan")) //判断是否在地面上,否则不能跳跃
        {
            rb.velocity = new Vector2(xVelocity * speed, yVelocity * 6.0f);
            anim.SetFloat("up", up);//跳跃动画
            Debug.Log(up);
        }

Para concluir a operação de lesão, é necessário um julgamento de gatilho e um gatilho é usado para julgar se a condição de morte foi atendida. A condição de morte é tocar um objeto pontiagudo e o personagem executa uma animação de morte.

  if (other.gameObject.CompareTag("Spike")) //碰撞到一个标签为spike的物体、铁刺、在unity场景中可以看到TopSpikes内的idle,选中idle就看到inspector里显示着tag:spike
        {
            anim.SetTrigger("dead"); //触发dead的动画
            //PlayerDead();
            //playerDead = true;
        }

solução:

Para a execução da animação pode ocorrer um fenômeno de atraso da animação, utilizamos o método de fechar o tempo de saída para realizar a troca da animação:

insira a descrição da imagem aqui
Conforme mostrado na figura, desmarque hasExitTime. Isso torna a alternância de animação mais rápida. Não haverá atraso na animação.

Resumir

Desta vez falei principalmente sobre algumas variáveis ​​no controle do personagem, a lógica de execução, e alguns problemas encontrados. Através deste estudo, aprendi principalmente sobre uma forma (também a mais comum) de unidade para controlar a animação. Simples e lógico.

Acho que você gosta

Origin blog.csdn.net/qq_53259920/article/details/125124398
Recomendado
Clasificación