Я использую Unity's Character Controller для перемещения моего персонажа.
Я использую свое собственное движение, гравитацию и т. Д., Но, похоже, это не влияет непосредственно на движение. Я проверил весь свой код и сократил его до минимума просто для поиска проблемы.
Я напечатал скорость, движение, величины ... Все показывает, что движение точно такое же, как на плоской поверхности или на склонах.
Я не знаю, как работает скрипт Контроллера персонажей, поэтому такое поведение может вызывать некое вычисление.
Вот как я вычисляю свое движение:
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% и уменьшается почти так же, когда поднимается.
Я бы хотел сохранить одинаковую скорость на любой поверхности без необходимости применять модификатор движения или уменьшать ее, находясь над определенной областью, такой как склоны или лестницы.
EDIT:
Вот так я применяю гравитацию.
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;
}
}