Unity 2d game jump mobile te enseña

No hay mucho que decir, solo ve al código y comenta para analizar paso a paso

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour

{
    
    

  public float speed = 5f;//人物移动速度
  public float jumpSpeed = 5f;//人物跳跃给的力
  public LayerMask ground;//环境的图层Layer(就是地面)
  public bool isGround;//判断游戏玩家是否在地面
  public bool isJump;//判断是否进行跳跃
  public Transform jiao;//在人物添加一个空物体 jiao 见下面图片

  private Rigidbody2D playRig;
  private Animator playAnim;
  private CircleCollider2D playCir;//玩家的collider



  // Start is called before the first frame update

  void Start()
  {
    
    
    playRig = GetComponent<Rigidbody2D>();
    playCir = GetComponent<CircleCollider2D>();
    playAnim = GetComponent<Animator>();
  }


  private void Update()//判断是否按下空格跳跃键(可以自行设置跳跃键)
  {
    
    
    if(Input.GetButtonDown("Jump"))
    {
    
    
      isJump = true;
    }
  }

  private void FixedUpdate()
  {
    
    
    isGround = Physics2D.OverlapCircle(jiao.position, 0.1f, ground);//该函数返回jiao的位置是否和图层ground发生碰撞重合,发生碰撞的话一定在地面上
    
    playMove();
    playJump();
    swtichaNima();
  }

  void playMove()

  {
    
    

    float hor = Input.GetAxisRaw("Horizontal");//移动用GetAxisRawK返回-1或0或1,反应迅速,人物没有一种需要加速的感觉,玩起来很平滑
    
    playRig.velocity = new Vector2(hor * speed * Time.fixedDeltaTime * 50, playRig.velocity.y);

    if (hor!=0)
    {
    
    
      transform.localScale = new Vector3(hor, 1, 1);//改变人物方向,左右切换,hor是0的时候,人物不发生改变
    }
  }


  void playJump()
  {
    
    
    if(isGround&&isJump)//只有当人物在地面并且按下跳跃键才可以出发跳跃
    {
    
    
      isJump = false;
      playRig.velocity = new Vector2(playRig.velocity.x, jumpSpeed * Time.fixedDeltaTime * 50);
    } 
    
    if(!isGround)//在空中的话isjump设为false,在此按下空格键不能跳跃
    {
    
    
      isJump = false;
    }   
  }



  void swtichaNima()//人物动画播放控制器
  {
    
    
    playAnim.SetFloat("speed",Mathf.Abs( playRig.velocity.x));//人物根据按下左右移动键来给speed赋值,来进行移动的动画播放   idle→run的条件int类型的speed,speed大于0就播放run,等于0就回到idle动画,此speed不是上面定义的speed
    if (isGround)//在地面的话,fall下落动画一定是禁止的
    {
    
    
      playAnim.SetBool("fall", false);
    }

    if(!isGround && playRig.velocity.y>1)//只有当不再地面,并且人物跳跃的时候,y轴的力是大于0才播放jump动画
    {
    
    
      playAnim.SetBool("jump", true);
    }

     if(!isGround && playRig.velocity.y<0)//当不在空中,y轴的力小于零说明人物下落,所以禁用jump动画,播放fall动画
    {
    
    
      playAnim.SetBool("jump", false);
      playAnim.SetBool("fall", true);
    }
    
    if(isGround&&playAnim.GetBool("fall")==false)//在地面并且下降fall动画是false播放idle动画
    {
    
    
      playAnim.SetBool("idle", true);
    }
  }
}


Ubicación de la imagen de isGround

El isGround en la imagen es incorrecto ...
La posición de los pies del personaje es sólida.

Diagrama lógico de conversión de animación

Diagrama lógico de conversión de animación

Supongo que te gusta

Origin blog.csdn.net/m0_48554728/article/details/114543336
Recomendado
Clasificación