我正在使用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;
}
}
答案 0 :(得分:1)
没有看到如何实现重力,我不能百分百确定,但是我会假设正在发生类似的事情(将其当作您正在制作2D侧滚动器进行处理):< / p>
您的角色会水平移动,按照正常化操作,您将获得恒定的水平速度。
但是,当您施加重力时,您会垂直加速,导致向下的速度增加。
当您下坡时,您的水平运动是恒定的,但是由重力引起的垂直运动会被添加到您的速度中。 之后,您的速度被归一化,在坡度。
要解决此问题,您可能需要执行以下操作:
检查是否已接地,如果正在接地,则要在平坦的表面或斜坡上运动,并且应在加上重力引起的垂直运动后归一化速度。
答案 1 :(得分:0)
我刚刚发现我必须增加CharacterController的Step Offset属性。似乎在爬坡或上楼梯并扣减运动时会产生一些冲突。
现在我实现了相同的上下移动速度,该速度比在平坦表面上要快,但是到目前为止,它更易于管理。