【问题标题】:Keep player velocity on slopes using Character Controller使用角色控制器保持玩家在斜坡上的速度
【发布时间】:2019-05-14 21:49:04
【问题描述】:

我正在使用 Unity 的角色控制器工具来移动我的角色。

我正在使用自己的运动、重力等,但它似乎不会直接影响运动。我检查了我的整个代码并将其减少到最低限度,只是为了寻找问题。

我已经打印了速度、运动、幅度......一切都表明运动在平坦表面或斜坡上完全相同。

我不知道角色控制器的脚本是如何工作的,所以某种计算可能会导致这种行为。

这是我计算运动的方式:

private void SetMovement() {
    horizontalMovement = isometricHorizontal * Input.GetAxisRaw(horizontalButton);
    verticalMovement = isometricVertical * Input.GetAxisRaw(verticalButton);
    movement = (horizontalMovement + verticalMovement).normalized;
    MovementModifier();
}

private void MovementModifier() {
    if (isSprinting) {
        movement.x *= sprintFactor;
        movement.z *= sprintFactor;
    }
}

private void Move() {
    if (movement != Vector3.zero)
        characterController.Move(movement * Time.deltaTime * moveSpeed);
}

下坡速度至少增加 30%,上坡时速度几乎相同。

我希望在任何表面上保持相同的速度,而无需应用运动修改器或在经过特定区域(如斜坡或楼梯)时降低它。

编辑:

这就是我应用重力的方式。

private void ApplyGravity() {
    if (!characterController.isGrounded) {
        gravity += Physics.gravity * Time.deltaTime * gravityFactor;
        if (gravity.y > 0 && !Input.GetButton(jumpButton) && !isFalling)
            gravity += Physics.gravity * Time.deltaTime * gravityFactor * (lowJumpMultiplier - 1);
    }
    else if (!isJumping) gravity = Vector3.down;
    CheckCollisionFlags();
    movement += gravity;
}

private void CheckCollisionFlags() {
    switch (characterController.collisionFlags) {
        case UnityEngine.CollisionFlags.Above:
            gravity = Vector3.down;
            break;  
    }
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    没有看到你是如何实现重力的,我不能 100% 确定,但我会假设这样的事情正在发生(将其视为制作 2D 横向滚动条):

    您的角色将进行水平移动,并且标准化后您将获得恒定的水平速度。

    但是当你施加重力时,你会垂直加速,导致向下的速度增加。

    当您下坡时,您的水平运动是恒定的,但在您的速度标准化后会增加您由重力引起的垂直运动,从而导致在斜坡上时的速度更大坡度。


    要解决这个问题,您可能需要执行以下操作:

    检查你是否接地,如果你是在平坦的表面或斜坡上移动,你应该在加上重力引起的垂直运动后标准化你的速度。

    【讨论】:

    • 感谢 Rishaan Gupta 的回复。我刚刚编辑了我的帖子,添加了我如何计算重力。我也尝试过使运动正常化,但即便如此,下降速度也会更高。
    【解决方案2】:

    我刚刚发现我必须增加 CharacterController 的 Step Offset 属性。好像是在上坡或者楼梯的时候发生了冲突,扣动了。

    我现在在上下斜坡上实现了相同的移动速度,这比在平坦表面上要快,但到目前为止更容易管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多