观看M-studio的unity中文教程(开发一款移动设备运行的2D游戏)学习记录

第一部分:PlayerManger中的跳跃方法,相比较之下跳跃手感会更好

 



   //属性
    public float Speed;   //速度
    private float InputX; //x轴输入
    public float JumpForce; //跳跃力
    public bool CanJump;   //检测能够跳跃的bool值,默认false
    public bool IsJump;   //跳跃的bool值
    private bool IsHurt;  //角色受伤的bool值

   

    [Header("States Check")]
    public bool IsGround;   //检测地面的bool

    [Header("Ground Check")]
    public Transform GroundCheck;    //检测地面的tranform变量,外部赋值,玩家脚底
    public float Raduis;    //检测范围
   

    //引用
    private Rigidbody2D Rb;    
    private Animator Anim;
    private Collider2D Coll;
    public LayerMask Ground;  //地面图层



    void Start()
    {
        Rb=GetComponent<Rigidbody2D>();
        Anim = GetComponent<Animator>();
        Coll = GetComponent<Collider2D>();


    }
 void Update()
    {
      
       InputCheck();
      
    }
    private void FixedUpdate()
    {
       
        PhysicsCheck();
        if(!IsHurt)  //受伤时候不能移动,有一个僵值,受伤部分在后面更新讲解
        {
            MoveMent();
            PlayerJump();
        }
        
      

    }


  //角色跳跃
    public void PlayerJump()
    {
       if(CanJump)  //能够跳跃,CanJump=true
        {

            IsJump = true;   //正在跳跃,IsJump为true
           
            Rb.velocity = new Vector2(Rb.velocity.x, JumpForce);  //给与一个向上的力
            Rb.gravityScale = 6;   //改变重力能够更快落下
            CanJump = false;    //在空中,不能跳跃,CanJump为false
        }


    
    }
 //输入检测
    private void InputCheck()
    {
        if(Input.GetButtonDown("Jump")&& IsGround) //键盘输入space&&人物处于地面
        {
            
            CanJump = true;  //CanJump为true,放在upate里检测
            
        }
        if(Input.GetKeyDown(KeyCode.J))
        {
            Attack();
        }
    }

    //物理检测
    private void PhysicsCheck()  // 在FixedUpdate里检测
    {
        IsGround = Physics2D.OverlapCircle(GroundCheck.position, Raduis, Ground);  //以脚底一部分圆空间检测是否身处地面,GroundCheck变量外部设置
        if (IsGround)    //如果是地面
        {
            
            IsJump = false;  表示不是正在跳跃
        }
    }


  
    //使检测圆部分 可见

    public void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(GroundCheck.position, Raduis);
    }

代码解析

代码的解析在注释中有介绍


版权声明:本文为weixin_56319289原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。