目录
人物跳跃,二段跳,跳跃手感优化可能办法
1、普通跳跃(无限制
private float jumpForce = 13;//根据需要调整
private Rigidbody2D rbody;
private void Start()
{
rbody = GetComponent<Rigidbody2D>();
}
private void Update()
{
if (Input.GetButtonDown("Jump"))
{
rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
}
}
这样写代码的话,对人物跳跃没有任何限制,可以无限跳跃(感觉就跟飞起来了一样,汗颜
2、一段跳
先在人物上建一个空物体作为子物体,命名为foot。然后将foot移动到人物的脚的位置(参考见下图
代码如下:
private float jumpForce = 13;//数字大小根据需要调整
public Transform playerFoot; //人物的脚
private bool isGround; //人物在不在地面上
private Rigidbody2D rbody;
private void Start()
{
rbody = GetComponent<Rigidbody2D>();
}
private void Update()
{
isGround = Physics2D.OverlapCircle(playerFoot.position, 0.2f, LayerMask.GetMask("Ground"));
if (Input.GetButtonDown("Jump"))
{
if (isGround)
{
rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
}
}
}
注意事项:
- 一定要记得把foot那个物体拖到挂载脚本的playerFoot上。
- 给地面设置Layer为Ground(看下图
如果没有Ground这个层级的话就要鼠标点击旁边的三角符号去添加层级(层级名字可以按自己需求来起名,只要跟代码相对应就好了)
小总结
上面的代码就是要检测人物有没有在地面上,只有在地面上才能按空格键进行跳跃
3、二段跳
一般来说,二段跳已经能够满足大部分需求了
private float jumpForce = 13;
public Transform playerFoot;
private bool isGround;
private bool isCanDoubleJump;//能不能进行二段跳
private Rigidbody2D rbody;
private void Start()
{
rbody = GetComponent<Rigidbody2D>();
}
private void Update()
{
isGround = Physics2D.OverlapCircle(playerFoot.position, 0.2f, LayerMask.GetMask("Ground"));
if (isGround)
{
//在地面的话符合二段跳条件
isCanDoubleJump = true;
}
if (Input.GetButtonDown("Jump"))
{
if (isGround)
{
//按下空格键而且在地面,进行一段跳
rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
}
else if (!isGround && isCanDoubleJump)
{
//按下空格键而且不在地面,又符合二段跳条件,进行二段跳
isCanDoubleJump = false;//设置二段跳条件为假
rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
}
}
}
二段跳是在前面的基础上进行改进的。设置一个bool值 isCanDoubleJump ,用来标记人物能不能进行二段跳。当人物在地面上的时候,就设置为true,当人物已经进行二段跳的时候设置为false。
4、跳跃手感优化
上面的代码在控制人物跳跃的时候,手感比较差,人物给人的感觉就是要飘起来了。
能找到的优化方案只有一个,就是加大物理重力。下面是俩个途径去加大重力效果
4.1手感优化途径1
直接在人物脚本挂载的Rigidbody2D组件上的Gravity Scale上修改,把他写成4、5倍放大效果就好了。
4.2手感优化途径2
另外一种放大Gravity的方法就是在project setting上的physics 2D的Gravity的Y值修改(如下图标记的位置
注意:这里修改的话要注意写成负数!!!
也是把它放大几倍就好了,默认是-9.81,那么就是把-9.81×n即可
4.3小总结
把重力放大几倍,然后再根据上面的jumpForce的值(或者代码中相似作用的属性的值),这俩者配合着修改,然后达到一个比较好的手感就好了
5、总结
总结了一下现学阶段比较可行的跳跃办法以及优化办法。如果后面有看见更好的优化方法再来补充吧,或者评论区大佬赐教(膜拜
关于三段跳的话,在这里写一下我的思路吧,记录一下。
如果要进行三段跳,或者更多次数的跳跃,可以多加一个int jumpCount = 3的变量,然后每跳跃一次就次数--,jumpCount为0时不能再跳跃了。
然后当人物在地面上的时候,把次数jumpCount重新定义为3。
大概这样设置应该是可行的,有时间再试试,over