防止用户"bunny hopping"(着陆时自动跳跃)



我在游戏中有一个简单的跳跃动作。玩家按下跳跃键,被发射到空中,转换到空中状态,然后再次摔倒在地。通常的东西。

然而,如果玩家降落在地上,并且用户仍然持有跳跃键,则玩家在降落时自动再次跳跃。我不想那样。我希望用户在能够再次跳转之前放开密钥。

这是我的玩家移动代码的简化版本,其中只有必要的东西。

public class GenesisPhysics : MonoBehaviour {
public bool isGrounded = true;
public bool jumpIsPressed;
public IA inputActions;  // New input system's Input Action Asset C# class

private void Awake()
{
inputActions = new IA();

// Movement actions stuff...
inputActions.PlayerControls2D.Jump.performed += jumpContext => jumpIsPressed = true;
inputActions.PlayerControls2D.Jump.canceled += jumpContext => jumpIsPressed = false;
}

private void FixedUpdate() 
{
if(isGrounded) 
{
ExecuteGroundStateLoop()
} else {
ExecuteAirStateLoop()
}
}
private void ExecuteGroundStateLoop() 
{
// Do stuff...

if(jumpPressed) {
isGrounded = false;
// Set x and y speeds to be applied in Air state
} else {
// Do some more stuff...
}
}

private void ExecuteAirStateLoop()
{
// Applying gravity, jump force, checking for ground and other stuff...

// If ground is found, set isGrounded to true.
}
void OnEnable()
{
inputActions.Enable()
}
void OnDisable()
{
inputActions.Disable()
}
}

这可能不足以解决问题。如果需要更多,我会更新这篇文章。

创建一个新的bool变量"jumpPressAvailable";并在开始时将其设置为true。如果跳转可用,请使用此新变量进行控制。例如,如果按下跳转按钮,则设置"跳转";jumpPressAvailable";如果跳转按钮被释放或"是";"未按下";,设置";jumpPressAvailable";再次变为真。只有当按下跳转按钮并"跳过"时,才能开始跳转;jumpPressAvailable";是真的。

public bool jumpPressAvailable=true;

在基态环路中添加一些线路:

if(jumpPressed && jumpPressAvailable) {
isGrounded = false;
jumpPressAvailable = false;
// Set x and y speeds to be applied in Air state
} else {
if(jumpPressed == false)
{
jumpPressAvailable = true;
}
// Do some more stuff...
}

相关内容

  • 没有找到相关文章

最新更新