第一部分: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版权协议,转载请附上原文出处链接和本声明。