看Ue4角色代码——跳跃与实现二段跳

看了一下终于发现了跳跃的关键代码

bool UCharacterMovementComponent::DoJump(bool bReplayingMoves)
{
    if ( CharacterOwner && CharacterOwner->CanJump() )
    {
        // Don't jump if we can't move up/down.
        if (!bConstrainToPlane || FMath::Abs(PlaneConstraintNormal.Z) != 1.f)
        {
            Velocity.Z = JumpZVelocity;
            SetMovementMode(MOVE_Falling);
            return true;
        }
    }
    
    return false;
}

这里跳跃就和JumpZVelocity联系在一起了,同时运动状态改成了Falling(我认为这里设置Falling是不对的,因为在空中有上升还有下落两个状态),不过MovementComponent有判断停止下落的函数,可以在状态机里直接用。

 

当然判断是否可以跳跃就是另一回事了,你也可以自己写一个跳跃函数。

首先是CharactorMovementComponent中的DoJump(),里面检测一下能不能跳跃,(即是否允许角色Z方向的移动,因为要兼容别的类型的游戏。
),之后在ACharacter中DoJump()中与CanJump()进行与运算,CanJump返回CanJumpInternal(),CanJumpInternal()是个事件,所以我们需要
去看CanJumpInternal_Implementation(),果然CanJumpInternal_Implementation是个虚函数,所以修改跳跃逻辑就修改这个函数就好了。

看一下CanJumpInternal_Implementation的逻辑

bool ACharacter::CanJumpInternal_Implementation() const
{
    const bool bCanHoldToJumpHigher = (GetJumpMaxHoldTime() > 0.0f) && IsJumpProvidingForce();

    return !bIsCrouched && CharacterMovement && (CharacterMovement->IsMovingOnGround() || bCanHoldToJumpHigher) && CharacterMovement->IsJumpAllowed() && !CharacterMovement-
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在UE4的C++代码实现ClampFloat,你可以使用FMath::Clamp函数。这个函数可以将一个浮点数限制在指定的范围内。 下面是一个示例代码,演示了如何在UE4的C++代码中使用ClampFloat来限制一个浮点数的值: ```cpp float ValueToClamp = 10.0f; float MinValue = 0.0f; float MaxValue = 5.0f; float ClampedValue = FMath::Clamp(ValueToClamp, MinValue, MaxValue); ``` 在这个示例中,ValueToClamp的值被限制在0.0到5.0之间。如果ValueToClamp的值小于0.0,ClampedValue将会是0.0;如果ValueToClamp的值大于5.0,ClampedValue将会是5.0;如果ValueToClamp的值在0.0到5.0之间,ClampedValue将会是ValueToClamp的值本身。 你可以根据自己的需求修改示例代码中的ValueToClamp、MinValue和MaxValue的值来实现你想要的效果。\[1\] #### 引用[.reference_title] - *1* [使用Unreal5 创建C++类(FloatingActor)](https://blog.csdn.net/qq_42915442/article/details/125890112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [UE4 C++代码实现碰撞小游戏](https://blog.csdn.net/Learning_xzj/article/details/124705378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值