办法1:设置一个量,在离开地面时开始每帧增加,落地归零,施加重力速度分量时平方相乘//已实现
办法2:地形检测,通过cast函数返回值是否为0判断碰撞//已实现
办法1实现情况:跳跃分两个阶段,第一阶段施加一种向下的速度,不断增加,抵消恒速度,
使合速度最终为零,第二阶段将重力归零,以和第一阶段同样的方式增加
//成熟办法(可灵活使用):第一阶段施加一种向下的速度,不断增加,抵消恒速度,使玩家的合速度最终为零,第二阶段将重力归零,以和第一阶段同样的方式增加
碰撞核心代码:
if(rigidbody2D.Cast(direction, contactFilter2D, raycastHit2DList, distance)==0) isTouched = false;
else isTouched = true;
重力部分:
private void Update()
{
velocity = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
if (isTouched == false)
{
gravity +=1.5f;//使重力变化
}
else
{
gravity = 20;
getTop = false;
}
}
private void FixedUpdate()
{
//重力速度加在Input.GetAxisRaw获得的速度上,一起传入Move
Movement(velocity * Time.deltaTime * 10f + new Vector2(0, gravity * gravity * -0.00001f));
}
private void Movement(Vector2 deltaPosition)
{
//到达顶点速度方向改变,速度归零
if (deltaPosition.y < 0 && getTop == false)
{
gravity = 20;
getTop = true;
}
}