【发布时间】: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;
}
}
【问题讨论】: