说说我这套跳跃的逻辑吧:
设置两个变量,一个是最大跳跃次数,一个是剩余跳跃次数。
首先设置最基本的允许跳跃条件——是否触地,即判断玩家是否在地面上,然后才能允许玩家跳跃。
当触地时重置剩余跳跃次数(把最大跳跃次数的值赋给剩余跳跃次数),剩余跳跃次数在玩家每跳一次就减少一次,当剩余跳跃次数为0时,不再允许玩家跳跃。
再额外说明下代码里的一些地方。我的允许跳跃条件设为了“当玩家y轴速度为0”,其实这是不太严谨的,我看网上的大部分代码中允许跳跃的检测一般是以“是否触地”作为条件。其实我这么设置不为别的,只是尝试用另一种方式进行跳跃功能的实现而已,毕竟刚学U3D没几天想多整点东西。
以下是代码:
public float jumpMaxTimes; //其值意义为最大的跳跃次数,即允许玩家进行多少段的跳跃,如需要二段跳则赋值2即可
public float jumpCountTimes; //定义一个计数器,其值意义为剩余跳跃的次数
void Jump()
{
if (myRigidbody.velocity.y == 0) //这里说明下允许跳跃的检测一般是以“是否触地”作为条件,而我这里是以“y轴速度为0时”允许跳跃,这样的条件其实是不太严谨的。其实我这么设置不为别的,只是尝试用另一种方式进行跳跃功能的实现而已,毕竟刚学U3D没几天嘛嘿嘿。
{
jumpCountTimes = jumpMaxTimes;//触地重置剩余跳跃次数的计数
if (Input.GetButtonDown("Jump"))
{
myRigidbody.velocity = new Vector2(myRigidbody.velocity.x, jumpSpeed);
jumpCountTimes--;
}
}
else if (jumpCountTimes > 0) //判断剩余跳跃次数的值,大于0则允许跳跃
{
if (Input.GetButtonDown("Jump"))
{
myRigidbody.velocity = new Vector2(myRigidbody.velocity.x, jumpSpeed);
jumpCountTimes--;
}
}
}
逻辑很简单,希望能给你带来帮助。(我才不会说这篇文章是为了水1024徽章呢)